Prestashop 1.7 : Gérer les menus dans l’administration

Ce tutoriel est compatible avec les versions de Prestashop suivantes :
1.7 1.7.2 1.7.5 1.7.7 1.7.8 8.0 +
Cet article est assez ancien, malgré toute l'attention que j' apporte à mes contenus il est possible que celui-ci ne soit plus d'actualité.
N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.

Dernièrement j’ai souhaité désactiver l’affichage d’un élément de menu dans le back-office de prestashop 1.7 .
Pour un utilisateur standard c’est relativement simple puisqu’il suffit de jouer avec les permissions pour afficher / masquer les différents menu, mais ce n’est pas le cas dans un rôle d’administrateur.

La page de gestion des menus qui existait dans les anciennes versions n’est plus accessible, via des liens existants ( ou alors je ne l’ai pas trouvée ).
La bonne nouvelle par contre c’est que le controlleur existe toujours.

Pour (re)faire fonctionner la gestion des menus, nous allons donc créer un nouveau module hh_adminmenu
Avec le contenu suivant :

class Hh_AdminMenu extends Module {
 
    public function __construct() {
 
        $this->name = 'hh_adminmenu';
        $this->displayName = 'HH admin menu';
        $this->tab = '';
        $this->version = '0.1.0';
        $this->author = 'hhhennes';
 
        parent::__construct();
 
        $this->displayName = $this->l('Hh Admin menu');
        $this->description = $this->l('Display again admin menu management');
        $this->ps_versions_compliancy = array('min' => '1.7.1', 'max' => _PS_VERSION_);
    }
 
    /**
     * Install Module
     * @return boolean
     */
    public function install() {
 
        if (!parent::install()) {
            return false;
        }
 
        //Ajout du liens vers la page des menus existants
        $tab = new Tab();
        $tab->class_name = 'AdminTabs';
        $tab->id_parent = Tab::getIdFromClassName('AdminAdvancedParameters');
        $languages = Language::getLanguages();
        foreach ($languages as $lang) {
            $tab->name[$lang['id_lang']] = $this->l('Menus');
        }
        try {
            $tab->save();
        } catch (Exception $e) {
            echo $e->getMessage();
            return false;
        }
 
        return true;
    }
 
    /**
     * Uninstall module
     * @return boolean
     */
    public function uninstall() {
 
        if ( !parent::uninstall() ) {
            return false ;
        }
 
        $id_tab = Tab::getIdFromClassName('AdminTabs');
        $tab = new Tab($id_tab);
        try{
            $tab->delete();
        } catch (Exception $e) {
            echo $e->getMessage();
            return false;
        }
 
        return true;
    }
 
}

L’installation du menu permettra le retour de l’élément « menus » dans les Paramètre avancés

Menu admin

La gestion des droits de cette page a été modifiée pour en interdire l’accès, il est donc également nécessaire de sucharger le controller AdminTabsController
via le fichier override/controllers/admin/AdminTabsController.php avec le contenu suivant :

class AdminTabsController extends AdminTabsControllerCore {
 
 
    /**
     * Changement du mode d'accès pour pouvoir afficher l'onglet
     * @param string $action
     * @param bool $disable
     */
    public function access($action, $disable = false)
    {
        return Profile::getProfileAccess($this->context->employee->id_profile, Tab::getCurrentTabId());       
    }
 
}

Une fois le module installé, le menu est bien de retour 🙂

Menus admins

8 réflexions sur “Prestashop 1.7 : Gérer les menus dans l’administration”

  1. Bonjour,
    j’utilise la dénière version de prestashop,
    et ça affiche toujours Accès interdit.
    problème de surcharge je crois, quand je crie, le fichier AdminTabsController.php, il me génère un fichier AdminTabsController.php dans le répertoire ~prestashop\override\controllers\admin mais qui est complètement vide
    //
    <?php
    class AdminTabsController extends AdminTabsControllerCore {

    /**
    * Changement du mode d'accès pour pouvoir afficher l'onglet
    * @param string $action
    * @param bool $disable
    */

    }
    //

    je ne comprend pas où ça viens le problème!

    1. Bonjour,

      Attention a bien vider le cache pour vérifier si cela fonctionne.
      Sinon si l’override ne fonctionne pas bien vous pouvez tout à fait placer le fichier manuellement dans l’emplacement.

      Cordialement,
      Hervé

  2. Une deuxième question!
    lors de la desinstallation « Menus » reste toujours dans le submenu de Paramètres Avancés!
    j’essaye de l’enlever et je n’arrive pas encore!

  3. Bonjour, merci pour votre réponse, oui j’ai déjà essayer de le faire, il m’affiche toujours Accès interdit( peut être problème de version, je suis avec la dernière version de prestashop),
    sinon un deuxième problème que j’ai rencontré avec ce module:
    lors de la désinstallation le champs « Menus » reste toujours, et lors d’une deuxième installation on auras 2 champs « Menus » (3 installation 3 « Menus » …etc)
    Merci

  4. je n’arrive toujours pas à régler se problème, toujours plus d’un seul onglet « Menus », et toujours Accès interdit.

    quelqu’un à une idée!???

    1. Pour l’accès interdit pensez à vider votre cache,pour que la surcharge soit prise en compte.
      De mon côté cela fonctionne correctement.

      Pour la suppression du menu elle ne fonctionne en effet plus dans les dernières version de prestashop.
      Pour corriger cela il faut remplacer :
      $id_tab = Tab::getIdFromClassName('AdminTabs');
      par $id_tab = Db::getInstance()->getValue("SELECT id_tab FROM "._DB_PREFIX_."tab WHERE class_name='AdminTabs'");

  5. Bonjour,
    ça fonctionne correctement au niveau de l’affichage, Mais l’accès interdit reste toujours malgré que je vide le cache a chaque fois.
    Merci Beaucoup pour ces tutos

Laisser un commentaire

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