In einer Ansicht mit dem Namen "Children" (mit zwei Feldern: "child_node_id" und "birth_order_value") können Sie die Ansichtsergebnisse am besten programmgesteuert durchlaufen, wenn Sie die display_id "default" und ein Argument mit der ID des übergeordneten Knotens angeben.
Bisher habe ich die Ansicht in einem Block mit folgendem Code verwendet:
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);
}
In einem anderen Block möchte ich jedoch eine Logik basierend auf den in der Ansicht gefundenen Werten ausführen. Vielleicht können Sie diese Geschäftslogik anhand meiner letzten Anforderung erraten: Ich möchte, dass der Codeblock, der die Ansicht ('Children') unterstützt, mehrmals aufgerufen wird. Während ich die Ergebnisse des View-Datasets durchlaufe, möchte ich die Kinderknoten, die nach ihren Kindern fragen, rekursiv durchlaufen.
foreach
anstelle von for (.. sizeof ()) eine viel bessere Leistung erzielt wird (da es sich um C anstelle von PHP handelt).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, könnte es besser sein, zu verwendenif ($node = menu_get_object())
.Antworten:
Ich habe ein bisschen mit Views herumgespielt und einen Ansatz gefunden. Ich möchte meine Frage jedoch offen lassen für andere Antworten und bessere Lösungen.
Der Schlüssel zum mehrmaligen Ausführen der Ansicht war für mich, die Einstellung ($ view) aufzuheben, wenn ich mit der Ergebnismenge fertig war.
quelle
Ich habe mit der folgenden Funktion eine gute Laufleistung erzielt. Der Rückgabewert ist ein Array aller Ansichtsdatensätze. Durch Aufrufen von dsm ($ return_value) erhalten Sie eine gute Vorstellung von der Struktur Ihrer bestimmten Ansicht.
quelle
Hier ist eine Hilfsfunktion, die bereits in die Drupal-API integriert ist. (Ich habe eine Weile in den Drupal-Dokumenten herumgespielt und sie schließlich gefunden. Es scheint, dass viele andere auch Lösungen entwickelt haben, die diesen Helfer nicht verwenden, und dass dieser Helfer einen interessanten Schritt ausführt, den andere Lösungen nicht ausführen.) (um pre_render für das $ view Objekt aufzurufen, bevor es ausgeführt wird).
Ich kann nicht dafür bürgen, ob es gut funktioniert oder nicht, aber es ist zumindest ein bestimmter Ort, an dem Probleme mit diesen Ansätzen angesprochen werden.
Für D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
Und für D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
quelle