Neste guia, vamos explorar a criação de um módulo personalizado para Joomla 5. Usaremos o exemplo do módulo mod_hello, que mostra uma lista dinâmica de itens e utiliza recursos modernos do framework, como namespaces, traits e containers de dependências.

Com este guia, você pode criar seu próprio módulo personalizado, aproveitando o poder das ferramentas modernas do Joomla 5. Organize seu projeto, utilize helpers e traits para funcionalidades reutilizáveis, e implemente layouts dinâmicos para exibir os dados de forma eficiente.

Estrutura do Projeto

Aqui está a estrutura padrão de um módulo no Joomla:

mod_hello/
|
├── language/ # Arquivos de linguagem
│   └── en-GB/ # Diretório com traduções
│       ├── mod_hello.ini # Texto exibido pelo módulo
│       └── mod_hello.sys.ini # Metadados (nome e descrição)
|
├── media/ # Recursos estáticos
│   ├── css/ # Estilos CSS do módulo
│   ├── images/ # Imagens usadas pelo módulo
│   └── js/ # Scripts JavaScript
│
├── services/ # Serviços para injeção de dependências
│   └── provider.php # Configuração de serviços
│
├── src/ # Arquivos principais de lógica do módulo
│   ├── Dispatcher/
│   │   └── Dispatcher.php # Controlador para tratar requisições
│   └── Helper/
│       └── HelloHelper.php # Funções auxiliares do módulo
│
├── tmpl/ # Layouts e templates
│   └── default.php # Arquivo de exibição padrão
│
├── mod_hello.xml # Manifesto do módulo (configuração e estrutura)
        

Componentes Principais

Dispatcher.php (src/Dispatcher)

Responsável por processar as requisições do módulo e preparar os dados a serem exibidos.

  • Namespace: Joomla\Module\Hello\Site\Dispatcher
  • Classe: Extende AbstractModuleDispatcher para reaproveitar funcionalidades.
  • Método getLayoutData:
$data['list'] = $this->getHelperFactory()
                    ->getHelper('HelloHelper')
                    ->getItems($data['params'], $this->getApplication());
            

Este método busca dados dinâmicos para exibição usando o helper HelloHelper.

provider.php (services/)

Um provedor de serviços que registra dependências para o módulo.

  • Implementação: Um arquivo PHP com uma classe anônima que implementa ServiceProviderInterface.
  • Serviços Registrados:
    • ModuleDispatcherFactory
    • HelperFactory
    • O módulo propriamente dito.

HelloHelper.php (src/Helper)

Um helper que busca dados no banco de dados.

  • Namespace: Joomla\Module\Hello\Site\Helper
  • Banco de Dados: Usa DatabaseAwareTrait para interações com o banco.
  • Método getItems:
$query->select('*')
      ->from('#__content')
      ->order('title ASC')
      ->setLimit((int) $params->get('count', 5));
            

Retorna artigos da tabela #__content com base nos parâmetros.

default.php (tmpl/)

O layout padrão do módulo, responsável por exibir os dados.

Exemplo de saída HTML:

Manifesto XML (mod_hello.xml)

O manifesto do módulo descreve a estrutura e configurações do projeto.

Para baixar o gerador de módulos e o módulo de exemplo clique aqui.