Em uma visualização, denominada 'Filhos' (com dois campos: child_node_id e um birth_order_value), qual é a melhor maneira, programaticamente, de iterar pelo conjunto de resultados das visualizações, dado um display_id de 'default' e um argumento que contém o ID do nó pai?
Anteriormente, eu usei a View em um bloco usando um código semelhante ao seguinte:
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);
}
No entanto, em outro bloco, quero executar alguma lógica com base nos valores encontrados na exibição. Você pode adivinhar que a lógica comercial com base no meu requisito final: desejo que o bloco de código que suporta a exibição ('Filhos') seja chamado várias vezes. À medida que percorre os resultados do conjunto de dados da exibição, desejo percorrer recursivamente os nós filhos que estão procurando por seus filhos.
foreach
vez de para (.. sizeof ()), ele tem um desempenho muito melhor (porque é C em vez de PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, pode ser melhor usarif ($node = menu_get_object())
.Respostas:
Brincando um pouco com o Views, pareço ter elaborado uma abordagem. No entanto, gostaria de deixar minha pergunta em aberto para outras respostas e soluções melhores.
A chave para executar a visualização várias vezes era para eu desmarcar ($ view) quando eu terminava o conjunto de resultados.
fonte
Eu obtive uma boa milhagem da função a seguir. O valor de retorno é uma matriz de todos os registros de exibição. Chamar dsm ($ return_value) fornecerá uma boa idéia da estrutura de sua visualização específica.
fonte
Aqui está uma função auxiliar já incorporada à API Drupal. (Passei um tempo folheando o Drupal Docs e finalmente o encontrei. Parece que muitos outros também produziram soluções que não usam esse ajudante e também que esse ajudante faz um passo interessante que outras soluções não. para chamar pre_render no objeto $ view antes de executar).
Não posso garantir se funciona bem ou não, mas pelo menos é um local específico para discutir problemas com essas abordagens.
Para D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
E para D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
fonte