【问题标题】:Drupal 7: Sorting multiple content types in Views, with different date fieldsDrupal 7:对视图中的多种内容类型进行排序,具有不同的日期字段
【发布时间】:2012-08-02 01:37:31
【问题描述】:

我正在使用 Drupal 7,带有 Views、Feeds 和 Views PHP 模块(以及其他,但我认为这些是唯一相关的)。

我的目标是一个单一的视图,它结合 (a) 通过 Feeds 模块引入的多个 RSS 提要,(b) 我自己的两个或三个内容类型,用于在我的站点上手动创建的内容。结果将是一个块和一个页面,其中包含我所有最新作品的流,无论它在哪里——我自己的网站或其他网站(当然,只要该其他网站有 RSS 提要)。

理想的结果是显示单个列表,按日期排序,混合项目而不考虑内容类型。

我的问题:Feeds 模块和我的自定义内容类型具有不同的日期字段。我的内容类型有一个名为 Original Date 的字段,这是我在创建内容时设置的(例如,添加我三年前写的一篇文章——我显然希望它按发布时间排序,而不是按我添加到地点)。但是,每个 feed_item 都有一个日期字段 Published Date,它对应于 RSS 提要中的日期,并由 RSS 与项目的其余部分一起接收。

我已尝试以多种方式使用 Views PHP 功能来使用 if/then 语句。例如,我检查 content_type 是什么,然后根据内容类型将变量设置为原始日期或发布日期。或者,我测试了是否设置了原始日期字段;如果是这样,我返回该字段,否则我返回 Published Date 字段。他们都以各种方式失败。大多数抛出的 PHP 错误甚至对匿名用户都是可见的(显然是个问题)。

我已经在视图的排序标准部分直接尝试了这些不同的方法;我还尝试在“字段”部分中提出日期,然后使用排序标准调用该结果。我已将所有内容都转换为 Unix 时间戳,以确保我有一些简单的排序依据;我试过把日期作为日期。无论如何都不走运。

这是真正奇怪的部分:我已成功使用这些方法显示正确的日期,因此(例如)该块显示 • TITLE |自定义内容类型的原始日期,以及 • TITLE |提要项目的发布日期。但是,当我尝试使用相同的方法按日期排序时,它会失败。

我是否忽略了一些更简单的东西?我必须使用 PHP 视图吗?有没有其他方法可以通过两个不同(尽管相似)字段的组合对多个内容类型的视图进行排序?

谢谢!

tf

【问题讨论】:

    标签: date sorting drupal-7 views


    【解决方案1】:

    您是否尝试过使用视图的关系功能?您可以使用它来访问所有内容类型的所有日期字段,然后将一些条件代码添加到字段项中,您应该是黄金。 (也就是说,如果我正确理解了这个问题......)

    【讨论】:

    • 让我试一试;我从未使用过该功能,但可能应该了解它。谢谢!
    【解决方案2】:

    我找到了许多可能的解决方案,并在此处进行了总结:https://drupal.org/node/2133879

    但是,我建议这是一个简单的解决方案:

    在自定义模块中,使用 hook_views_query_alter() 函数来更改排序条件,以使用 CASE ... WHEN 在 orderby 条件中添加条件。这里展示了一个很好的例子:

    <?php
    /**
     * Implements hook_views_query_alter
     * @param type $view
     * @param type $query
     */
    function MODULE_views_query_alter(&$view, &$query) {
      if ($view->name == 'views_name' && $view->current_display == 'display_name') {
        $query->orderby = array(
          array(
            'field' => 'CASE WHEN field_data_field_date_publication.field_date_publication_value
    THEN field_data_field_date_publication.field_date_publication_value 
    ELSE node.created END',
            'direction' => 'DESC',
          )
        );
      }
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多