Développement

[TUTO] Ajouter un champ au listing produit du backoffice Prestashop

Par Guillaume , le 22 novembre 2014 , mis à jour le 9 septembre 2019 — 35 commentaires — 8 minutes de lecture

Bonjour,

Dans ce tuto nous allons voir comment ajouter un champ au listing produits du backoffice de Prestashop.

Dans ce tuto j’utilise la dernière version de Prestashop qui est : 1.6.0.9

1 – l’Override dans Prestashop

Dans Prestashop, nous avons la possibilité de modifier le code sans forcement toucher au code par défaut.

C’est ce qu’on appele l’override. Il est fortement conseillé de faire de cette manière, car à chaque mise à jour les modifications ne seront pas effacées.

2- Comment s’y prendre ?

Pour faire un override d’une classe ou d’un controller, rien de plus simple:

ajoutez votre fichier modifié dans le dossier /override/classes/MaClass.php

Dans ce tuto nous allons devoir overrider le controller AdminProductsController.php

donc je copie le AdminProductsController.php (modifié) dans /override/controller/admin/AdminProductsController.php

3 – Ajouter un champs.

Dans ce tuto, nous allons ajouter le champs des codes barres (ean13)

Pour ce faire, rendez vous vers la ligne 215, et ajoutez le code suivant:

$this->fields_list['ean13'] = array(
            'title' => $this->l('ean13'),
             'align' => 'left',
        );

Voici le code complet du controller overridé:

<?php
/*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2016 PrestaShop SA
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

/**
 * @property Product $object
 */
class AdminProductsControllerCore extends AdminController
{
    /** @var int Max image size for upload
     * As of 1.5 it is recommended to not set a limit to max image size
     */
    protected $max_file_size = null;
    protected $max_image_size = null;

    protected $_category;
    /**
     * @var string name of the tab to display
     */
    protected $tab_display;
    protected $tab_display_module;

    /**
     * The order in the array decides the order in the list of tab. If an element's value is a number, it will be preloaded.
     * The tabs are preloaded from the smallest to the highest number.
     * @var array Product tabs.
     */
    protected $available_tabs = array();

    protected $default_tab = 'Informations';

    protected $available_tabs_lang = array();

    protected $position_identifier = 'id_product';

    protected $submitted_tabs;

    protected $id_current_category;

    public function __construct()
    {
        $this->bootstrap = true;
        $this->table = 'product';
        $this->className = 'Product';
        $this->lang = true;
        $this->explicitSelect = true;
        $this->bulk_actions = array(
            'delete' => array(
                'text' => $this->l('Delete selected'),
                'icon' => 'icon-trash',
                'confirm' => $this->l('Delete selected items?')
            )
        );
        if (!Tools::getValue('id_product')) {
            $this->multishop_context_group = false;
        }

        parent::__construct();

        $this->imageType = 'jpg';
        $this->_defaultOrderBy = 'position';
        $this->max_file_size = (int)(Configuration::get('PS_LIMIT_UPLOAD_FILE_VALUE') * 1000000);
        $this->max_image_size = (int)Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE');
        $this->allow_export = true;

        // @since 1.5 : translations for tabs
        $this->available_tabs_lang = array(
            'Informations' => $this->l('Information'),
            'Pack' => $this->l('Pack'),
            'VirtualProduct' => $this->l('Virtual Product'),
            'Prices' => $this->l('Prices'),
            'Seo' => $this->l('SEO'),
            'Images' => $this->l('Images'),
            'Associations' => $this->l('Associations'),
            'Shipping' => $this->l('Shipping'),
            'Combinations' => $this->l('Combinations'),
            'Features' => $this->l('Features'),
            'Customization' => $this->l('Customization'),
            'Attachments' => $this->l('Attachments'),
            'Quantities' => $this->l('Quantities'),
            'Suppliers' => $this->l('Suppliers'),
            'Warehouses' => $this->l('Warehouses'),
        );

        $this->available_tabs = array('Quantities' => 6, 'Warehouses' => 14);
        if ($this->context->shop->getContext() != Shop::CONTEXT_GROUP) {
            $this->available_tabs = array_merge($this->available_tabs, array(
                'Informations' => 0,
                'Pack' => 7,
                'VirtualProduct' => 8,
                'Prices' => 1,
                'Seo' => 2,
                'Associations' => 3,
                'Images' => 9,
                'Shipping' => 4,
                'Combinations' => 5,
                'Features' => 10,
                'Customization' => 11,
                'Attachments' => 12,
                'Suppliers' => 13,
            ));
        }

        // Sort the tabs that need to be preloaded by their priority number
        asort($this->available_tabs, SORT_NUMERIC);

        /* Adding tab if modules are hooked */
        $modules_list = Hook::getHookModuleExecList('displayAdminProductsExtra');
        if (is_array($modules_list) && count($modules_list) > 0) {
            foreach ($modules_list as $m) {
                $this->available_tabs['Module'.ucfirst($m['module'])] = 23;
                $this->available_tabs_lang['Module'.ucfirst($m['module'])] = Module::getModuleName($m['module']);
            }
        }

        if (Tools::getValue('reset_filter_category')) {
            $this->context->cookie->id_category_products_filter = false;
        }
        if (Shop::isFeatureActive() && $this->context->cookie->id_category_products_filter) {
            $category = new Category((int)$this->context->cookie->id_category_products_filter);
            if (!$category->inShop()) {
                $this->context->cookie->id_category_products_filter = false;
                Tools::redirectAdmin($this->context->link->getAdminLink('AdminProducts'));
            }
        }
        /* Join categories table */
        if ($id_category = (int)Tools::getValue('productFilter_cl!name')) {
            $this->_category = new Category((int)$id_category);
            $_POST['productFilter_cl!name'] = $this->_category->name[$this->context->language->id];
        } else {
            if ($id_category = (int)Tools::getValue('id_category')) {
                $this->id_current_category = $id_category;
                $this->context->cookie->id_category_products_filter = $id_category;
            } elseif ($id_category = $this->context->cookie->id_category_products_filter) {
                $this->id_current_category = $id_category;
            }
            if ($this->id_current_category) {
                $this->_category = new Category((int)$this->id_current_category);
            } else {
                $this->_category = new Category();
            }
        }

        $join_category = false;
        if (Validate::isLoadedObject($this->_category) && empty($this->_filter)) {
            $join_category = true;
        }

        $this->_join .= '
		LEFT JOIN `'._DB_PREFIX_.'stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0
		'.StockAvailable::addSqlShopRestriction(null, null, 'sav').') ';

        $alias = 'sa';
        $alias_image = 'image_shop';

        $id_shop = Shop::isFeatureActive() && Shop::getContext() == Shop::CONTEXT_SHOP? (int)$this->context->shop->id : 'a.id_shop_default';
        $this->_join .= ' JOIN `'._DB_PREFIX_.'product_shop` sa ON (a.`id_product` = sa.`id_product` AND sa.id_shop = '.$id_shop.')
				LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON ('.$alias.'.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = '.$id_shop.')
				LEFT JOIN `'._DB_PREFIX_.'shop` shop ON (shop.id_shop = '.$id_shop.')
				LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (image_shop.`id_product` = a.`id_product` AND image_shop.`cover` = 1 AND image_shop.id_shop = '.$id_shop.')
				LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_image` = image_shop.`id_image`)
				LEFT JOIN `'._DB_PREFIX_.'product_download` pd ON (pd.`id_product` = a.`id_product` AND pd.`active` = 1)';

        $this->_select .= 'shop.`name` AS `shopname`, a.`id_shop_default`, ';
        $this->_select .= $alias_image.'.`id_image` AS `id_image`, cl.`name` AS `name_category`, '.$alias.'.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, '.$alias.'.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`';

        if ($join_category) {
            $this->_join .= ' INNER JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_product` = a.`id_product` AND cp.`id_category` = '.(int)$this->_category->id.') ';
            $this->_select .= ' , cp.`position`, ';
        }
        $this->_use_found_rows = false;
        $this->_group = '';

        $this->fields_list = array();
        $this->fields_list['id_product'] = array(
            'title' => $this->l('ID'),
            'align' => 'center',
            'class' => 'fixed-width-xs',
            'type' => 'int'
        );
        $this->fields_list['image'] = array(
            'title' => $this->l('Image'),
            'align' => 'center',
            'image' => 'p',
            'orderby' => false,
            'filter' => false,
            'search' => false
        );
        $this->fields_list['name'] = array(
            'title' => $this->l('Name'),
            'filter_key' => 'b!name'
        );
        $this->fields_list['ean13'] = array(
            'title' => $this->l('ean13'),
             'align' => 'left',
        );
        $this->fields_list['reference'] = array(
            'title' => $this->l('Reference'),
            'align' => 'left',
        );

        if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_SHOP) {
            $this->fields_list['shopname'] = array(
                'title' => $this->l('Default shop'),
                'filter_key' => 'shop!name',
            );
        } else {
            $this->fields_list['name_category'] = array(
                'title' => $this->l('Category'),
                'filter_key' => 'cl!name',
            );
        }
        $this->fields_list['price'] = array(
            'title' => $this->l('Base price'),
            'type' => 'price',
            'align' => 'text-right',
            'filter_key' => 'a!price'
        );
        $this->fields_list['price_final'] = array(
            'title' => $this->l('Final price'),
            'type' => 'price',
            'align' => 'text-right',
            'havingFilter' => true,
            'orderby' => false,
            'search' => false
        );

        if (Configuration::get('PS_STOCK_MANAGEMENT')) {
            $this->fields_list['sav_quantity'] = array(
                'title' => $this->l('Quantity'),
                'type' => 'int',
                'align' => 'text-right',
                'filter_key' => 'sav!quantity',
                'orderby' => true,
                'badge_danger' => true,
                //'hint' => $this->l('This is the quantity available in the current shop/group.'),
            );
        }

        $this->fields_list['active'] = array(
            'title' => $this->l('Status'),
            'active' => 'status',
            'filter_key' => $alias.'!active',
            'align' => 'text-center',
            'type' => 'bool',
            'class' => 'fixed-width-sm',
            'orderby' => false
        );

        if ($join_category && (int)$this->id_current_category) {
            $this->fields_list['position'] = array(
                'title' => $this->l('Position'),
                'filter_key' => 'cp!position',
                'align' => 'center',
                'position' => 'position'
            );
        }
    }

}

EDIT: Il n’est pas nécéssaire de faire un override du fichier complet, juste le code en question, le AdminProductsController peut être uniquement comme ceci:

<?php
class AdminProductsController extends AdminProductsControllerCore
{
    public function __construct()
    {
        parent::__construct();

        $this->_select .= ', ean13'; // étendre le select si pas déja fait de base

        // Le ou les champs à ajouter (la clef doit correspondre au nom du select)
        $newfields = array(
            'ean13' => array(
                'title' => 'booking',
                'havingFilter' => true
            )
        );

        $this->fields_list = array_merge($this->fields_list, $newfields); // ajouter une colonne au tableau

    }
}

Merci à Pierrox pour le morceau de code.

sauvegardez tous ça et rendez vous dans le listing produit du catalogue en backoffice.

Le code ean13 est bien présent !

Si ça ne marche pas, supprimez le fichier cache/class_index.php

vous pouvez effectuer une recherche avec le champs ean13 puis lorsque vous exporterez vos produits, le champs sera bien présent dans le CSV.

Enjoy 😉

Guillaume

Commentaires

Le 12 février 2015 à 13 01 21 02212, Guillaume a dit :


Un tutoriel vraiment bien fait, qui m'a déjà servi à trois reprises.
Merci beaucoup.


Votre réponse sera révisée par les administrateurs si besoin.

Le 28 avril 2015 à 13 01 31 04314, Lukia a dit :


Pas mal comme première approche, cependant ça devient un peu plus compliqué si la colonne que l'on veut rajouter ne se trouve déjà pas dans la table produit.

J'ai donc adapté ton tuto pour sélectionner le fabricant (dans mon cas), mais ça devrait fonctionner à partir de n'importe quelle id qui se trouve dans la table produit pour remonter vers les déclinaisons ou attributs ou autre.

// créer la jointure, par exemple pour afficher le fabricant.
// on sélectionne la table manufacturer (à qui on donne notre propre alias, ici "mp") d'où on compare la colonne commune avec la colonne connue de la table produit ayant l'alias "a" par défaut dans le code de presta (ici l'id du fabricant).

$this->_join .= ' INNER JOIN `'._DB_PREFIX_.'manufacturer` mp ON (mp.`id_manufacturer` = a.`id_manufacturer`) ';

// puis on fait une sélection de la colonne qui nous intéresse (ici "name", le nom du fabricant) dans la table manufacturer à laquelle on donne un alias de nom pour éviter un conflit éventuelle avec d'autre nom de table (j'ai choisis "manufacturername").

$this->_select .= ' , mp.`name` AS `manufacturername`, ';

//puis on affiche ce que l'on vient de créer comme dans le tuto précédent

$this->fields_list['manufacturername'] = array(
'title' => $this->l('manufacturer'),
'align' => 'left',
);

Et voilà !


Votre réponse sera révisée par les administrateurs si besoin.

Le 1 mars 2016 à 17 05 14 03143, Fab a dit :


J'étais perdu dans la contemplation du /* Join categories table */ pour essayer de lier d'autres tables, quand j'ai scrollé vers le bas et les commentaires, et là, paf =D

Un grand merci =)


Votre réponse sera révisée par les administrateurs si besoin.

Le 21 juillet 2016 à 9 09 19 07197, Emma a dit :


Mille merci pour cette solution !!


Votre réponse sera révisée par les administrateurs si besoin.

Le 28 juillet 2016 à 9 09 44 07447, Emma a dit :


Du coup j'ai essayé d'afficher la description du produit en faisant la liaison avec product_lang mais j'ai une erreur sql que je ne comprends pas, j'ai fais :

$this->_join .= 'INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = a.`id_product`)';
$this->_select .= ' , pl.`description_short` AS `descriptionshort`, ';

et :
$this->fields_list['descriptionshort'] = array(
'title' => $this->l('Description'),
'align' => 'left',
);

Une idée pourquoi ça ne marche pas ?


Votre réponse sera révisée par les administrateurs si besoin.

Le 2 août 2016 à 14 02 04 08048, Guillaume a dit :


essayez avec $this->fields_list[‘description_short’] (avec le _) peut être que ça vient de la ;)
Cdlt


Votre réponse sera révisée par les administrateurs si besoin.

Le 28 avril 2015 à 15 03 02 04024, Guillaume a dit :


Merci pour le code ! ça pourra surement aider beaucoup de personnes !


Votre réponse sera révisée par les administrateurs si besoin.

Le 16 juillet 2015 à 9 09 29 07297, remi a dit :


Merci Beaucoup !
En adaptant ça a bien marché pour 'Weight" . Il me reste à voir comment supprimer tout ces chiffres après la virgule...


Votre réponse sera révisée par les administrateurs si besoin.

Le 26 janvier 2016 à 20 08 02 01021, Laurent a dit :


Bonjour,
serait-il possible d'avoir la solution pour insérer le champs ean mais pour la version presta 1.5.5 ?
Car étant un novice, je n'arrive pas à savoir à quelle ligne où mettre ce code et surtout est-ce le même code à entrer pour ma version de presta.
Je vous remercie


Votre réponse sera révisée par les administrateurs si besoin.

Le 27 janvier 2016 à 11 11 19 01191, Guillaume a dit :


Bonjour,
Normalement c'est la même chose suivez le tuto et tenez nous informés.
Pensez à sauvegarder avant, on ne sais jamais.


Votre réponse sera révisée par les administrateurs si besoin.

Le 9 avril 2016 à 13 01 33 04334, Fabrice a dit :


Bonjour, je souhaiterais afficher les associations de catégories de mes produits, comment puis-je faire ?
Je vous remercie par avance.


Votre réponse sera révisée par les administrateurs si besoin.

Le 12 avril 2016 à 12 12 11 04114, Guillaume a dit :


Bonjour,
La il va falloir faire un gros override de Prestashop, il est assez simple d'ajouter un champs car l'ObjectModel gère ça très bien, mais lier un association de catégories risque d'être un peu plus compliquée.
Connaissez vous la programmation PHP ?
Cdlt


Votre réponse sera révisée par les administrateurs si besoin.

Le 18 mai 2016 à 13 01 13 05135, JulienC a dit :


Lorsque l'on fait une recherche , il y a une erreur de requête. Il faut ajouter le filter_key:
/*override*/
$this->_join .= ' INNER JOIN `'._DB_PREFIX_.'manufacturer` mp ON (mp.`id_manufacturer` = a.`id_manufacturer`) ';
$this->_select .= ' , mp.`name` AS `manufacturername`, ';


$this->fields_list['manufacturername'] = array(
'title' => $this->l('Marque'),
'align' => 'left',
'filter_key' => 'mp!name'
);
/**/


Votre réponse sera révisée par les administrateurs si besoin.

Le 25 août 2016 à 13 01 33 08338, ChDUP a dit :


Je salue l'initiative mais j'ai du mal à comprendre comment ce tuto peut fonctionner.

Copier l'intégralité de la classe que l'on override me semble un tantinet bourrin.
Il suffit d'overrider le constructeur.

- SI on ne précise pas que la class créée doit être définie comme suit, ça ne peut pas fonctionner.
class AdminProductsController extends AdminProductsControllerCore

- Si on insère le code donné avec du code html , ça ne peut pas fonctionner.

- Si on laisse le constructeur appeler son parent (qui est donc celui de la classe overridée) , ça ne peut pas fonctionner
Il faut du coup appeler AdminController::__construct();

Bref, soit il y a un décalage entre les commentaires et l'article
soit il faut que je me mette à la patisserie.


Votre réponse sera révisée par les administrateurs si besoin.

Le 9 septembre 2016 à 16 04 48 09489, AURORE a dit :


bonjour
je suis une simple gérante d'un site e-commerce prestashop et j'ai besoin de rajouter une colonne " code ean" comme indiqué dans le tuto malheureusement je ne sais pas par ou commencer, je ne connais rien en code et j'ai vraiment besoin de cette colonne
merci d'avance pour votre réponse


Votre réponse sera révisée par les administrateurs si besoin.

Le 10 octobre 2016 à 12 12 15 101510, ZouZouPitchou a dit :


Pour ceux qui sont toujours interessé par ce concept. Il y a un moyen beaucoup plus simple que le système de l'override.

Il s'agit de developper un module qui va se charger de cet affichage. En effet PrestaShop dispose de Hook caché qu'il est possible d'utiliser.

Le module doit créé si il n'existe pas déjà le hook action%sListingFieldsModifier ou %s correspond au controller à utiliser, AdminProducts pour les produits ou AdminOrders pour les Commandes (Je n'ai pas tester avec les autres controllers).

Les hooks ListingFieldsModifier sont bien implémenter dans le code des Controllers mais ne sont pas présent dans la table Hook de PrestaShop ce qui empêche un module de s'y placer.

Après avoir créé le/les Hooks vous pouvez y placer votre module et modifié la requête directement dans le module. De ce fait rien ne vous empêche de mettre un système avec des colonnes qui pourront être masqué ou non de puis l'interface.


Votre réponse sera révisée par les administrateurs si besoin.

Le 21 février 2017 à 13 01 21 02212, Jimmy a dit :


Bonjour à tous, tout d'abord merci pour ce tuto !
Au risque d'avoir l'air bête, in m'est impossible de trouver le fichier dont vous parlez à l'emplacement dont vous parlez.
" /override/controller/admin/AdminProductsController.php"
Pourtant ma version n'est pas si éloignée (1.6.1.11). Je ne trouve que se fichier uniquement dans /controller/admin/AdminProductsController.php mais malgrès toutes les modifications que j'ai tenté, rien ne change. Mon tableau catalogue produit reste le même.
J'aurais voulu insérer la date de création du produit avec date_add.... Mais là franchement je ne sais plus où chercher!


Votre réponse sera révisée par les administrateurs si besoin.

Le 21 février 2017 à 13 01 22 02222, Guillaume a dit :


Bonjour,
Il faut créer ce fichier car par défaut il n'y en a pas.
Cdlt


Votre réponse sera révisée par les administrateurs si besoin.

Le 21 février 2017 à 14 02 20 02202, Jimmy a dit :


Merci pour votre réponse!
cependant dans votre tuto le code n'apparait pas... il y a seulement "ajoutez le code suivant"... et pas de code...


Votre réponse sera révisée par les administrateurs si besoin.

Le 21 février 2017 à 15 03 39 02392, Guillaume a dit :


Ah mince, je vais m'en occuper. Merci


Votre réponse sera révisée par les administrateurs si besoin.

Le 15 mars 2017 à 21 09 24 03243, christophe a dit :


Bonjour,

cette astuce m'intéresse grandement....

Avez-vous regardé cela pour l'adapter à la nouvelle version de Prestashop (1.6.1.11 = dernière version stable)

merci pour votre retour


Votre réponse sera révisée par les administrateurs si besoin.

Le 19 avril 2017 à 14 02 43 04434, DavidQsk a dit :


Bonjour,
Je souhaiterais ajouter une colonne transporteur dans le AdminOrders afin de préparer mes colis plus rapidement. (Colissimo, relais ect..)
Savez vous comment dois-je procéder ?

En vous remerciant par avance


Votre réponse sera révisée par les administrateurs si besoin.

Le 19 avril 2017 à 15 03 03 04034, Guillaume a dit :


Pour votre cas, il faut modifier un requête pour joindre le code du transporteur (id) à la commande.
Je regardes quand j'ai 5 minutes.
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 20 avril 2017 à 8 08 14 04144, DavidQsk a dit :


Merci, ce serait super !


Votre réponse sera révisée par les administrateurs si besoin.

Le 4 mai 2017 à 15 03 23 05235, DavidQsk a dit :


Bonjour,
Je viens aux nouvelles afin de savoir si vous avez la solution ?
Merci ;)


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 mai 2017 à 11 11 31 05315, Florence B a dit :


Bonjour,

J'ai suivi votre tuto qui a répondu exactement à ce que je voulais faire.
Cependant j'ai dû effectivement supprimer le fichier "cache/class_index.php" afin de faire apparaître la colonne EAN dans le BO produit.
Depuis je ne peux plus me connecter à mon BO et là j'avoue que je sèche.
J'ai gardé la copie de ce fichier que j'ai remis en place.
J'ai constaté q'un nouveau fichier class_index.php s'était créé. Je l'ai donc remplacer par celui sauvegarder mais je ne peux toujours pas me connecter à mon BO.
Pourriez-vous me donner un coup de main ?

Merci :)


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 mai 2017 à 11 11 39 05395, Guillaume a dit :


Bonjour,
Mettez votre prestashop en mode Debug et regardez si vous avez une erreur qui s'affiche.
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 mai 2017 à 12 12 49 05495, Florence B a dit :


OK, j'ai mis sur "true" la valeur de _PS_MODE_DEV_ dans defines.inc.php.
Je n'ai aucune erreur qui s'affiche.
J'ai l'impression que c'est une erreur de redirection.
Mon fichier d'admin n'a pourtant pas changer de nom.


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 mai 2017 à 13 01 02 05025, Guillaume a dit :


Videz le cache ou essayez avec un autre navigateur, des fois ça peut venir de la.
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 mai 2017 à 13 01 14 05145, Florence B a dit :


J'ai déjà vider le cache et également essayer sur Firefox.
La page d'accès au BO affiche une erreur 404.


Votre réponse sera révisée par les administrateurs si besoin.

Le 15 avril 2018 à 14 02 13 04134, anzary a dit :


Bonjour y a t-il une possibilité de faire ce module de recherche par ean dans la version 1.7 de prestashop et merci


Votre réponse sera révisée par les administrateurs si besoin.

Le 16 avril 2018 à 7 07 48 04484, Guillaume a dit :


Oui c'est possible, il faut simplement faire un module qui génère automatiquement l'override.
Cordialement


Votre réponse sera révisée par les administrateurs si besoin.

Le 8 septembre 2019 à 15 03 14 09149, Pierrox a dit :


Hello,

Il y a bien plus simple!

étendre plutot que de surcharger:

dans override/controllers/AdminProductsController.php


<?php

class AdminProductsController extends AdminProductsControllerCore

{

    public function __construct()

    {

        parent::__construct();

        $this->_select .= ', ean13'; // étendre le select si pas déja fait de base

        // Le ou les champs à ajouter (la clef doit correspondre au nom du select)

        $newfields = array(

            'ean13' => array(

                'title' => 'booking',

                'havingFilter' => true

            )

        );

        $this->fields_list = array_merge($this->fields_list, $newfields); // ajouter une colonne au tableau

    }

}


Voilà :)

Votre réponse sera révisée par les administrateurs si besoin.

Le 8 septembre 2019 à 18 06 02 09029, Guillaume a dit :


Effectivement, ce tuto est assez vieux, il faut que je prenne le temps de le mettre à jour. Je vais m'inspirer de votre code. Je vous remercie :)


Votre réponse sera révisée par les administrateurs si besoin.

Le 24 février 2022 à 6 06 22 02222, Mathieu Mallet a dit :


Merci pour votre tuto !
Auriez-vous une solution similaire pour la page détails de commande ?
Je cherche à faire apparaître la colonne référence et la trier par ordre croissant (ceci afin de pouvoir traiter mes commandes plus rapidement)
Je suis en prestashop 1.7.6
Merci beaucoup !


Votre réponse sera révisée par les administrateurs si besoin.

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.