无法以编程方式在视图 Drupal 7 中为日期设置公开过滤器

Posted

技术标签:

【中文标题】无法以编程方式在视图 Drupal 7 中为日期设置公开过滤器【英文标题】:Unable to programmatically set exposed filter for date in views Drupal 7 【发布时间】:2015-01-13 08:00:04 【问题描述】:

我正在尝试从我创建的视图中获取数据。我已经暴露了 nid 和另一个名为 uid 的字段,当我对它们应用过滤器时它们工作正常。然而,还有另一个暴露的过滤器“field_date”正在与drupal的ui一起使用,但在我的custome模块中没有以编程方式。这是一个日期戳字段。我的代码示例如下。传递的值是 unix 时间戳格式。

    views_include('view');
    $name = Rest::$DAILY_LOGS_VIEW;
    $display = Rest::$DAILY_LOGS_VIEW_PAGE;

    $alter = array('exposed' =>array('field_uid_value' => $uid));
    if(!empty($nid)) $alter['exposed']['nid'] = (int) $nid;

    //if(!empty($from_date)) $alter['exposed']['field_date_value_1']['min'] = (int) $from_date;
    //if(!empty($to_date)) $alter['exposed']['field_date_value_1']['max'] = (int) $to_date;
    //if(!empty($to_date)) $alter['exposed']['field_date_value_1[max]'] = (int) $to_date;

    if(!empty($date)) $alter['exposed']['field_date_value'] = (int) $date;

    $view = views_get_view($name);
    $view->init_display($display);
    $view->preview=TRUE;
    $view->is_cacheable = FALSE;

    if(isset($alter['exposed'])) 
      foreach($alter['exposed'] as $key => $valor) 
         $view->exposed_input[$key] = $valor;
      
    

    $view->init_pager();
    $view->pager['items_per_page']               = $count;
    $view->pager['use_pager']                    = true;
    $view->display_handler->options['use_pager'] = true;
    $view->set_items_per_page($count);
    $view->pager['current_page'] = $page;

    $view->pre_execute();
    $output = $view->display_handler->preview();
    $view->post_execute();

    return $view->result;

所以我在这里有两个问题。

对于日期格式的过滤器,正确的格式是什么?

日期“介于”值(即最小值和最大值)之间的过滤器的格式是什么?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题并设法用这个解决了它:

$view->exposed_input[$key]["value"]["month"] = $month;
$view->exposed_input[$key]["value"]["year"] = $year;

不确定您是否也需要“日”,但我在粒度上选择了“月”

【讨论】:

【参考方案2】:

第二部分的答案:为日期“介于”值(即最小值和最大值)之间的过滤器提供格式:

我安装了日期模块并将过滤器设置为

if(!empty($from_date)) $view->exposed_input['field_date_value']['min']['date']= $from_date;
if(!empty($to_date)) $view->exposed_input['field_date_value']['max']['date']= $to_date;

【讨论】:

以上是关于无法以编程方式在视图 Drupal 7 中为日期设置公开过滤器的主要内容,如果未能解决你的问题,请参考以下文章

markdown Drupal 7 - 以编程方式将视图模式添加到实体

Drupal 7 - 具有关系和过滤器问题的视图

如何使用标志在 Drupal 视图中为节点提供特定的放置顺序

如果链接字段的标题值在 drupal 7 视图中为空,如何隐藏标题?

PHP Drupal以编程方式打印视图

Drupal视图2和3以编程方式呈现带参数的视图