mirror of
https://gitlab.unicamp.br/infimecc_drupal11_modules/site_users.git
synced 2026-05-03 18:10:42 -03:00
Adiciona menu 'Adicionar' configurável no menu da conta do usuário
Item pai 'Adicionar' no menu account com subitens derivados dinamicamente a partir de site_users.settings:add_content_links. O pai fica oculto quando o usuário não tem acesso a nenhum dos routes configurados. - Rota site_users.add_content com _custom_access via AddContentAccessCheck - hook_menu_links_discovered_alter() gera os subitens com IDs estáveis - Formulário de settings com tabela editável (label, rota, parâmetro, peso) - CSS do microsite atualizado com dropdown ao hover/focus-within Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
|
||||
use Drupal\Core\Field\FieldDefinitionInterface;
|
||||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Menu\MenuLinkDefault;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\field\FieldConfigInterface;
|
||||
@@ -604,3 +605,44 @@ function site_users_get_default_photo(UserInterface $user): ?MediaInterface {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_menu_links_discovered_alter().
|
||||
*
|
||||
* Adiciona dinamicamente os subitens do menu "Adicionar" configurados em
|
||||
* site_users.settings:add_content_links.
|
||||
*/
|
||||
function site_users_menu_links_discovered_alter(array &$links): void {
|
||||
$items = \Drupal::config('site_users.settings')->get('add_content_links') ?? [];
|
||||
|
||||
foreach ($items as $item) {
|
||||
if (empty($item['route_name']) || empty($item['label'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// ID estável derivado da rota e dos parâmetros.
|
||||
$parts = [preg_replace('/[^a-z0-9]/', '_', strtolower($item['route_name']))];
|
||||
foreach ($item['route_parameters'] ?? [] as $value) {
|
||||
$parts[] = preg_replace('/[^a-z0-9]/', '_', strtolower((string) $value));
|
||||
}
|
||||
$id = 'site_users.add_content_child.' . implode('_', $parts);
|
||||
|
||||
$links[$id] = [
|
||||
'id' => $id,
|
||||
'title' => $item['label'],
|
||||
'route_name' => $item['route_name'],
|
||||
'route_parameters' => $item['route_parameters'] ?? [],
|
||||
'menu_name' => 'account',
|
||||
'parent' => 'site_users.add_content',
|
||||
'weight' => (int) ($item['weight'] ?? 0),
|
||||
'provider' => 'site_users',
|
||||
'class' => MenuLinkDefault::class,
|
||||
'form_class' => 'Drupal\Core\Menu\Form\MenuLinkDefaultForm',
|
||||
'metadata' => [],
|
||||
'options' => [],
|
||||
'expanded' => FALSE,
|
||||
'enabled' => TRUE,
|
||||
'discovered' => TRUE,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user