Dada una vista, llamada 'Hijos' (con dos campos: child_node_id y birth_order_value), ¿cuál es la mejor manera, mediante programación, de recorrer en iteración el conjunto de resultados de vistas dado un display_id de 'default' y un argumento que contiene la identificación del nodo padre?
Anteriormente, he usado la Vista en un bloque usando un código similar al siguiente:
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);
}
Sin embargo, en otro bloque quiero realizar alguna lógica basada en los valores encontrados en la vista. Es posible que adivine esa lógica empresarial basada en mi requisito final: quiero que el bloque de código que admite la vista ('Hijos') se llame varias veces. A medida que itero a través de los resultados del conjunto de datos de la vista, quiero iterar recursivamente a través de los nodos hijos que consultan por sus hijos.
foreach
lugar de for (.. sizeof ()), funciona mucho mejor (porque es C en lugar de PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, podría ser mejor usarif ($node = menu_get_object())
.Respuestas:
Jugando un poco con Views, parece que he elaborado un enfoque. Sin embargo, me gustaría dejar mi pregunta abierta a otras respuestas y mejores soluciones.
La clave para ejecutar la vista varias veces fue desarmar ($ view) cuando terminé con el conjunto de resultados.
fuente
Obtuve un buen rendimiento de la siguiente función. El valor de retorno es una matriz de todos los registros de vista. Llamar a dsm ($ return_value) le dará una buena idea de la estructura de su vista particular.
fuente
Aquí hay una función auxiliar ya integrada en la API de Drupal. (Pasé un tiempo revoloteando en Drupal Docs, y finalmente lo encontré. Parece que muchos otros también han producido soluciones que no usan este ayudante, y también que este ayudante da un paso interesante que otras soluciones no ... . para llamar a pre_render en el objeto $ view antes de ejecutar).
No puedo garantizar si funciona bien o no, pero al menos es un lugar específico para señalar problemas con estos enfoques.
Para D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
Y para D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
fuente