Drupal Views:以编程方式更改View并执行到数组

Dan*_*anH 2 default drupal drupal-views

基本上我有一个名为' promo ' 的视图,它建立在Nodequeue上.它被限制为1行,并按Global:Random排序

视图本身用于网站上的块.

另外,视图相同的视图用于节点引用字段' field_promo '.

我想要做的是从促销视图中获取最近的2行,并使用这些行作为field_promo的默认值.

这需要的是我:

  • 加载视图
  • 删除全局:随机排序
  • 添加创建的排序
  • 将寻呼机更改为显示2行而不是1行
  • 执行视图

...

写完所有这些并确保我不是白痴,我已经收集了我可能会在下面发布的解决方案,因为我花了这么长时间才找到它!(将在8小时后发布解决方案,如果你在发布之前解决问题,我会给出分数:P)

Dan*_*anH 6

这是我提出的解决方案:

$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);
Run Code Online (Sandbox Code Playgroud)

$ view-> set_item($ display,$ type,$ id,NULL)从视图中删除该项

我怀疑这个代码有一个更精致的版本,但是我花了这么长时间才到达那里我害怕触摸它以防万一我摧毁它:)