mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_users.git
synced 2026-05-04 04:40:40 -03:00
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>
This commit is contained in:
79
modules/site_users_blog/site_users_blog.install
Normal file
79
modules/site_users_blog/site_users_blog.install
Normal file
@@ -0,0 +1,79 @@
|
||||
<?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.";
|
||||
}
|
||||
Reference in New Issue
Block a user