Drupal:替换View中的字段值

时间:2009-09-02 21:51:55

标签: php drupal content-management-system drupal-views

我有Drupal 5 View(必须是“Views 1”所以),其中包含Event_StartTime字段,该字段通常显示内部具有实际日期的字段。但我也有一些Event_StartTime字段值的记录,如 1969年12月31日 - 晚上8点,看起来很糟糕,我需要用一些自定义标签替换它们,比如“No Date Available”。

我可以以某种方式将此条件(如果value = x显示值y)注入视图中吗? 即使我在“无可用日期”中打印到SQL中,视图也会显示空字段。

总而言之,一般的问题是View字段是一种限制,有时你只需要替换一些字段值,但它可以是“date or nothing”或“node-reference id or nothing”。

P.S。情况可能有点复杂,因为我使用“Bonus:Views Export”模块,这使我的视图返回CSV数据。

2 个答案:

答案 0 :(得分:2)

我不再熟悉Views1了,但我认为你至少有两个选择:

  1. 在主题级别 - 您可以覆盖字段模板并检查其中的特定日期值,并在找到时替换它。当然这个检查取决于日期的格式,所以如果你改变了,你也需要调整检查。
  2. 在视图生成级别 - 您可以从代码中“手动”执行视图,并在实例化之后和/或执行之后但在渲染之前检查视图对象(请参阅她的example of manipulationg the view object in Views2)。您可以在执行之后但在渲染之前操作结果属性,或者您可以在实例化之后立即在其中放置预渲染回调(但我不确定这是否已在Views1中实现)。

答案 1 :(得分:1)

根据Henrik的评论,在我看来,主题是最好的地方。您需要在template.php文件中添加一个函数来覆盖该特定视图。请参阅Views 1 theming documentation。根据此文档,您可以使用表单视图的名称

创建一个函数
function THEMENAME_view_view_VIEWNAME($view, $type, $nodes, $level = NULL, $args = NULL)

以整个视图为主题。 $nodes是视图中包含的部分加载的节点对象的数组。您可以加载每个节点并使用以下内容检查Event_StartTime字段的值:

foreach ($nodes as $id => $node) {
  $temp_node = node_load($node->nid);
  //now check value of Event_StartTime assuming that is what you named the field
  if ($temp_node->Event_StartTime === 'Dec 31 1969 - 8:00pm') {
    $temp_node->Event_StartTime = 'No Date Available';
  }
 //output the fields of your view . . .
}

我只展示了如何检查Event\_StartTime字段的值,我不确定实际值是多少。 1969年12月31日在time()函数返回的日期之前,因此如果这不起作用,您可能需要检查是否Event_StartTime === '',如果事件字段刚空,则可能为真。您仍然需要对其余字段进行主题化并将其输出为HTML,这可能只是为了更改一个字段的输出而感到痛苦。您还可以覆盖单个字段的输出。我没有这样做,所以我无法引导你完成它,但我上面给出的链接有一些关于覆盖字段主题功能的文档。