我有一个随机缓存视图,我需要访问元素而不显示它以使订单进入会话以使某些next / prev按钮起作用。
当我使用views_get_view输出视图时,我得到的结果与实际显示完全不同。有什么想法吗?
$view = views_get_view('hotels_view');
$view->set_display('block');
$view->render();
print sizeof($view->result);
$counter = 0;
foreach ($view->result as $result) {
echo 'Result: ' . $result->nid . ' -- ' . url( 'node/' . $result->nid, array('alias' => FALSE)).'<br />';
$counter++;
//$_SESSION['hotels_listing'][$counter] = url( 'node/' . $result->nid, array('alias' => FALSE));
}
答案 0 :(得分:2)
我没有在本地测试过,所以只是猜测一下:
首先,我不确定这是否从D6变为D7,但是IIRC,显示ID总是附加一个数字,所以我希望需要使用'block_1'而不仅仅是'block'。
此外,查看render()
函数,它需要将显示ID作为参数。如果我正确读取代码,它将不会通过$view->set_display()
检查id设置,因此这可能会导致使用不同的(即默认)显示,这将导致使用不同的缓存结果。 / p>
所以你可以这样再试一次:
$view = views_get_view('hotels_view');
$view->render('block_1');
print sizeof($view->result);
$counter = 0;
foreach ($view->result as $result) {
echo 'Result: ' . $result->nid . ' -- ' . url( 'node/' . $result->nid, array('alias' => FALSE)).'<br />';
$counter++;
//$_SESSION['hotels_listing'][$counter] = url( 'node/' . $result->nid, array('alias' => FALSE));
}
如果有效,您可能还想通过省略渲染来节省一些处理时间,因为您只对查询结果顺序感兴趣,而不是实际输出:
$view = views_get_view('hotels_view');
$view->execute('block_1');
[...]