Drupal的7:在发布日期外露过滤器(Drupal 7: Exposed filter on a

2019-08-17 07:49发布

我有几个几百个网站上的文章。 我使用视图来显示摘录和链接到他们在一个页面上,我也有一个寻呼机,显示当时的10篇文章。 我需要添加一个下拉多年[...,2008,2009 ......,2013]。 如果您在下拉列表中选择一个年份,然后视图只显示已张贴在该年度的文章。 年在下拉应该如果一个新的文章在2013年加入例如自动更新,因此第一年是第一次公布的一年。

请提出可能的解决方案。

Answer 1:

我想,你需要暴露过滤器设置为视图列表。 配置应该是like--

过滤标准:日期(节点);

表单元素:选择;

过滤的粒度:年;

日期字段:发布日期; 暴露;

滤波器类型揭露:单;

运营商:等于;

通知我,如果它的工作原理..



Answer 2:

这里是一个办法做到这一点,如果你想使用Drupal内置的“撰写了”字段的节点。 你需要创建一个自定义模块。 这是在Drupal 7中创建/浏览次数3.我的模块文件在/网站/所有/模块/自定义/ ViewsYearFilter /。

ViewsYearFilter.info

name = Views Year Filter
description = Allow a view to filter by post year.
package = tools
core = 7.x

files[] = ViewsYearFilter.inc
files[] = ViewsYearFilter.views.inc

ViewsYearFilter.module

<?php

/**
 * Implements of hook_views_api().
 */
function ViewsYearFilter_views_api() {
  return array('api' => 3);
}

ViewsYearFilter.views.inc

<?php

/**
 * Implements of hook_views_data().
 */
function ViewsYearFilter_views_data() {
  return array(
    'node' => array(
      'published_year' => array(
        'group' => t('Content'),
        'title' => t('Year'),
        'help' => t('Filter by years.'),
        'filter' => array('handler' => 'ViewsYearFilter'),
      )
    )
  );
}

ViewsYearFilter.inc

<?php

/* Allows filtering of posts by year in a Drupal View. */

class ViewsYearFilter extends views_handler_filter_in_operator {

  /**
   * Override parent get_value_options() function. This function returns an array of all valid years from our post type.
   * @return
   *   Return the stored values in $this->value_options if someone expects it.
   */
  function get_value_options() {

    $query = new EntityFieldQuery();
    $query->entityCondition('entity_type', 'node')
    ->propertyCondition('type', 'blog_post') //post type
    ->propertyCondition('status', '1'); //is published

    $results = $query->execute();

    $object_node_ids = array_keys($results['node']);
    $objects = node_load_multiple($object_node_ids);

    foreach ($objects as $blog_post) {
      $values[date('Y', $blog_post->created)] = date('Y', $blog_post->created);
    }

    $this->value_options = $values;
    return $values; //array of year values
  }

  function query() {
    $this->ensure_my_table(); //not sure why/if this is necessary
    $startDate = mktime(0, 0, 0, 1, 1, intval($this->value[0]));
    $endDate = mktime(0, 0, 0, 1, 1, intval($this->value[0] + 1));
    $this->query->add_where_expression($this->options['group'], "node.created >= " . $startDate . " AND node.created <= " . $endDate); //filtering query
  }

}

然后,在您的视图配置页面,您可以创建一个新的过滤器曝光:

对不起,但我不能真的发表了这个形象,我没有足够的声誉。 将有一个新的名为暴露过滤器“内容:年”,你可以创建和激活新的模块后,添加到您的视图。

PS:我根据我的代码关闭舍夫丘克对回答这个问题 。



文章来源: Drupal 7: Exposed filter on a post date