Drupal 7 Drupal-making中的外露日期过滤器;“月”;可选择的

Drupal 7 Drupal-making中的外露日期过滤器;“月”;可选择的,drupal-7,drupal-views,Drupal 7,Drupal Views,我在我的网站上有一个视图,其中列出了一个视频存档和一个年/月粒度的公开过滤器。我的问题是,过滤器只接受同时选择了年和月值的输入,但我确实需要让用户能够在不必选择月的情况下按年进行过滤,并且能够首先选择年,然后如果他们愿意的话,通过按月过滤来优化搜索 我是一个Drupal初学者,所以我对Drupal的基础设施知之甚少。我甚至不知道视图存储在哪里。如果我这样做了,也许我可以以某种方式修改代码 我不确定是否有一种内置的方法可以让这个月成为可选的,但这是一种可能的解决方法。您可以添加两个公开的过滤器,一

我在我的网站上有一个视图,其中列出了一个视频存档和一个年/月粒度的公开过滤器。我的问题是,过滤器只接受同时选择了年和月值的输入,但我确实需要让用户能够在不必选择月的情况下按年进行过滤,并且能够首先选择年,然后如果他们愿意的话,通过按月过滤来优化搜索


我是一个Drupal初学者,所以我对Drupal的基础设施知之甚少。我甚至不知道视图存储在哪里。如果我这样做了,也许我可以以某种方式修改代码

我不确定是否有一种内置的方法可以让这个月成为可选的,但这是一种可能的解决方法。您可以添加两个公开的过滤器,一个具有年粒度,另一个具有年-月粒度。然后,您可以使用更改公开的表单(确保添加一个条件以检查它是否是您的视图和显示id)。您可以添加一个validate回调,以便在提交表单时,如果选择了月份,您可以在year\u month字段中设置年份

我还没有对此进行测试,但这通常是我处理表单的方式

<?php
function my_module_form_views_exposed_form_alter(&$form, &$form_state) {
  $view = $form_state['view'];
  if ($view->name == 'my_view' && $view->current_display == 'my_display') {
    // Assuming the year exposed filter is 'year' and year-month exposed filter
    // is 'year_month'.
    $form['year_month']['value']['year']['#access'] = FALSE; // Hides the year
    $form['#validate'][] = 'my_module_my_view_filter_validate';
  }
}

function my_module_my_view_filter_validate($form, &$form_state) {
  $values = isset($form_state['values']) ? $form_state['values'] : array();
  // When the month is set, grab the year from the year exposed filter.
  if (isset($values['year_month']['value']['month'])) {
    // If the year is not set, we have set a user warning.
    if (!isset($values['year']['value']['year'])) {
      drupal_set_message(t('Please select a year.'), 'warning');
    }
    else {
      // Otherwise set the year in the year_month filter to the one from our
      // year filter.
      $year = $values['year']['value']['year'];
      $form_state['values']['year_month']['value']['year'] = $year;
    }
  }
}
?>