给定一个名为“ Children”的视图(具有两个字段:child_node_id和birth_order_value),以编程方式遍历给定display_id为“ default”和包含父节点id的参数的视图结果集的最佳方法是什么?
以前,我在代码块中使用过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);
}
但是,在另一个块中,我想基于视图中找到的值执行一些逻辑。您可能可以根据我的最终要求来猜测业务逻辑:我希望支持该视图的代码块(“子级”)被多次调用。在遍历视图数据集结果时,我想递归遍历遍历子节点的子节点,以查询其子节点。
您的方法看起来还可以。如果您将其放在答案中,人们可以对其进行投票并批准。您可以尝试的一件事是,而不是每次都取消设置视图。在执行之前执行$ view-> clone_view()。视图加载非常繁重,这可能有助于提高内存和性能。
—
杰里米·法兰西
如果我不在这里,请原谅,但这是您可以使用关系并在父表中的字段上分组来完成的事情。我不确定您是否需要使用代码。从父模板覆盖中调用子视图和逻辑也可能更简单。
—
杰森·史密斯
您应该考虑
—
berkes 2011年
foreach
代替for(.. sizeof()),它的性能要好得多(因为它是C而不是PHP)。
需要注意的一件事是
—
克里斯·普利卡斯
if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
,与其做起来,不如使用它if ($node = menu_get_object())
。
我已经从问题中修剪出答案,并将其发布为答案。这样,对于网站用户来说,这个问题就有答案了。
—
杰里米法国