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

Mes modules Prestashop

Ajouter des fonctions à smarty sous Prestashop 1.6

J’ai eu besoin d’ajouter une fonction de tri d’un tableau directement dans Smarty, je vous livre ici les explications pour le faire.

C’est finalement très simple il suffit d’ajouter notre ou nos fonctions dans le fichier “/config/smarty.config.inc.php”.
La fonction en question est la suivante je l’ai trouvé sur le forum de smarty ici:


function array_sort_by_fields(&$data, $sortby){
	static $sort_funcs = array();

	if (empty($sort_funcs[$sortby]))
	{
		$code = "\$c=0;";
		foreach (split(',', $sortby) as $key)
		{
			$d = '1';
			if (substr($key, 0, 1) == '-')
			{
				$d = '-1';
				$key = substr($key, 1);
			}
			if (substr($key, 0, 1) == '#')
			{
				$key = substr($key, 1);
				$code .= "if ( \$a['$key'] > \$b['$key']) return $d * 1;\n";
				$code .= "if ( \$a['$key'] < \$b['$key']) return $d * -1;\n";
			}
			else
			{
				$code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return $d * \$c;\n";
			}
		}
		$code .= 'return $c;';
		$sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
	}
	else
	{
		$sort_func = $sort_funcs[$sortby];
	}
	uasort($data, $sort_func);
}
/* The '-' lets you sort in reverse order, and the # lets you sort numerically rather than as a string (you can have '-#age' as well to sort numerically in reverse order) */
function smarty_modifier_sortby($arrData,$sortfields) {
	array_sort_by_fields($arrData,$sortfields);
	return $arrData;
}


Il suffit maintenant d’enregistrer cette fonction dans les fonctions accessibles via smarty, pour cela rajoutez la ligne suivante toujours dans le même fichier:


smartyRegisterFunction($smarty, 'sortby', 'smarty_modifier_sortby');

Voila désormais vous pouvez appeler votre fonction dans vos templates comme ceci:


{foreach from=$quantity_discounts|@sortby:'#quantity' item='quantity_discount'}

Poster un Commentaire

5 Commentaires sur "Ajouter des fonctions à smarty sous Prestashop 1.6"

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

Bonjour et merci pour l’astuce,

Dans mes logs error j’avais un warning après ta modification.

PHP Warning: Missing argument 4 for smartyRegisterFunction(), called in …/config/smarty.config.inc.php on line 59 and defined in …/config/smarty.config.inc.php on line 161, referer: …admin/index.php?controller=AdminProducts&token=6745666213cdbadc8258557b592c261d

Du coup j ai enregistré la fonction comme ceci a la ligne 59:

smartyRegisterFunction($smarty, ‘function’, ‘sortby’, ‘smarty_modifier_sortby’);

Bruno
Invité
Bruno

Bonjour, merci pour cet article.
Un (gros) bémol : je viens de faire une MAJ de Prestashop et ma “surcharge” du fichier smarty.config.inc.php a été écrasé, et donc la boutique est en carafe. Y a-t-il moyen selon toi de surcharger plus “proprement” ?

wpDiscuz