0

我正在使用 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

4

2 回答 2

1

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

于 2012-08-02T14:41:59.513 回答
0

我找到了许多可能的解决方案并在此处进行了总结: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',
      )
    );
  }
}
?>
于 2013-11-20T20:59:43.633 回答