Étant donné une vue, nommée 'Children' (avec deux champs: child_node_id et a birth_order_value), quelle est la meilleure façon, par programme, d'itérer à travers l'ensemble de résultats des vues étant donné un display_id de 'default' et un argument qui contient l'ID du nœud parent?
Auparavant, j'ai utilisé la vue dans un bloc en utilisant un code similaire au suivant:
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2)) {
$node = node_load(arg(1));
$args = array($node->nid);
$view = views_get_view('Children');
print $view->preview('default', $args);
}
Cependant, dans un autre bloc, je veux effectuer une logique basée sur les valeurs trouvées dans la vue. Vous pourriez être en mesure de deviner que la logique métier basée sur ma dernière exigence: je veux que le bloc de code prenant en charge la vue («Enfants») soit appelé plusieurs fois. En parcourant les résultats de l'ensemble de données de vue, je souhaite parcourir de manière récursive les nœuds enfants interrogeant leurs enfants.
foreach
place de for (.. sizeof ()), il fonctionne beaucoup mieux (car c'est C au lieu de PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, il pourrait être préférable d'utiliserif ($node = menu_get_object())
.Réponses:
En jouant un peu avec Views, il me semble avoir élaboré une approche. Cependant, je voudrais laisser ma question ouverte à d'autres réponses et à de meilleures solutions.
La clé pour exécuter la vue plusieurs fois était pour moi de désactiver ($ view) lorsque j'en avais fini avec le jeu de résultats.
la source
J'ai obtenu un bon kilométrage de la fonction suivante. La valeur de retour est un tableau de tous les enregistrements de vue. L'appel de dsm ($ return_value) vous donnera une bonne idée de la structure de votre vue particulière.
la source
Voici une fonction d'aide déjà intégrée à l'API Drupal. (J'ai passé un certain temps à fouiller dans les Drupal Docs, et je l'ai finalement trouvé. Il semble que beaucoup d'autres ont également produit des solutions qui n'utilisent pas cet assistant, et aussi que cet assistant fasse une étape intéressante que les autres solutions ne font pas .. . pour appeler pre_render sur l'objet $ view avant de l'exécuter).
Je ne peux pas garantir que cela fonctionne bien ou non, mais au moins c'est un endroit spécifique pour signaler les problèmes avec ces approches.
Pour D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
Et pour D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
la source