Ordonner une liste de views en fonction de l'ordre des paramètres contextuels

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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.

Forum : 
Version de Drupal : 
Tags : 

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...)
  */
}