Formation Magento 2 : Chapitre 3 – Partie D

Ajout du menu dans le BO – Dans une section existante

Nous allons ajouter notre menu dans le BO de Magento.
Pour notre exemple nous mettrons nos liens dans la section « Content »

Créez le fichier
app/code/Maxime/Jobs/etc/adminhtml/menu.xml

Et mettez le contenu suivant :

<?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="Maxime_Jobs::job_head" title="Jobs" module="Maxime_Jobs" sortOrder="100" parent="Magento_Backend::content" resource="Maxime_Jobs::job_head" />
        <add id="Maxime_Jobs::department" title="Departments" module="Maxime_Jobs" sortOrder="10" parent="Maxime_Jobs::job_head" action="jobs/department" resource="Maxime_Jobs::job" />
        <add id="Maxime_Jobs::job" title="Jobs" module="Maxime_Jobs" sortOrder="20" parent="Maxime_Jobs::job_head" action="jobs/job" resource="Maxime_Jobs::job" />
    </menu>
</config>

Nous avons 3 instructions ici.
– Nous créons notre titre « Jobs » qui aura comme parent « Magento_Backend::content » et qui aura comme identifiant « Maxime_Jobs::job_head »
– Nous créons notre sous titre « Departments » qui aura comme parent « Maxime_Jobs::job_head » et qui aura comme identifiant « Maxime_Jobs::department » et comme action « jobs/department »
– Nous créons notre sous titre « Jobs » qui aura comme parent « Maxime_Jobs::job_head » et qui aura comme identifiant « Maxime_Jobs::job » et comme action « jobs/job »

Sachez que vous pouvez jouer avec le sort_order pour changer la position des objets dans leur menu respectif.
Le rendu est le suivant :

Capture du 2015-12-05 17:48:13

Si vous cliquez, vous n’aurez pas l’action voulue bien sûr. Et c’est normal car elle n’est pas encore créée.
Nous verrons ceci lors du prochain article. Mais nous avons d’autres notions à approfondir encore ici.

Ajout du menu dans le BO – Dans une nouvelle section

Dans l’étape précédente nous avons ajouter notre menu dans une section native de Magento.
Nous allons maintenant ajouter notre propre section sur la barre de gauche.

Pour cela c’est très simple, supprimez l’instruction parent="Magento_Backend::content"

Ce qui vous donne le code suivant :

<?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="Maxime_Jobs::job_head" title="Jobs" module="Maxime_Jobs" sortOrder="100" resource="Maxime_Jobs::job_head" />
        <add id="Maxime_Jobs::department" title="Departments" module="Maxime_Jobs" sortOrder="10" parent="Maxime_Jobs::job_head" action="jobs/department" resource="Maxime_Jobs::job" />
        <add id="Maxime_Jobs::job" title="Jobs" module="Maxime_Jobs" sortOrder="20" parent="Maxime_Jobs::job_head" action="jobs/job" resource="Maxime_Jobs::job" />
    </menu>
</config>

Dans l’admin vous verrez que notre menu est maintenant en bas a droite.

Capture du 2016-01-13 17:48:13
Pour le moment l’icone est une icone par défaut définie par Magento.
Lorsque nous aborderons la partie design de cette formation, je vous expliquerai comment procéder 😉

Gestion des ACL

Vous voyez certainement le menu que l’on vient de créer car votre utilisateur à tous les droits. Mais selon la configuration des rôles et des utlisateur, votre utilisateur de l’admin peut ou ne peut pas voir certains liens.
Comme nous créons une nouvelle section, nous devons créer ses autorisations (ACL).

Créez le fichier :
app/code/Maxime/Jobs/etc/acl.xml

Et mettez-y ce contenu :

<?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::content">-->
                    <resource id="Maxime_Jobs::job_head" title="Jobs" sortOrder="100" >
                        <resource id="Maxime_Jobs::department" title="Departments" sortOrder="10">
                            <resource id="Maxime_Jobs::department_save" title="Save Department" sortOrder="10" />
                            <resource id="Maxime_Jobs::department_delete" title="Delete Department" sortOrder="20" />
                        </resource>
                        <resource id="Maxime_Jobs::job" title="Jobs" sortOrder="20">
                            <resource id="Maxime_Jobs::job_save" title="Save Job" sortOrder="10" />
                            <resource id="Maxime_Jobs::job_delete" title="Delete Job" sortOrder="20" />
                        </resource>
                    </resource>
                <!--</resource>-->
            </resource>
        </resources>
    </acl>
</config>

Notez que j’ai commenté 2 lignes, vous devez les décommenter si vous avez laissé le menu dans la section « Content ».
Dans le cas contraire, vous pouvez supprimer ces deux lignes commentées.

Ce XML permet de définir l’arborescence des droits.
Pour vérifier que cela fonctionne, rendez-vous dans

System > Permissions > User roles

Cliquez sur le rôle de votre choix
Cliquez sur « Role ressources » et choisissez « custom » dans le menu déroulant.

Vous devriez voir nos actions :

jobs acl

A partir de ce moment, notre menu est bien créé, et ses droits sont gérables.
La prochaine étape sera de créer les controllers dans l’admin pour accéder aux pages voulues.

Continuer la formation
Revenir à la partie précédente
Création d’un menu dans l’admin et gestion des droits sous Magento 2
Taggé sur :    

4 thoughts on “Création d’un menu dans l’admin et gestion des droits sous Magento 2

  • 31/05/2016 à 17:08
    Permalink

    Bonjour Maxime,

    C’est logique le les 2 sous menus Jobs et Departments ont la meme ressource ???

    Répondre
    • 31/05/2016 à 18:14
      Permalink

      De mémoire je ne sais plus mais il faudrait tester en mettant Maxime_Jobs::department pour les départements. Et en activant / désactivant les droits pour voir si l’entrée s’affiche ou non dans le menu.

      Répondre
      • 01/06/2016 à 08:58
        Permalink

        Merci Maxime,

        J’au un autre soucis, quand je click sur les 2 menus Jobs ou Departments, il me redirige vers la page d’accueil de l’admin.

        Merci d’avance

        Répondre
        • 01/06/2016 à 09:46
          Permalink

          J’utilise la version 2.0.7
          Je trouve que hiérarchie qui doit être utilisée est de mettre les actions dans un dossier Controller/Adminhtml

          Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok