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}.




Laisser un commentaire