【问题标题】:How to change the sorting of a view using hook_views_pre_view()?如何使用 hook_views_pre_view() 更改视图的排序?
【发布时间】:2010-04-27 08:50:51
【问题描述】:

我有以下内容:

function view_sorter_views_pre_view(&$view) {  // don't need $items

   if ($view->name == 'MOST_RECENT') {

        $insert = array();
        $insert[order] = 'DESC'; //SORT ORDER
        $insert[id] = 'title';
        $insert[table] = 'node';
        $insert[field] = 'title';
        $insert[override] = array();
        $insert[override][button] = 'Override';
        $insert[relationship] = 'none';

        unset ($view->display['default']->display_options['sorts']['title']);
        $view->display['default']->display_options['sorts']['title'] = $insert;

   }

} 

基本上,我只是更改排序顺序...但是打开它时不会出现在视图上。知道为什么吗?

【问题讨论】:

    标签: drupal view hook


    【解决方案1】:

    我相信你想要的是

    /**
     * Implementation of hook_views_pre_view().
     */
    function view_sorter_views_pre_view(&$view) {
      if ($view->name == 'MOST_RECENT') {
        $view->display['default']->handler->options['sorts']['title']['order'] = 'DESC';
      }
    }
    

    Views 使用处理程序对象而不是 display_options 来构建查询。 display_options 包含视图包含的每种显示类型的所有选项(例如,default、page_1、block_1 等...)。 “处理程序”对象包含将用于实际构建当前显示的选项。

    注意:我简化了代码,只更改了排序顺序。您的其余代码应该可以工作,只需将最后两行更改为

    unset($view->display['default']->handler->options['sorts']['title']);
    $view->display['default']->handler->options['sorts']['title'] = $insert;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2015-07-31
      • 2010-11-15
      • 1970-01-01
      • 2012-06-10
      • 2018-12-23
      相关资源
      最近更新 更多