Для данного представления с именем 'Children' (с двумя полями: child_node_id и birth_order_value), каким программным способом лучше всего выполнить итерацию по набору результатов представлений с помощью display_id 'default' и аргумента, который содержит идентификатор родительского узла?
Ранее я использовал View в блоке, используя код, подобный следующему:
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);
}
Однако в другом блоке я хочу выполнить некоторую логику на основе значений, найденных в представлении. Вы можете догадаться, что бизнес-логика основана на моем последнем требовании: я хочу, чтобы блок кода, поддерживающий представление ('Children'), вызывался несколько раз. Поскольку я перебираю результаты набора данных представления, я хочу рекурсивно перебирать дочерние узлы, запрашивающие их потомков.
foreach
вместо for (.. sizeof ()), он работает намного лучше (потому что это C вместо PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, лучше использоватьif ($node = menu_get_object())
.Ответы:
Немного поигравшись с Views, я, кажется, выработал подход. Однако я хотел бы оставить свой вопрос открытым для других ответов и лучших решений.
Ключ к выполнению представления несколько раз был для меня неустановленным ($ view), когда я закончил с набором результатов.
источник
Я получил хороший пробег от следующей функции. Возвращаемое значение представляет собой массив всех записей представления. Вызов dsm ($ return_value) даст вам хорошее представление о структуре вашего конкретного представления.
источник
Вот вспомогательная функция, уже встроенная в Drupal API. (Я провел некоторое время в Drupal Docs и в конце концов нашел его. Кажется, многие другие также создали решения, которые не используют этот помощник, а также что этот помощник делает один интересный шаг, которого нет в других решениях .. . вызвать pre_render для объекта $ view перед выполнением).
Я не могу поручиться за то, хорошо ли это работает или нет, но, по крайней мере, это определенное место, чтобы выявить проблемы с этими подходами.
Для D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
И для D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
источник