当放入块或带有views_get_view时,随机缓存视图的顺序不同

时间:2012-02-13 12:18:51

标签: drupal views drupal-views

我有一个随机缓存视图,我需要访问元素而不显示它以使订单进入会话以使某些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));
 }

1 个答案:

答案 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');
  [...]