Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Ajouter un champ texte supplémentaire dans vos catégories sous Prestashop 1.4

La version 1.4 de Prestashop a la vie dure. Il m’arrive encore très souvent de devoir faire des adaptations sur cette version alors qu’il existe deux versions majeures supplémentaires sorties depuis. Aujourd’hui j’ai dû ajouter une seconde description à afficher en bas des pages de catégories avec comme particularité qu’elle devait accepter le code html (idéal pour le référencement). Voici comment faire.

Override de la classe Category


<?php
class Category extends CategoryCore
{
	public 		$description_bottom;

	public function __construct($id_category = null, $id_lang = null)
	{
		$this->fieldsValidateLang['description_bottom']='isString';		
		parent::__construct($id_category, $id_lang);
	}

	
	public function getTranslationsFieldsChild()
	{
		$fieldsArray = array('name', 'description','description_bottom', 'link_rewrite', 'meta_title', 'meta_keywords', 'meta_description');
		$fields = array();
		$languages = Language::getLanguages(false);
		$defaultLanguage = Configuration::get('PS_LANG_DEFAULT');
		foreach ($languages as $language)
		{
			$fields[$language['id_lang']]['id_lang'] = $language['id_lang'];
			$fields[$language['id_lang']][$this->identifier] = (int)($this->id);
			foreach ($fieldsArray as $field)
			{
				if (!Validate::isTableOrIdentifier($field))
					die(Tools::displayError());
				/* Check fields validity */
				if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']]))
					$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']], true);
				elseif (in_array($field, $this->fieldsRequiredLang))
			 $fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]);
				else
					$fields[$language['id_lang']][$field] = '';
			}
			$fields[$language['id_lang']]['description_bottom'] = (isset($this->description_bottom[$language['id_lang']])) ? pSQL($this->description_bottom[$language['id_lang']], true) : '';
		}		
		return $fields;
	}
}

Via la fonction “__construct” on ajoute le champ “description_bottom” qui est défini avec un validateur de type “isString” pour accepter le html.

La fonction “getTranslationsFieldsChild” quant à elle permet de valider les champs de type “lang” tout en conservant l’html pour le champ “description_bottom”.

Modification du formulaire

Pour modifier le formulaire vous devez éditer le fichier “/tabs/AdminCategories.php” qui se trouve dans le dossier de votre backoffice.
Ligne 234 environ vous allez trouver le code suivant


foreach ($this->_languages AS $language)
			echo '
					<div class="lang_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
						<textarea name="description_'.$language['id_lang'].'" rows="10" cols="100">'.htmlentities($this->getFieldValue($obj, 'description', (int)($language['id_lang'])), ENT_COMPAT, 'UTF-8').'</textarea>
					</div>';

Ajoutez-y à la suite ce code


echo '</div>
		<p class="clear"></p>
		<label>'.$this->l('Description basse:').' </label>
		<div class="margin-form translatable">';
		foreach ($this->_languages AS $language)
			echo '
			<div class="lang_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $this->_defaultFormLanguage ? 'block' : 'none').'; float: left;">
			<textarea name="description_bottom_'.$language['id_lang'].'" rows="10" cols="100" class="rte">'.$this->getFieldValue($obj, 'description_bottom', (int)($language['id_lang'])).'</textarea>
			</div>';
		// TinyMCE
		global $cookie;
		$iso = Language::getIsoById((int)($cookie->id_lang));
		$isoTinyMCE = (file_exists(_PS_ROOT_DIR_.'/js/tiny_mce/langs/'.$iso.'.js') ? $iso : 'en');
		$ad = dirname($_SERVER["PHP_SELF"]);
		echo '
		<script type="text/javascript">
		var iso = \''.$isoTinyMCE.'\' ;
		var pathCSS = \''._THEME_CSS_DIR_.'\' ;
		var ad = \''.$ad.'\' ;
		</script>
		<script type="text/javascript" src="'.__PS_BASE_URI__.'js/tiny_mce/tiny_mce.js"></script>
		<script type="text/javascript" src="'.__PS_BASE_URI__.'js/tinymce.inc.js"></script>';

Ce code va afficher le nouveau textarea accompagné de l’éditeur tinyMCE.

Ajout du champ dans la base de données

Afin que les données soient correctement enregistrées vous devez ajouter le champ correspondant à votre base de données dans la table “category_lang”.
Il faut créer un champ de type text avec comme nom “description_bottom”.

Modification du template

Enfin ouvrez le fichier “category.tpl” et ajouter le code suivant à l’emplacement où vous désirez voir apparaître la nouvelle description.


{if isset($category->description_bottom) &amp;amp;&amp;amp; $category->description_bottom!=""}
		<div class="categoryDescBottom" style="clear:both">{$category->description_bottom}</div>
	{/if}

Voilà désormais vous aurez une description supplémentaire acceptant le code html dans vos catégories.

Merci daYmo pour son post sur le forum de Prestashop qui m’a fait gagner un temps certain !

Poster un Commentaire

6 Commentaires sur "Ajouter un champ texte supplémentaire dans vos catégories sous Prestashop 1.4"

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
vavou
Invité
vavou

Merci pour cet article qui va me faire gagner du temps.
Je cherchais à faire exactement ça. Par contre, avant de mettre en application, ce qui me gêne c’est si demain je passe en version 1.5 ou 1.6.
Cela ne posera pas de problème
Je sais que l’override évite ces soucis mais comme on ajoute un champs dans la base, cela ne gêne pas ?
Merci d’avance pour la réponse.

Bonnes fêtes de fin d’année
Valérie

vavou
Invité
vavou

ok merci pour ta réponse maniT4c.
Je vais mettre en application ce code alors.
Merci encore pour la mise à disposition de ce code.

Bonne année aussi
Valérie

Antoine
Invité

Bonjour,
Merci pour cet article,
J’ai moi même rédigé un article concernant l’ajout d’un champ image supplémentaire dans la page catégorie.
Compatible 1.5 et 1.6 .

http://antoine-coutel.fr/ajouter-une-image-supplementaire-categorie-prestashop/

Si cela peux servir à quelqu’un je le mets à disposition.

Cordialement,
Antoine

Sébastien
Invité

Bonjour,

Merci pour votre tuto !

Reste t il valable pour PS 1.6 ?

Bien cordialement
Sébastien

wpDiscuz