如何根据重写的字段对视图排序?


10

我有一个内容类型的视图,其中包含两个不同的日期字段(一个带有重复日期和一个多值单个日期)。任何给定时间仅填写一个日期字段。在视图的显示中,我通过隐藏第一个日期字段并重写第二个日期字段并包括第一个和第二个的替换标记来组合这两个字段。现在有什么方法可以使用重写的字段基于此合并的日期字段按升序对视图进行排序?看起来它会根据日期字段的原始值对其进行排序。

我完成了研究,只发现了有些老套的线程,并且死胡同。

视图按重写字段排序?

表不按重写字段排序,但按原始字段排序

视图:用于排序条件的自定义字段

按global:custom文本排序。可能吗?

我希望有一种新的或偷偷摸摸的方式来实现这一目标。


您是否有某些原因无法使用merlinofchaos的答案?drupal.org/node/1260160#comment-4907526
KariKääriäinen2013年

他实际上并未提供有关如何使用计算字段的答案。他只是建议使用它。我不介意尝试它,但不知道如何处理该模块。我也希望,有可能是一个新的尝试,因为这是2年前和Drupal的6
奈杰尔·沃特斯

是的,这是一个简短的答案。虽然原理仍然相同。看我的答案。
KariKääriäinen2013年

您想对这些日期字段做什么?选择下一个约会?
KariKääriäinen13年

我想按两个日期字段的升序对事件内容类型进行排序。
奈杰尔·沃特斯

Answers:


4

如果您不想采用模块路线,这是一种选择:

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处重新保存节点的选项。


我不确定这是否适用于具有重复日期的一个日期字段和具有单一日期(设置为无限制)的另一个字段。这在两个字段均为单个值的情况下可能起作用。
奈杰尔·沃特斯

我修改了涵盖这些情况的答案。使用dpm($ entity)可以看到日期字段的结构。dpm带有Devel模块。
KariKääriäinen13年

请不要推荐[und]语法。请改用field_get_items。
Letharion


0

做到这一点的唯一偷偷摸摸的方法是,如果您不使用分页,则可以在不依赖数据库的自定义查询替代中使用PHP排序。

根据stevector

分页实际上是阻止我们按计算字段进行排序的原因,因为通常我们需要说“数据库!按nid列进行排序时得到的结果为21-30”。

因此,如果数据库不知道如何定义21-30(例如在计算字段中),则无法可靠地从db获取结果21-30。

因此,最实用,最可靠的解决方案是使用KariKääriäinen提到的“计算字段”。


在指定了版本号并修复了复制粘贴错误后,似乎有人否决了我。这个答案有问题吗?
贝丝

我较早地投票赞成模块方法,但后来却投票否决了,因为这与包括我的其他任何人一样都不是可用的答案,因为问题本身仍然不清楚,至少对我而言。
KariKääriäinen13年

这个问题对我来说似乎很清楚。我将在回答中添加一些说明。
贝丝2013年

没关系,我意识到Views的行为不尽如人意。
贝丝

0

这有点麻烦,但是可以用,您不需要任何其他模块。

为要排序的字段创建标签,并且不要将其从显示中排除。而是通过添加一个空的html <!---->注释作为重写值,将显示内容重写为“空白” 。然后,将您的其他php / rewrite字段添加为该列的子级。

这将显示表格标题,以进行正确的排序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.