Creare una pagina nell'Admin di Magento

Creare una pagina all'interno dell'area di amministrazione di Magento è un'operazione relativamente semplice.

Proviamo ad elencare i vari passaggi da eseguire supponendo l'esistenza dell'estensione per la quale si necessita la pagina nell'Admin, per esempio WaPoNe_CustomersCounter.

Il primo step è l'aggiunta della voce all'interno del menu di navigazione.

Per svolgere tale compito bisogna creare il file di configurazione nominato menu.xml nella cartella dell'estensione, in questo preciso percorso: <extension_dir>/etc/adminhtml/

Questo il contenuto del file <extension_dir>/etc/adminhtml/menu.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="WaPoNe_CustomersCounter::saluti"
­­­­­­­­­­­­ title="Saluti"
­­­­­­­­­­­­ translate="title"
­­­­­­­­­­­­ module="WaPoNe_CustomersCounter"
­­­­­­­­­­­­ parent="Magento_Backend::marketing"
­­­­­­­­­­­­ sortOrder="10"
­­­­­­­­­­­­ dependsOnModule="WaPoNe_CustomersCounter"
­­­­­­­­­­­­ resource="WaPoNe_CustomersCounter::saluti"/>
­­­­­­­ <add id="WaPoNe_CustomersCounter::ciao_pippo"
­­­­­­­­­­­­ title="Ciao Pippo"
­­­­­­­­­­­­ translate="title"
­­­­­­­­­­­­ module="WaPoNe_CustomersCounter"
­­­­­­­­­­­­ parent="WaPoNe_CustomersCounter::saluti"
­­­­­­­­­­­­ sortOrder="10"
­­­­­­­­­­­­ dependsOnModule="WaPoNe_CustomersCounter"
­­­­­­­­­­­­ action="saluti/ciaopippo"
­­­­­­­­­­­­ resource="WaPoNe_CustomersCounter::saluti"/>
­­­ </menu>
</config>

Il­ codice sopra si occupa di inserire due voci di menu: Saluti (voce di primo livello) e Ciao Pippo (voce di secondo livello, figlia di Saluti), come intuibile leggendo l'attributo title degli elementi add.

Oltre all'attributo title che, come mostrato serve a dare una label alla voce di menu, importanti sono innanzitutto l'id che identifica l'item all'interno del sistema del menu e di conseguenza parent che, basandosi sull'id dell'elemento, assegna una gerarchia tra le voci. Nel codice infatti si può notare che­ Saluti dipende da Magento_Backend::marketing, una delle voci principali (Marketing) del menu di base di Magento, mentre­ Ciao Pippo è figlia di Saluti tramite questa "istruzione": WaPoNe_CustomersCounter::saluti

Questo il risultato finora ottenuto:

­

La maggior parte delle voci di menu principali esistenti di Magento sono definiti nel seguente file del core di Magento: <mage_dir>/vendor/magento/module-backend/etc/adminhtml/menu.xml

­Un altro attributo fondamentale è action, inserito solo per la voce di menu Ciao Pippo. In questa maniera si sta definendo una action che viene gestita da un controller Adminhtml quindi è necessario innanzitutto la dichiarazione della route della richiesta tramite la creazione del file <extension_dir>/etc/adminhtml/routes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
­­­­­­­ xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
­­­ <router id="admin">
­­­­­­­ <route id="saluti" frontName="saluti">
­­­­­­­­­­­ <module name="WaPoNe_CustomersCounter"/>
­­­­­­­ </route>
­­­ </router>
</config>

settando ovviamente l'attributo frontName="saluti" (la prima parte della action della voce di menu); la seconda parte della action della voce di menu (ciaopippo) è la cartella dove andare ad inserire il controller che, dato non esser stato "battezzato", si chiamerà Index.php.

A questo punto occorre creare il file per l'implementazione del controller <extension_dir>/Controller/Adminhtml/CiaoPippo/Index.php

­Qui si può quindi gestire la richiesta tramite il metodo pubblico execute()

public function execute()
{
­­ ­$resultPage = $this->resultPageFactory->create();
­­ ­$resultPage->setActiveMenu(static::MENU_ID);
­­ ­$resultPage->getConfig()->getTitle()->prepend(__('Ciao Pippo'));
­return $resultPage;
}

­per ottenere il seguente risultato, cliccando sulla voce di menu Ciao Pippo:

­

Ovviamente si potrebbe anche aggiungere un layout (<extension_dir>/view/adminhtml/layout/saluti_ciaopippo_index.xml) per richiamare un template e rendere visibili ulteriori elementi grafici ed informazioni.

L'ultimo attributo da considerare è resource che serve per gestire i permessi per l'accesso alle nuove voci di menu. Bisogna creare il file <extension_dir>/etc/acl.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
­­­­­­­ xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
­­­ <acl>
­­­­­­­ <resources>
­­­­­­­­­­­ <resource id="Magento_Backend::admin">
­­­­­­­­­­­­­­­ <resource id="Magento_Backend::marketing">
­­­­­­­­­­­­­­­­­­­ <resource id="WaPoNe_CustomersCounter::saluti"
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ title="WaPoNe Customers Counter"
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ sortOrder="10" />
­­­­­­­­­­­­­­­ </resource>
­­­­­­­­­­­ </resource>
­­­­­­­ </resources>
­­­ </acl>
</config>

Da notare l'id di resource che combacia con quello definito nel file menu.xml

Tramite questa operazione sarà possibile definire quale tipologia di utenze potranno accedere a tale risorse:

­

Un utente senza i corretti permessi non visualizzarà le voci di menu legate alla resource WaPoNe_CustomersCounter::saluti

Rimanendo in ambito di sicurezza, si potrebbero impostare i permessi per l'accesso al controller aggiungento nel file­<extension_dir>/Controller/Adminhtml/CiaoPippo/Index.php la funzione _isAllowed(), che deriva dalla classe <mage_dir>/vendor/magento/module-backend/App/AbstractAction.php

protected function _isAllowed()
{
­­ ­return $this->_authorization->isAllowed('WaPoNe_CustomersCounter::saluti');
}

Come mostrato, Magento mette a disposizione un meccanismo allo stesso tempo semplice e potente per la gestione del menu.

Categoria: