Posts Tagged ‘admin’

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

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 (!
8 commentaires

Prestashop 1.7 : Ajouter des champs dans le listing produit admin

A la suite de mon précédent article sur comment ajouter des champs produits dans l’administration de prestashop 1.7 : https://www.h-hennes.fr/blog/2017/10/19/prestashop-1-7-ajouter-des-champs-produit/ , nous allons à présent voir comment ajouter des champs dans le listing des produits de l’administration.

Cette page est gérée via les nouveaux controllers symfony et leur fonctionnement est donc différents des autres listing de l’administration.

 

Je ne détaille pas la base de la création du module qui pourra reprendre celle de l’article sur la création des champs produits.

Le module devra implémenter les hooks suivants :

  • actionAdminProductsListingFieldsModifier (hook natif )
  • displayAdminCatalogTwigListingProductFields ( hook custom)
  • displayAdminCatalogTwigProductFilter ( hook custom )
  • displayAdminCatalogTwigProductHeader ( hook custom )

Pour l’exemple nous allons ajouter un filtre sur les marques des produits, mais la logique s’applique à n’importe quel champ.

Modification des fichiers twigs pour la création des nouveaux hooks

Prestashop 1.7.2.x et inférieurs :

Avec les versions 1.7.2.x et inférieures il n’est pas possible de réaliser cette modification sans toucher à des fichiers “coeur” puisque la surcharge des templates symfony n’est pas encore gérée via les modules.…

15 commentaires

Prestashop 1.7 : Ajouter des champs produit

La nouvelle version 1.7 de Prestashop introduit de gros changements dans la gestion backoffice des fiches produits.
Cette page utilise les nouvelles méthodes symfony et tout les modules souhaitant ajouter des informations produits doivent se mettre à jour pour utiliser les nouvelles méthodes.
Comme d’habitude la documentation prestashop n’est pas exhaustive et je n’ai à date trouvé aucune information ni tutoriel sur le sujet.

Nous allons donc voir ensemble comment rajouter des nouveaux champs produits et les gérer dans l’administration avec Prestashop 1.7
Pour cela nous allons créer un module hhproduct.

Celui-ci ajoutera des nouveaux champs à notre entité produit.

  • custom_field
  • custom_field_lang
  • custom_field_lang_wysiwyg

Nous allons donc de surcharger l’objet Product afin de lui ajouter ces nouveaux champs.
Pour cela créer un fichier Product.php avec le contenu suivant dans le dossier override/classes du module.

lors de l’installation du module ce fichier sera automatiquement placé dans le dossier des overrides par Prestashop.
Contrairement aux autres formulaires Prestashop les hooks spécifiques d’ajout produit sont situés dans un fichier twig,s situé sur le chemin suivant :
src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig

Les hooks disponibles sont les suivants :

  • displayAdminProductsExtra
  • displayAdminProductsMainStepLeftColumnMiddle
  • displayAdminProductsMainStepLeftColumnBottom
  • displayAdminProductsMainStepRightColumnBottom
  • displayAdminProductsQuantitiesStepBottom
  • displayAdminProductsPriceStepBottom
  • displayAdminProductsOptionsStepTop
  • displayAdminProductsOptionsStepBottom
  • displayAdminProductsSeoStepBottom ( dans le fichier src/PrestaShopBundle/Resources/views/Admin/Product/Include/form_seo.html.twig )

Vous pouvez voir leurs emplacements sur les captures ci-dessous.…

102 commentaires

Magento : Ajouter des filtres dans la grid des produits d’une catégorie

J’ai récemment fait face aux limites de la gestion des produits des catégories dans l’administration de Magento.

En effet, dans l’onglet “Produits de la catégories” l’ensemble des produits associés sont listés, et il n’est pas possible de filtrer ceux qui ne sont pas visibles en front office ( Produits désactivés, produits non visibles individuellement, ou uniquement dans la recherche )

Pour optimiser cela, nous allons donc rajouter les possibilités suivantes à la grid :

  • Filtrer par status ( Actif / Non actif )
  • Filtrer par visibilité ( Non visible individuellement, Catalogue … )

Pour faire cela nous allons réaliser un nouveau module.
Je ne détaille pas la création du module ni tout ce qui est générique car cet exemple est le même que pour le cas suivant : https://www.h-hennes.fr/blog/2015/06/29/magento-ajouter-un-attribut-personnalise-a-la-grid-des-produits-via-les-observers/

Le module qui réalise les 2 actions  est disponible sur github : https://github.com/nenes25/magento_productGridFilter)

Il serait possible de surcharger directement la grid Mage_Adminhtml_Block_Catalog_Category_Tab_Product  pour faire cela, mais magento permets de le faire plus proprement via des Observers.…

Pas de commentaires

Magento : Ajouter des actions de masse à la grid des promotions panier

Par défaut la grid d’administration des promotions panier ne permets pas d’exécuter d’actions de masses.
Dans le cas de désactivation multiples il est donc nécessaire de passer sur chaque règle pour la désactiver via l’administration ( ou de créer un script ), ce qui est relativement long et fastidieux

Pour optimiser cela voici comment rajouter des actions de masses à cette liste sans surcharge.
( Cette méthode est valide pour toutes les grids existantes et ne comportant pas d’actions de masse )

Nous allons pour cela créer un nouveau module, dans mon exemple je vais l’appeler Hhennes_Test.
( Je ne détaille pas la création totale du module mais uniquement les points spécifiques à la problématique )

Pour mettre nos actions de masse nous allons utiliser l’observer : adminhtml_block_html_before
Il faut donc mettre les lignes suivantes dans le fichier config.xml de notre module

<adminhtml>
        <events>
            <adminhtml_block_html_before>
                <observers>
                    <hhennes_test_add_massaction_promo_grid>
                        <type>singleton</type>
                        <class>hhennes_test/observer</class>
                        <method>addMassActionPromoGrid</method>
                    </hhennes_test_add_massaction_promo_grid>
                </observers>
            </adminhtml_block_html_before>
        </events>
    </adminhtml>

Dans l’événement nous appelons la fonction addMassActionPromoGrid du modèle hhennes_test/observer

Voici donc le code à mettre dans ce fichier Hhennes_Test/Model/Observer.php

<?php
 
/**
 * Hhennes_Test : Observer Model
 *
 * @author Herve <[email protected]>
 */
class Hhennes_Test_Model_Observer {
 
    /**
     * Ajout de paramètres d'actions de masse sur la grid des promotions panier
     * @param Varien_Event_Observer $observer
     */
    public function addMassActionPromoGrid($observer) {
 
        //On récupère le bloc qui est traité
        $block = $observer->getBlock();
    
        //On effectue uniquement une action si c'est la grid des promotions panier
        if ($block instanceof Mage_Adminhtml_Block_Promo_Quote_Grid) {
    
            //Définition des paramètes masseAction du bloc
            $block->setMassactionIdField('rule_id');
            $block->getMassactionBlock()->setFormFieldName('rules_id');
            $block->getMassactionBlock()->setUseSelectAll(false);
 
            //Ajout de l'action de masse "Suppression"
            $block->getMassactionBlock()->addItem('rule_delete', array(
                'label' => Mage::helper('hhennes_test')->__('delete'),
                'url' => $block->getUrl('hhennes_test/adminhtml_promoQuote/massDelete'), //Controller du module
                    )
            );
 
            //Ajout de l'action de masse "Changement de statut"
            $block->getMassactionBlock()->addItem('rule_status', array(
                'label' => Mage::helper('hhennes_test')->__('Change Status'),
                'url' => $block->getUrl('hhennes_test/adminhtml_promoQuote/massStatus'), //Controller du module
                'additional' => array(
                    'visibility' => array(
                        'name' => 'status',
                        'type' => 'select',
                        'class' => 'required-entry',
                        'label' => Mage::helper('salesrule')->__('Status'),
                        'values' => array(
                            '1' => Mage::helper('salesrule')->__('Active'),
                            '0' => Mage::helper('salesrule')->__('Inactive'),
                        ),
                    )),
            ));
 
            //Configuration et ajout de la colonne pour sélectionner les élément à traiter
            $massactionColumn = array(
                'index' => $block->getMassactionIdField(),
                'filter_index' => $block->getMassactionIdFilter(),
                'type' => 'massaction',
                'name' => $block->getMassactionBlock()->getFormFieldName(),
                'align' => 'center',
                'is_system' => true
            );
            $block->addColumn('massaction', $massactionColumn, 'promo_quote_grid');
 
        }
    }
 
}

Les actions de masses sont à présent bien disponibles sur la grid, comme vous pouvez le voir dans la capture suivante.…

Pas de commentaires

Prestashop : Afficher la référence fournisseur dans la liste admin des produits

Si vous souhaitez rajouter la référence fournisseur dans la liste des produits dans l’administration afin de pouvoir filtrer les produits via ce paramètre voici comment faire :

( Attention en raison de la méthode de stockage, ceci fonctionne uniquement pour les produits qui n’ont pas de déclinaisons )

Créer un override de la classe AdminProductControllers dans l’emplacement override/controllers/admin/ et insérer le code suivant :

<?php
class AdminProductsController extends AdminProductsControllerCore
{
    
    public function __construct()
    {
        
        parent::__construct();
        
        // On joint la table ps_supplier ou la référence est stockée
        $this->_join .= ' LEFT JOIN '._DB_PREFIX_.'product_supplier ps ON ( a.id_product = ps.id_product AND ps.id_product_attribute = 0 )';
        
        //Ajout du champs dans la liste des champs affichés dans l'amdin
        $this->fields_list['product_supplier_reference'] = array(
            'title' => $this->l('Supplier Reference'),
            'align' => 'left',
            'filter_key' => 'ps!product_supplier_reference',
            'width' => 80
        );
    }
}

La nouvelle colonne “Supplier reference” apparait bien ensuite dans le listing des produits, et il est possible de trier via ce paramètre 🙂
Supplier renference admin list

 

Edit 2015-08-20 :
Si vous souhaitez également pouvoir rechercher les produits dans l’administration via ces références, voici comment procéder :

Pour commencer il faut surcharger la fonction searchByName de la classe Product , afin de chercher dans le champ supplier_reference

 

<?php 
class Product extends ProductCore {
 
 
    /**
    * Admin panel product search
    *
    * @param integer $id_lang Language id
    * @param string $query Search query
    * @return array Matching products
    */
    public static function searchByName($id_lang, $query, Context $context = null)
    {
        if (!
3 commentaires

Prestashop 1.5 : Requête ajax dans la configuration d’un module

J’ai perdu dernièrement pas mal de temps en tentant de mettre en place des appels ajax dans la configuration d’un module Prestashop version 1.5.
Les méthodologies qui fonctionnent très bien avec les dernières version de prestashop ne fonctionnaient pas du tout.

Après analyse du code, il s’avère que la gestion des requêtes ajax pour les modules prestashop telle que nous la connaissons n’est pas implémentée pour les versions inférieures à la version 1.6.0.3

Pour corriger cela, il est nécessaire de surcharger la fonction postProcess de la classe AdminController.

Pour faire cela proprement il faut donc créer un override dans le fichier :
override/classes/controller/AdminController.php

avec le contenu suivant :
( j’ai tout simplement repris celui des dernières version )

<?php 
class AdminController extends AdminControllerCore {
 
    /**
     * @todo uses redirectAdmin only if !$this->ajax
     */
    public function postProcess() {
        if ($this->ajax) {
 
            // from ajax-tab.php
            $action = Tools::getValue('action');
            // no need to use displayConf() here
            if (!
1 commentaire


Compte Github