无法以编程方式在视图 Drupal 7 中为日期设置公开过滤器
Unable to programmatically set exposed filter for date in views Drupal 7
我正在尝试从我创建的视图中获取数据。我公开了 nid 和另一个名为 uid 的字段,当我对它们应用过滤器时它们工作正常。但是,还有另一个暴露的过滤器 "field_date",它与 drupal 的 ui 一起工作,但不是在我的客户模块中以编程方式工作。这是一个日期戳字段。我的代码示例如下。传递的值是 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;
所以我有两个问题。
为具有日期格式的过滤器提供的正确格式是什么?
具有日期 "between" 值(即最小值和最大值)的过滤器的格式是什么?
我遇到了同样的问题,并设法用这个解决了它:
$view->exposed_input[$key]["value"]["month"] = $month;
$view->exposed_input[$key]["value"]["year"] = $year;
不确定您是否也需要 "Day",但我在粒度上选择了 "Month"
第二部分的答案:为具有日期 "between" 值(即最小值和最大值)的过滤器提供的格式:
我安装了日期模块并将过滤器设置为
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;
我正在尝试从我创建的视图中获取数据。我公开了 nid 和另一个名为 uid 的字段,当我对它们应用过滤器时它们工作正常。但是,还有另一个暴露的过滤器 "field_date",它与 drupal 的 ui 一起工作,但不是在我的客户模块中以编程方式工作。这是一个日期戳字段。我的代码示例如下。传递的值是 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;
所以我有两个问题。
为具有日期格式的过滤器提供的正确格式是什么?
具有日期 "between" 值(即最小值和最大值)的过滤器的格式是什么?
我遇到了同样的问题,并设法用这个解决了它:
$view->exposed_input[$key]["value"]["month"] = $month;
$view->exposed_input[$key]["value"]["year"] = $year;
不确定您是否也需要 "Day",但我在粒度上选择了 "Month"
第二部分的答案:为具有日期 "between" 值(即最小值和最大值)的过滤器提供的格式:
我安装了日期模块并将过滤器设置为
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;