Site Tools

Módulo Drupal com ferramentas utilitárias reutilizáveis para outros módulos do site.

Funcionalidades

  • Menu de configuração "Local Modules": Fornece uma seção centralizada em /admin/config/local-modules para configurações de módulos desenvolvidos internamente.
  • Bloco Share Links: Bloco de compartilhamento em redes sociais extensível via hooks.
  • Condição de visibilidade "Usuário da página é o usuário logado": Restringe a exibição de qualquer bloco à situação em que o usuário autenticado é o mesmo da rota /user/{id}.
  • Extensão Twig site_tools_academic_icon: Função Twig para renderizar ícones SVG de plataformas acadêmicas (Lattes, ORCID, MathSciNet).

Sub-módulos

  • site_tools_group_helpers: Plugin EntityReferenceSelection que restringe campos de referência a grupos aos grupos dos quais o usuário atual é membro, com troca automática para o widget options_select. Requer o módulo contrib group.
  • site_tools_msc_2020: Widget de seleção em cascata (13 níveis) para o vocabulário MSC 2020, com carregamento eficiente dos 597 termos via loadTree() + consulta direta ao banco.
  • site_tools_msc_2020_migrate: Migrations para importação do vocabulário MSC 2020 a partir de CSV.

Requisitos

  • Drupal 10.3+ ou 11

Instalação

  1. Coloque o módulo no diretório modules/custom/
  2. Ative o módulo via Drush: drush en site_tools
  3. Limpe o cache: drush cr

Uso

Outros módulos podem usar a seção "Local Modules" adicionando em seus arquivos .links.menu.yml:

meu_modulo.settings:
  title: 'Meu Módulo'
  description: 'Configurações do meu módulo'
  route_name: meu_modulo.settings
  parent: site_tools.admin_config
  weight: 10

E declarando a dependência em .info.yml:

dependencies:
  - site_tools

O bloco Share Links funciona como um container que coleta e exibe links de compartilhamento fornecidos por outros módulos através de hooks.

Configuração

  1. Acesse /admin/structure/block
  2. Posicione o bloco "Share Links" na região desejada

Implemente hook_site_tools_share_links() no seu módulo:

/**
 * Implements hook_site_tools_share_links().
 */
function meu_modulo_site_tools_share_links(): array {
  $current_url = \Drupal::request()->getUri();
  $encoded_url = urlencode($current_url);

  return [
    'facebook' => [
      'content' => [
        '#type' => 'link',
        '#title' => t('Facebook'),
        '#url' => \Drupal\Core\Url::fromUri(
          "https://www.facebook.com/sharer/sharer.php?u={$encoded_url}"
        ),
        '#attributes' => [
          'target' => '_blank',
          'rel' => 'noopener',
        ],
      ],
      'weight' => 0,
      'provider' => 'meu_modulo',
    ],
  ];
}

Use hook_site_tools_share_links_alter() para modificar ou remover links:

/**
 * Implements hook_site_tools_share_links_alter().
 */
function meu_modulo_site_tools_share_links_alter(array &$links): void {
  unset($links['twitter']);
}

Documentação Completa

Consulte docs/share-links.md para documentação detalhada incluindo:

  • Exemplos de integração com AddToAny
  • Personalização do template Twig
  • Classes CSS disponíveis
  • Gerenciamento de cache

Condição de visibilidade: Usuário da página é o usuário logado

O plugin PageUserIsCurrentUser adiciona uma condição de visibilidade reutilizável a qualquer bloco do site.

Configuração

  1. Acesse /admin/structure/block e edite o bloco desejado
  2. Na aba Visibilidade, localize a seção "Usuário da página é o usuário logado"
  3. Marque "Exibir apenas para o dono da página" e salve

Quando ativada, o bloco só é exibido se o usuário autenticado tiver o mesmo ID que o parâmetro {id} da rota /user/{id}. A opção "Negar a condição" inverte o comportamento (exibe para todos exceto o dono).

Extensão Twig: ícones de plataformas acadêmicas

A função site_tools_academic_icon(name) retorna o SVG inline do ícone solicitado como marcação segura (sem necessidade de |raw).

Ícones disponíveis

Nome Plataforma Cor
home Página pessoal sem fill (definir via CSS)
lattes Plataforma Lattes (CNPq) #005195
orcid ORCID #a6ce39
mathscinet MathSciNet (AMS) #0f4f96

Uso em templates Twig

{{ site_tools_academic_icon('lattes') }}
{{ site_tools_academic_icon('orcid') }}
{{ site_tools_academic_icon('mathscinet') }}

O SVG já inclui aria-hidden="true" e focusable="false". Para acessibilidade, envolva o ícone em um <a> com aria-label:

<a href="https://lattes.cnpq.br/{{ lattes_id }}"
   target="_blank" rel="noopener noreferrer"
   aria-label="{{ 'Currículo Lattes'|t }}">
  {{ site_tools_academic_icon('lattes') }}
</a>

Sub-módulo: site_tools_msc_2020

Widget de campo (FieldWidget) para seleção hierárquica de termos do vocabulário MSC 2020 (Mathematics Subject Classification), com até 3 níveis em cascata via AJAX.

Configuração

  1. Ative o sub-módulo: drush en site_tools_msc_2020
  2. No formulário de exibição do campo (/admin/structure/types/manage/.../form-display), selecione o widget "MSC 2020 — Seleção em cascata"
  3. Configure o Nível máximo (1, 2 ou 3) nas opções do widget

Níveis

Nível Código Exemplo
1 2 dígitos 03
2 3 caracteres 03B
3 5 caracteres 03B05

O valor armazenado é sempre o TID do nível mais profundo selecionado. Selecionar "— área geral —" em um nível armazena o TID do nível imediatamente superior.

Sub-módulo: site_tools_msc_2020_migrate

Migrations para importação do vocabulário MSC 2020 a partir de arquivos CSV.

Uso

drush en site_tools_msc_2020_migrate
drush migrate:import --group=msc_2020
Description
No description provided
Readme 198 KiB
Languages
PHP 95%
CSS 3%
Twig 1.7%
JavaScript 0.3%