Drupal Views: программно изменяет View и выполняет в массив - PullRequest
2 голосов
/ 05 мая 2011

По сути, у меня есть представление под названием promo , основанное на Nodequeue.Он ограничен 1 строкой, и порядок по Global: Random

Сам вид используется для блока на сайте.

Кроме того, то же представление используется для ссылочного поля узла ' field_promo '.

Я хотел бы получить 2 последние строки из promo и использовать их в качестве значений по умолчанию для field_promo .

Для этого требуется, чтобы я:

  • загрузилview
  • удалить global: random sort
  • добавить созданный sort
  • изменить пейджер для отображения 2 строк вместо 1
  • выполнить представление

...

С момента написания всего этого и проверки того, что я не идиот, я собрал воедино решение, которое яс таким же успехом можно написать ниже, так как мне понадобилось так много времени, чтобы найти его(опубликует решение через 8 часов, я дам очки, если вы раскроете ответ, прежде чем я отправлю сообщение: P)

1 Ответ

6 голосов
/ 06 мая 2011

Вот решение, которое я придумал:

$view = views_get_view('promo_feature');
$view->init_display();
$view->preview=TRUE;
$view->is_cacheable = FALSE;
$view->display_handler->set_option('items_per_page',2);
$view->set_item('default', 'sort', 'random', NULL);
$view->add_item('default', 'sort', 'node', 'created',array('order' => 'DESC'));
$view->pre_execute();
$output = $view->display_handler->preview();
$view->post_execute();

$return=array();
foreach($view->result as $row){
  $return[]=array('nid' => $row->nid);
}

return($return);

$ view-> set_item ($ display, $ type, $ id, NULL) удаляет этот элемент из представления

Я подозреваю, что есть более усовершенствованная версия этого кода, однако мне потребовалось так много времени, чтобы добраться туда, я боюсь прикоснуться к нему в случае, если я уничтожу его:)

...