Submitted by pitav on
Bonjour a tous
Je voudrais ordonner une liste de views en fonction de l'ordre des paramètres contextuels que je lui passe.
En effet, si on passe, par exemple, les id [112, 5, 32, 180] en paramètres contextuels l'ordre de liste sera différent de celui des paramètres. Par défaut, l'ordre est [2, 32, 112, 180]... c'est ballot non ?
Y a t'il un moyen que l'ordre de liste soit conforme à l'ordre des paramètres ?
Merci de votre aide.
Je connais bien une solution,
Permalien Soumis par gossuin le 8 Décembre, 2017 - 13:25
Je connais bien une solution, mais elle consiste à court-circuiter les templates de views...
J'utilises souvent car ça m'emmerde d'utiliser 3 templates, et ça me permet d'exploiter bien tout comme il faut, avec un minimum de code... Par contre faut oublier les rafraichissements ajax si tu n'utilises pas les div englobant print $rows.
Dans le template général (views-views--nom_machine.tpl.php) :
<?php
$vue = views_get_current_view();
$resultats = $vue->result; // Résultat brut raw
$selection = $vue->args;
/* liste des arguments :
- soit tu as envoyé les arguments en tableau
views_get_view('mavue','block',array(112,5,32,180));
, alors ça ressemblera à ça :
$selection= array (
[0]=>array(
[0]=>112,
[1]=>5,
[2]=>32,
[3]=>180,
)
)
- soit tu as envoyé les arguments comme ça
views_get_view('mavue','block',112,5,32,180);
, alors ça ressemblera à ça :
$selection= array (
[0]=>112,
[1]=>5,
[2]=>32,
[3]=>180,
)
Je dis ça de tête, alors je me trompe peut etre, à vérifier par toi même...
Supposons que tu as envoyé : views_get_view('mavue','block',array(112,5,32,180));
**/
$ordre = array(); // $ordre sera le nouveau tableau d'exploitation.
foreach($resultats as $clef => $contenu){
$ordre[0][$selection[$clef]] = $contenu;
}
unset($resultats); // j'aime faire le ménage...
foreach($ordre as $contenu){
/* $contenu est un raw de chaque résultat, faut se démerder pour faire son template avec ça...
* D'un autre côté, tu n'auras plus à utiliser les 2 autres templates...
* Tu peux toujours utiliser les autres éléments de ton template ($page, $exposed, ect...)
*/
}