Ajouter un champ supplémentaire à une catégorie Prestashop 1.6

Pour créer, rédiger et optimiser le SEO de vos pages web --> Contactez-nous


Voici un petit tuto pour ajouter un champ supplémentaire à une catégorie, dans Prestashop 1.6

Dans notre exemple, ce champ a pour nom « ages » et est un champ texte court non obligatoire.

1) Ajouter le champ à la base de données

Sélectionner la table ps_category_lang et ajouter un champ. La requête sql (générée par phpmyadmin) est la suivante :

ALTER TABLE `ps_category_lang` ADD `ages` VARCHAR(255) NULL DEFAULT '' AFTER `meta_description`;

2) Ajouter le champ à l’objet catégorie de Prestashop

Nous voulons ajouter ce champ sur la page de modification des catégories. Pour ce faire, nous devons tout d’abord ajouter le champ à l’objet catégorie.

Pour ce faire, créons une surcharge de l’objet catégorie : override/classes/Category.php. Nous ajoutons simplement une variable public ages et notre nouveau champ à la définition de la catégorie.

<?php

class Category extends CategoryCore {

    /** @var string ages */

    public $ages;

    public static $definition = array(

        'table' => 'category',

        'primary' => 'id_category',

        'multilang' => true,

        'multilang_shop' => true,

        'fields' => array(

            'nleft' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),

            'nright' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),

            'level_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),

            'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true),

            'id_parent' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),

            'id_shop_default' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),

            'is_root_category' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),

            'position' => array('type' => self::TYPE_INT),

            'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),

            'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),

            /* Lang fields */

            'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),

            'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128),

            'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),

            'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),

            'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),

            'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),

            'ages' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 255),

        ),

    );

}

3) Ajoutons notre champ au formulaire de modification d’une catégories

Pour ajouter notre champ « ages » nous devons simplement modifier le rendu du formulaire d’édition des catégories , en créant un override du controler AdminCategoriesController.

Nous avons simplement à faire un copier-coller de la fonction renderForm et à ajouter notre champ au tableau fields_form.

Il faut également modifier le retour de la fonction. Il faut remplacer  return parent::renderForm(); par return AdminController::renderForm(); afin de retourner le formulaire généré par notre fonction.

/override/controller/admin/AdminCategoriesController.php

<?php

class AdminCategoriesController extends AdminCategoriesControllerCore

{

    public function renderForm()

    {

       /*** conserver le code de la fonction **/

        $this->fields_form = array(

            'tinymce' => true,

            'legend' => array(

                'title' => $this->l('Category'),

                'icon' => 'icon-tags'

            ),

            'input' => array(

               /** conserver les champs présents dans la fonction **/

                array(

                    'type' => 'text',

                    'label' => $this->l('Ages'),

                    'name' => 'ages',

                    'maxchar' => 160,

                    'lang' => true,

                    'rows' => 5,

                    'cols' => 100,

                    'hint' => ''

                ),

        /** conserver la code de la fonction **/

        return AdminController::renderForm();

    }

}

4) Vider le cache

Pour que les surcharges soient prises en compte, il faut penser à supprimer le fichier

cache/class_index.php.

5) Utilisation du nouveau champ en front

Sur le template catégorie il est possible d’afficher la valeur de notre champ avec {$category->ages}.

Commentaires sur: Ajouter un champ supplémentaire à une catégorie Prestashop 1.6

Très mauvaise idée de faire un alter table sur une table de Prestashop.
Il faut passer par un module pour ajouter un champ et l'enregistrer dans une table créée par ce module.

Rédigé par : Prestarocket | 9 nov 2016 17:39:21

Poster un commentaire sur: Ajouter un champ supplémentaire à une catégorie Prestashop 1.6







« Christian Estrosi et la mairie de Nice sont-ils à la tête d'un empire web ? | Accueil | Bernard Tapie arrête le e-commerce ? »



Besoin de SEO, de développement, de rédaction de contenu web ? Besoin d'un blog, de Wordpress, de Prestashop ou autres nouvelles "choses web" ? Envie de travailler dans ces domaines ? --> Contactez-nous