Biorąc pod uwagę widok o nazwie „Dzieci” (z dwoma polami: child_node_id i birth_order_value), jaki jest najlepszy sposób, programowo, na iterację przez zestaw wyników widoków, biorąc pod uwagę display_id „default” i argument zawierający identyfikator węzła nadrzędnego?
Wcześniej korzystałem z widoku w bloku przy użyciu kodu podobnego do następującego:
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);
}
Jednak w innym bloku chcę wykonać logikę na podstawie wartości znalezionych w widoku. Być może będziesz w stanie odgadnąć tę logikę biznesową w oparciu o moje ostatnie wymaganie: chcę, aby blok kodu obsługujący widok („Dzieci”) był wywoływany wiele razy. Podczas iteracji po wynikach zestawu danych widoku chcę rekurencyjnie iterować przez węzły potomne, które szukają swoich dzieci.
foreach
zamiast dla (.. sizeof ()), działa on znacznie lepiej (ponieważ jest to C zamiast PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
lepiej użyćif ($node = menu_get_object())
.Odpowiedzi:
Wydaje mi się, że trochę się bawiłem z Widokami. Chciałbym jednak pozostawić moje pytanie otwarte na inne odpowiedzi i lepsze rozwiązania.
Kluczem do wielokrotnego wykonywania widoku było dla mnie rozbrojenie ($ view), kiedy skończyłem z zestawem wyników.
źródło
Mam dobry przebieg dzięki poniższej funkcji. Wartość zwracana to tablica wszystkich rekordów widoku. Wywołanie dsm ($ return_value) da ci dobre wyobrażenie o strukturze twojego konkretnego widoku.
źródło
Oto funkcja pomocnicza już wbudowana w API Drupala. (Spędziłem trochę czasu grzebiąc w Drupal Docs i ostatecznie go znalazłem. Wygląda na to, że wielu innych opracowało również rozwiązania, które nie używają tego pomocnika, a także, że ten pomocnik robi jeden interesujący krok, którego inne rozwiązania nie… wywołać pre_render na obiekcie $ view przed uruchomieniem).
Nie mogę poręczyć za to, czy działa dobrze, czy nie, ale przynajmniej jest to szczególne miejsce do zgłaszania problemów z tymi podejściami.
Dla D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
A dla D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
źródło