Como criar um menu no painel administrativo do Magento 2
Tags: php, magento2, braziliandevs, tutorial
Published: 2021-12-22 19:00:22

## Código para criar um menu

Para a criação de novos menus no painel administrativo do Magento é necessário criar um arquivo chamado `menu.xml` que deve seguir a estrutura de pasta `\{Vendor}\{Module}\etc\adminhtml\menu.xml`. A estrutura do menu é separada pelos níveis `tab`, `group_items` e `item`.

- `tab`: são botões adicionados na barra lateral esquerda do menu do painel administrativo;
- `group_items`: é um título secundário que não redireciona a nenhuma página e pertence a uma `tab` específica, porém agrupa os itens que contém o redirecionamento por funcionalidades;
- `item`: é um link que redireciona para a página e pode pertencer ou não a um `group_items`.

```xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="{Vendor}_{Module}::{tab_id}" title="{Tab Title}" translate="title" module="{Vendor}_{Module}" sortOrder="{integer}" resource="{Vendor}_{Module}::{aclResourceId}" />
        <add id="{Vendor}_{Module}::{group_items_id}" title="{Group Items Title}" translate="title" module="{Vendor}_{Module}" sortOrder="{integer}" resource="{Vendor}_{Module}::{aclResourceId}" parent="{Vendor}_{Module}::{tab_id}" />
        <add id="{Vendor}_{Module}::{item_id}" title="{Item Title}" translate="title" module="{Vendor}_{Module}" sortOrder="{integer}" resource="{Vendor}_{Module}::{aclResourceId}" parent="{Vendor}_{Module}::{group_items_id}" action="{route_frontend_name}/{controller_directory}/{controller_name}" />
    </menu>
</config>
```

### Atributos do Menu

| Atributos | Descrição                                                                                                                              |
|-----------|----------------------------------------------------------------------------------------------------------------------------------------|
| id        | Define o identificador único que é utilizado no menu.                                                                                  |
| title     | Texto que será exibido na barra de menu.                                                                                               |
| module    | Define o módulo no qual o menu pertence.                                                                                               |
| sortOrder | Define a ordem de classificação dos menus. A ordem é determinada por números crescente, então números menores aparecerão primeiro.     |
| parent    | Atributo id de outro módulo, especificando qual o pai do nó atual.                                                                     |
| action    | Define a URL da página que será redirecionada. Deve obedecer o formato `{route_frontend_name}/{controller_directory}/{controller_name}`. |
| resource  | Define o id do ACL na qual o usuário administrador terá acesso.                                                                        |

---

## Finalizando

> Valores entre chaves (`{test}`) devem ser alterados na implementação do código.

### Habilitando as alterações

Execute o comando PHP para limpar todos os caches de armazenamento em cache do processos.

```bash
php bin/magento cache:clean
php bin/magento flush
```

### Diretórios e Arquivos

Segue a a lista de diretórios e arquivos que devem ser criados.

```
- app/
  - code/
    - {Vendor}/
        - {Module}/
          - etc/
            - adminhtml/
              - menu.xml
            - module.xml
          - registration.php
          - composer.json
```