Порядок случайного кэшированного представления отличается, когда он помещен в блок или в views_get_view - PullRequest
1 голос
/ 13 февраля 2012

У меня есть случайное кэшированное представление, которое мне нужно получить доступ к элементам, не отображая его, чтобы получить порядок в сеансе для работы некоторых кнопок 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 Ответ

2 голосов
/ 14 февраля 2012

Я не проверял это локально, поэтому только некоторые предположения:

Прежде всего, я не уверен, что это изменилось с D6 на D7, но IIRC, к идентификаторам дисплея всегда присоединен номер, поэтомуЯ бы ожидал, что нужно использовать «block_1» вместо «block».

Далее, глядя на функцию render(), он ожидает идентификатор дисплея в качестве параметра.Если я правильно прочитал код, он не будет проверять идентификатор, установленный через $view->set_display(), так что это может привести к другому (а именно по умолчанию) отображению, что приведет к использованию другого результата кэша.

Таким образом, вы можете повторить попытку следующим образом:

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