mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/structural_pages.git
synced 2026-05-05 05:50:40 -03:00
Adiciona campo field_show_in_menu ao content_page
Campo booleano (padrão: ativo) que controla se a página aparece no menu de navegação. Quando desmarcado, oculta field_menu_title no formulário via #states e exclui a página da query em getChildPages(). O campo field_weight permanece sempre visível, pois a ordenação se aplica independentemente da exibição no menu. Hook update_10015 cria storage + instância, atualiza o form display e retroativamente define o valor como 1 para páginas existentes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -923,3 +923,69 @@ function structural_pages_update_10014(): string {
|
||||
|
||||
return 'Campos field_menu_title e field_weight adicionados ao content_page.';
|
||||
}
|
||||
|
||||
/**
|
||||
* Adiciona field_show_in_menu (boolean) ao content_page.
|
||||
*
|
||||
* Retroativamente define o valor como 1 (exibir) para todas as páginas
|
||||
* existentes, preservando o comportamento anterior.
|
||||
*/
|
||||
function structural_pages_update_10015(): string {
|
||||
$etm = \Drupal::entityTypeManager();
|
||||
|
||||
// --- field_show_in_menu ---
|
||||
if (!\Drupal\field\Entity\FieldStorageConfig::loadByName('node', 'field_show_in_menu')) {
|
||||
\Drupal\field\Entity\FieldStorageConfig::create([
|
||||
'field_name' => 'field_show_in_menu',
|
||||
'entity_type' => 'node',
|
||||
'type' => 'boolean',
|
||||
'settings' => ['on_label' => 'Sim', 'off_label' => 'Não'],
|
||||
'cardinality' => 1,
|
||||
'translatable' => FALSE,
|
||||
])->save();
|
||||
}
|
||||
if (!\Drupal\field\Entity\FieldConfig::loadByName('node', 'content_page', 'field_show_in_menu')) {
|
||||
\Drupal\field\Entity\FieldConfig::create([
|
||||
'field_name' => 'field_show_in_menu',
|
||||
'entity_type' => 'node',
|
||||
'bundle' => 'content_page',
|
||||
'label' => 'Exibir no menu',
|
||||
'description' => 'Se desmarcado, a página não aparecerá no menu de navegação.',
|
||||
'required' => FALSE,
|
||||
'translatable' => FALSE,
|
||||
'default_value' => [['value' => 1]],
|
||||
])->save();
|
||||
}
|
||||
|
||||
// Adiciona ao form display padrão.
|
||||
$form_display = $etm->getStorage('entity_form_display')
|
||||
->load('node.content_page.default');
|
||||
if ($form_display && !$form_display->getComponent('field_show_in_menu')) {
|
||||
$form_display->setComponent('field_show_in_menu', [
|
||||
'type' => 'boolean_checkbox',
|
||||
'weight' => 1,
|
||||
'region' => 'content',
|
||||
'settings' => ['display_label' => TRUE],
|
||||
]);
|
||||
$form_display->save();
|
||||
}
|
||||
|
||||
// Retroativamente define field_show_in_menu = 1 para content_pages existentes
|
||||
// que ainda não têm valor (NULL é tratado como 0 nas queries).
|
||||
$nids = $etm->getStorage('node')->getQuery()
|
||||
->accessCheck(FALSE)
|
||||
->condition('type', 'content_page')
|
||||
->notExists('field_show_in_menu')
|
||||
->execute();
|
||||
|
||||
foreach ($nids as $nid) {
|
||||
/** @var \Drupal\node\NodeInterface $node */
|
||||
$node = $etm->getStorage('node')->load($nid);
|
||||
if ($node) {
|
||||
$node->set('field_show_in_menu', 1);
|
||||
$node->save();
|
||||
}
|
||||
}
|
||||
|
||||
return 'Campo field_show_in_menu adicionado ao content_page; ' . count($nids) . ' página(s) retroativamente marcada(s) como visíveis.';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user