Adiciona página de configuração do microsite em /user/{id}/config

Permite ao usuário selecionar qual conteúdo (content_page toplevel) é
exibido na página inicial do microsite. A configuração é armazenada via
user.data e a homepage respeita a escolha com fallback para o primeiro nó
publicado. O nó configurado como homepage é ocultado automaticamente do
menu de navegação (structural_pages). Inclui link "Configuração" no menu
da conta via rota de redirecionamento para o usuário atual.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-21 09:55:56 -03:00
parent f4d6c49312
commit 85bc63b250
5 changed files with 209 additions and 5 deletions

View File

@@ -29,6 +29,42 @@ function site_users_microsite_theme(): array {
];
}
/**
* Implements hook_preprocess_structural_pages_menu().
*
* Remove da árvore de navegação o nó configurado como homepage do microsite,
* já que esse conteúdo é exibido diretamente em /user/{id}.
*/
function site_users_microsite_preprocess_structural_pages_menu(array &$variables): void {
$user = site_users_get_microsite_user();
if ($user === NULL) {
return;
}
$homepage_nid = \Drupal::service('user.data')
->get('site_users_microsite', $user->id(), 'homepage_nid');
if (!$homepage_nid) {
return;
}
_site_users_microsite_remove_homepage_from_tree($variables['tree'], (int) $homepage_nid);
}
/**
* Remove recursivamente o nó homepage da árvore do structural_pages_menu.
*/
function _site_users_microsite_remove_homepage_from_tree(array &$items, int $homepage_nid): void {
foreach ($items as $key => $item) {
if ((int) ($item['id'] ?? 0) === $homepage_nid) {
unset($items[$key]);
continue;
}
if (!empty($item['children'])) {
_site_users_microsite_remove_homepage_from_tree($items[$key]['children'], $homepage_nid);
}
}
}
/**
* Implements hook_preprocess_page().
*