Jump to content

[Résolu] Smarty @sortby dans fichier tpl


Recommended Posts

Bonjour,

 

Sur un point de vente, un opérateur prend les commandes en ligne afin d'accepter les paiement en espèces.

 

Cet opérateur ne crée pas un nouveau compte client à chaque nouvelle vente mais ajoute simplement une nouvelle adresse de livraison à son compte. Ça facilite la tache lorsque le client revient, celui ci sera dans la base de données.

 

Pratique MAIS au bout d'un moment le nombre d'adresses de livraison devient conséquent et une vache n'y retrouverait pas ses petits ! Pourquoi ? Car ces adresses de livraison sont classées par ID en affichant l'alias (le premier par défaut est "Mon adresse").

 

Question : Comment faire pour classer par "lastname" ou "alias" ?

 

J'ai partiellement solutionné mon problème mais une portion de code smarty ne fonctionne pas, c'est "sortby".

 

Ma demande concerne la requête foreach de la ligne ~176 du fichier \theme\prestashop\order-address.tpl

 

Voici la portion de code que je me suis arrangé pour faire mes tests :

<ul>
{foreach from=$addresses|@sortby:"lastname" key=k item=address}
<li>{$k} : Nom de famille ({$address['lastname']}) et pseudo ({$address['alias']}) </li>
{/foreach}
</ul>

 

Lorsque j'ajoute le |@sortby... (frontoffice, phase "adresse" du processus de commande) ma page ne se construit pas entièrement, juste le header, la page centrale comme le footer sont vides.

 

Voilà une demi journée que je cherche vainement, un peu d'aide serait fort sympathique.

Edited by souriskiclic (see edit history)
Link to comment
Share on other sites

Sauf erreur de ma part, sortby n'existe pas dans Smarty.

J'ai trouvé une référence à ce modificateur dans la question http://stackoverflow.com/questions/13544683/sort-array-with-smarty qui pointe sur un topic du forum Smarty où il semblerait que c'est un modificateur non-standard, créé par un utilisateur, décrit dans le topic : http://www.smarty.net/forums/viewtopic.php?p=23628#23628

  • Like 1
Link to comment
Share on other sites

Merci pour ton aide PhiLho, j'ai précisément ajouté le code ci-dessous au fichier ./config/smarty.config.inc.php :

 

#
# sorts an array of named arrays by the supplied fields
#   code by dholmes at jccc d0t net
#   taken from http://au.php.net/function.uasort
# modified by cablehead, messju and pscs at http://www.phpinsider.com/smarty-forum
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);
}
#
# Modifier: sortby - allows arrays of named arrays to be sorted by a given field
#
function smarty_modifier_sortby($arrData,$sortfields) {
  array_sort_by_fields($arrData,$sortfields);
  return $arrData;
}
$smarty->register_modifier( "sortby", "smarty_modifier_sortby" );

 

Cela enregistré, j'ai pu ajouter mon "sortby à mon "foreach" comme ci-dessous je voulais le faire au départ :

 

<ul>
{foreach from=$addresses|@sortby:"lastname" key=k item=address}
    <li>{$k} : Nom de famille ({$address['lastname']}) et pseudo ({$address['alias']}) </li>
{/foreach}
</ul>

 

RÉSOLU :)

Link to comment
Share on other sites

  • 3 years later...
  • 3 months later...

Bonjour,

 

J'ai testé la modification décrite.

Cependant, je me heurte à une erreur : "Fatal error: Uncaught --> Smarty: Call of unknown method 'register_modifier'"

Pouvez-vous m'aider ?

 

Merci d'avance

 

In new prestashop versions 1.6.x you should use this code for register new smarty modifier:

 

 

smartyRegisterFunction($smarty, 'modifier', 'sortby', 'smarty_modifier_sortby');
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...