我在我的网站上有一个视图,其中列出了一个视频存档和一个具有年/月粒度的公开过滤器。我的问题是过滤器只接受同时选择年份和月份值的输入,但我确实需要让用户能够按年份过滤而不必选择月份,并且能够先选择年份然后再选择如果他们愿意,可以通过按月过滤来优化搜索。
我是 Drupal 初学者,所以对 Drupal 的基础设施了解不多。我什至不知道视图存储在哪里。如果我这样做了,也许我可以以某种方式更改代码。
我在我的网站上有一个视图,其中列出了一个视频存档和一个具有年/月粒度的公开过滤器。我的问题是过滤器只接受同时选择年份和月份值的输入,但我确实需要让用户能够按年份过滤而不必选择月份,并且能够先选择年份然后再选择如果他们愿意,可以通过按月过滤来优化搜索。
我是 Drupal 初学者,所以对 Drupal 的基础设施了解不多。我什至不知道视图存储在哪里。如果我这样做了,也许我可以以某种方式更改代码。
我不确定是否有内置方法可以使月份可选,但这是一种可能的解决方法。您可以添加两个公开的过滤器,一个具有年粒度,一个具有年-月粒度。然后你可以使用hook_form_FORM_ID_alter来改变暴露的表单(一定要添加一个条件来检查它是你的视图和显示 id)。您可以添加验证回调,以便在提交表单时,如果选择了月份,您可以在 year_month 字段中设置年份。
我没有对此进行测试,但这通常是我处理 form_alter 的方式。
<?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;
}
}
}
?>