我有一个内容类型的视图,其中包含两个不同的日期字段(一个带有重复日期和一个多值单个日期)。任何给定时间仅填写一个日期字段。在视图的显示中,我通过隐藏第一个日期字段并重写第二个日期字段并包括第一个和第二个的替换标记来组合这两个字段。现在有什么方法可以使用重写的字段基于此合并的日期字段按升序对视图进行排序?看起来它会根据日期字段的原始值对其进行排序。
我完成了研究,只发现了有些老套的线程,并且死胡同。
我希望有一种新的或偷偷摸摸的方式来实现这一目标。
我有一个内容类型的视图,其中包含两个不同的日期字段(一个带有重复日期和一个多值单个日期)。任何给定时间仅填写一个日期字段。在视图的显示中,我通过隐藏第一个日期字段并重写第二个日期字段并包括第一个和第二个的替换标记来组合这两个字段。现在有什么方法可以使用重写的字段基于此合并的日期字段按升序对视图进行排序?看起来它会根据日期字段的原始值对其进行排序。
我完成了研究,只发现了有些老套的线程,并且死胡同。
我希望有一种新的或偷偷摸摸的方式来实现这一目标。
Answers:
如果您不想采用模块路线,这是一种选择:
1)安装计算字段模块
2)将计算字段添加到您的内容类型
3)在字段设置中,在计算代码(PHP)文本区域中,您可以访问字段数据。
将当前语言中的日期字段获取为变量。
$repeating_dates = field_get_items($entity_type, $entity, 'field_repeating_date_example');
$multidates = field_get_items($entity_type, $entity, 'field_multidate_example');
您现在可以在以下位置找到您的日期值
$repeating_dates[0]['value'],
$repeating_dates[1]['value'],
$repeating_dates[2]['value'], etc.
$multidates[0]['value'],
$multidates[1]['value'],
$multidates[2]['value'], etc.
对日期字段执行所需的任何逻辑,然后将结果分配给
$entity_field[0]['value']
现在,您有了可在视图中使用的可排序字段,但是首先您必须更新所有节点,因为仅在节点保存时才计算字段并将其保存到数据库中。有很多方法可以做到这一点,一种是使用Views Bulk Operations,它为您提供了一种在admin / content处重新保存节点的选项。
[und]
语法。请改用field_get_items。
我认为您可以使用Views Natural Sort来做到这一点。它具有对字段进行排序的选项,即- 启用对特定字段的排序。如果您遵循本教程,您将有一个主意!!
做到这一点的唯一偷偷摸摸的方法是,如果您不使用分页,则可以在不依赖数据库的自定义查询替代中使用PHP排序。
根据stevector,
分页实际上是阻止我们按计算字段进行排序的原因,因为通常我们需要说“数据库!按nid列进行排序时得到的结果为21-30”。
因此,如果数据库不知道如何定义21-30(例如在计算字段中),则无法可靠地从db获取结果21-30。
因此,最实用,最可靠的解决方案是使用KariKääriäinen提到的“计算字段”。