放入块中或使用views_get_view时,随机缓存视图的顺序不同
Posted
技术标签:
【中文标题】放入块中或使用views_get_view时,随机缓存视图的顺序不同【英文标题】:Order of random cached view different when out put in a block or with views_get_view 【发布时间】:2012-02-13 12:18:50 【问题描述】:我有一个随机缓存视图,我需要在不显示它的情况下访问其中的元素,才能将订单放入会话中以使某些下一个/上一个按钮起作用。
当我使用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));
【问题讨论】:
澄清问题:当您说“随机缓存”时,您的意思是视图结果的随机排序顺序,然后在缓存生命周期内保持不变? 抱歉这些零碎的问题,但我忘了问:您使用的是哪个 Drupal 和 Views 版本? 【参考方案1】:我没有在本地测试过,所以只是一些猜测:
首先,我不确定这是否从 D6 更改为 D7,但 IIRC,显示 ID 总是附有一个数字,所以我预计需要使用“block_1”而不是“block”。
进一步,查看render()
函数,它期望显示ID 作为参数。如果我正确阅读代码,它将不会检查通过$view->set_display()
设置的id,因此这可能会导致使用不同的(即默认)显示,这将导致使用不同的缓存结果。
所以你可以像这样再试一次:
$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');
[...]
【讨论】:
以上是关于放入块中或使用views_get_view时,随机缓存视图的顺序不同的主要内容,如果未能解决你的问题,请参考以下文章
在 Drupal 中使用 views_get_view 时的查询字符串问题
在 drupal 7 中,views_get_view('VIEWNAME') 出现错误?