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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *