souriskiclic Posted January 11, 2013 Share Posted January 11, 2013 (edited) 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 January 21, 2013 by souriskiclic (see edit history) Link to comment Share on other sites More sharing options...
souriskiclic Posted January 13, 2013 Author Share Posted January 13, 2013 Peut être devrai je modifier le titre comme ça : "FRONTOFFICE - Classer les adresses de livraison par ordre alphabétique". Up et merci d'avance aux experts. Link to comment Share on other sites More sharing options...
souriskiclic Posted January 15, 2013 Author Share Posted January 15, 2013 Up ! Link to comment Share on other sites More sharing options...
PhiLho Posted January 15, 2013 Share Posted January 15, 2013 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 1 Link to comment Share on other sites More sharing options...
souriskiclic Posted January 17, 2013 Author Share Posted January 17, 2013 Merci PhiLho, j'avais bien trouvé cette page mais sans comprendre clairement de quoi il en retourne. Faut il que je crée, que j'ajoute cette fonction ? Où ? Dans le répertoire ./Controllers/AddressesController.php ? Link to comment Share on other sites More sharing options...
PhiLho Posted January 17, 2013 Share Posted January 17, 2013 config\smarty.config.inc.php me semble être un bon endroit... Link to comment Share on other sites More sharing options...
souriskiclic Posted January 21, 2013 Author Share Posted January 21, 2013 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 More sharing options...
rachel01 Posted November 7, 2016 Share Posted November 7, 2016 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 Link to comment Share on other sites More sharing options...
Kerm Posted February 14, 2017 Share Posted February 14, 2017 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now