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
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 🙂
mai 21st, 2018
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!
mai 22nd, 2018
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é
mai 21st, 2018
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!
mai 23rd, 2018
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
mai 28th, 2018
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!???
juin 1st, 2018
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'");
juin 7th, 2018
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
juillet 26th, 2018
ça marche nickel. Merci pour le tuto.