Ajouter un champ supplémentaire à une catégorie Prestashop 1.6
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}.
Ajouter un champ supplémentaire à une catégorie Prestashop 1.6 dans Prestashop, Technologie du web | novembre 9, 2016 | Commentaires (1)
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