Files
site_users/modules/site_users_blog/site_users_blog.install
Quintino A. G. Souza d72f41de97 Adiciona sub-módulo site_users_blog e melhora negociador de tema
Sub-módulo site_users_blog:
- Tipo de conteúdo blog_post (título, corpo, imagem, assuntos)
- Vocabulário blog_tags para categorias
- Listagem em /user/{uid}/blog via Views com filtro contextual por autor
- Padrão Pathauto: user/[node:author:uid]/blog/[node:title]
- hook_node_presave: preenche field_site_section com o autor
- hook_node_access: restringe criação às roles configuradas
- hook_preprocess_structural_pages_menu: injeta item "Blog" quando
  usuário tem posts publicados
- Plugin BlogUserHandler: resolve usuário ancestral para rotas de blog
  (post individual e listagem Views)
- Link "Post de blog" no menu "Adicionar" da conta
- Página de configuração de roles permitidas
- Update 10001: adiciona field_site_section a posts existentes

MicrositeThemeNegotiator:
- Injeta path.current para cobrir rotas sem parâmetro 'user' (ex.: Views)
- Qualquer path /user/{uid}/... recebe o tema do microsite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 07:32:10 -03:00

80 lines
2.2 KiB
Plaintext

<?php
/**
* @file
* Instalação do módulo site_users_blog.
*/
/**
* Implements hook_install().
*/
function site_users_blog_install(): void {
// Adiciona o campo body ao tipo blog_post.
$type = \Drupal::entityTypeManager()
->getStorage('node_type')
->load('blog_post');
if ($type) {
node_add_body_field($type, 'Conteúdo');
}
}
/**
* Adiciona field_site_section ao blog_post e preenche posts existentes.
*/
function site_users_blog_update_10001(): string {
$entity_type_manager = \Drupal::entityTypeManager();
// Cria a instância do campo se ainda não existir.
if (!\Drupal\field\Entity\FieldConfig::loadByName('node', 'blog_post', 'field_site_section')) {
\Drupal\field\Entity\FieldConfig::create([
'field_name' => 'field_site_section',
'entity_type' => 'node',
'bundle' => 'blog_post',
'label' => 'Seção do site',
'required' => FALSE,
'translatable' => FALSE,
])->save();
// Oculta o campo no formulário padrão.
$form_display = $entity_type_manager
->getStorage('entity_form_display')
->load('node.blog_post.default');
if ($form_display) {
$form_display->removeComponent('field_site_section')->save();
}
// Oculta o campo nas exibições padrão e teaser.
foreach (['default', 'teaser'] as $mode) {
$view_display = $entity_type_manager
->getStorage('entity_view_display')
->load('node.blog_post.' . $mode);
if ($view_display) {
$view_display->removeComponent('field_site_section')->save();
}
}
}
// Preenche posts existentes que ainda não têm field_site_section.
$nids = $entity_type_manager->getStorage('node')->getQuery()
->condition('type', 'blog_post')
->notExists('field_site_section')
->accessCheck(FALSE)
->execute();
$count = 0;
foreach ($nids as $nid) {
$node = $entity_type_manager->getStorage('node')->load($nid);
if ($node) {
$node->set('field_site_section', [
'target_type' => 'user',
'target_id' => $node->getOwnerId(),
]);
$node->save();
$count++;
}
}
return "field_site_section adicionado ao blog_post; $count posts existentes atualizados.";
}