[backoffice] Accès simplifié aux produits d'une catégorie

Photo by Victoriano Izquierdo on Unsplash

Le problème

Suite à une question d'un membre du Groupe Facebook Prestashop France concernant l'affichage vide de ses catégories dans son backoffice, il m'a semblé nécessaire de proposer une solution nouvelle de gestion des produits par catégorie.

État des lieux

Dans le fonctionnement de PrestaShop et de thirtybees, lorsque vous souhaitez identifier les produits qui sont référencés dans une catégorie spécifique, vous devez vous rendre dans  Catalogue >> Produits et activer le filtrage par catégorie en cherchant la bonne catégorie.

Cette méthode est cohérente dans la gestion d'un catalogue produits.

Reflexion

Je n'avais jamais pris le temps de réfléchir à ce sujet, mais la réflexion de Dominique me semble légitime.

L'idée première qui vient à l'esprit de tous serait que l'on pourrait afficher simplement les produits dans cette catégorie.

Sauf que cela remet en cause une première logique, le fait que l'on est actuellement dans la section de gestion des Catégories et non des produits et que donc l'affichage et les actions est axé exclusivement sur les catégories.

La seconde logique c'ets que si on affiche les produits dans les catégories sans sous catégories pour remplir ce vide, il serait bon de le faire partout et donc de noyer ses catégories dans les produits et on perdrait beaucoup dans la gestion des catégories et cela deviendrait incohérent d'avoir les produits d'un côté et les catégories de l'autre.

troisièmement, on touche à un concept de programmation à savoir que l'on travaille sur des Objets. Un Objet Produit comme un Objet Catégorie. Et donc les 2 sont liés par une relation qui associe un produit à une ou plusieurs catégories. Il est donc logique, de conserver cette séparation dans leur gestion.

La solution

Pour améliorer tout cela j'ai décidé d'ajouter un simple bouton sur le listing des catégories pour envoyer directement sur la page des produits filtrer sur la catégorie affichée.

J'ai donc plongé dans le code de thirtybees, qui est proche de celui de PrestaShop en version 1.6.

Direction le Controller qui gère l'affichage de cette portion du backoffice.

J'ai eu l'idée de rajouter un bouton identique au bouton Retour à la liste mais positionné sur la droite.

Mais en rajoutant mon lien, il s'est retrouvé listé dans les icônes à droite du titre ce qui est trop petit et surtout n'est pas logique.

Pour réussir à faire un beau bouton je devrait aussi modifier le template du backoffice ce qui ne peut pas se faire par un simple fichier override et donc je devrais proposer une modification importante du coeur et donc je risque me retrouver à avoir plusieurs effets de bords difficilement gérables.

La structure de PrestaShop et donc de thirtybees dans la construction de ces pages est incohérente, car, si j'ai bien compris, le bouton du bas de la grille est identique aux bouton du haut et ce n'est que dans le template qu'on bloque l'affichage en haut ou en bas de tel ou tel bouton.

Il aurait été préférable de prendre le temps de créer un objet supplémentaire pour le bas et ainsi séparer les deux pour apporter plus de possibilité.

Pour éviter tout cela j'ai eu l'idée de rajouter le bouton tout en haut à côté du bouton d'aide.

Pour ce faire il suffit de créer un fichier override du controller et de travailler sur la fonction initPageHeaderToolbar()

Voici le code hyper simple que j'ai mis dans ce fichier :

class AdminCategoriesController extends AdminCategoriesControllerCore
{
    public function initPageHeaderToolbar()
    {
        parent::initPageHeaderToolbar();

        if (isset($this->_category->id) && $this->_category->id) {
            $this->page_header_toolbar_btn['products'] = [
                'href' => $this->context->link->getAdminLink('AdminProducts', true).'&id_category='.(int)$this->_category->id,
                'desc' => $this->l('Products'),
                'help' => $this->l('Show products from this category'),
                'target' => true,
                'icon' => 'process-icon-next',
            ];
        }
    }
}

Simple et surtout efficace si vous n'oubliez pas d'effacé le fichier cache/class_index.php après avoir mis en place le controller.

Vous obtiendrez alors ce nouveau résultat :

En cliquant sur la flèche vous arrivez directement sur la page des produits associés à cette catégorie :

Le résultat me convient parfaitement et j'espère qu'il vous aidera dans la gestion quotidienne de votre catalogue.

N'oubliez pas de déposer votre fichier dans //override/controllers/admin/AdminCategoriesController.php

Conclusion

Je suis assez content d'avoir trouvé une solution acceptable et je crois que je vais la proposer comme modification directement sur le coeur de thirtybees puisque, malheureusement, PrestaShop a pris la décision de faire mourrir définitivement la version 1.6 malgré nos efforts communautaires pour proposer une version compatible PHP 7.2 qui ne furent jamais pris en considération.

Et en goutant à la dernière version de thirtybees, je me dis que le successeur de PrestaShop 1.6 n'est pas la 1.7 mais bien ce fork.

Commentaires