Drupal:D7重写视图返回的值

时间:2012-03-02 12:14:16

标签: drupal-7 drupal-views drupal-hooks

我要求跨内容执行索引搜索,结果中必须包含几个标记。标签必须是随机选择。该平台是Drupal 7.12

我创建了一个视图,通过search_api管理SOLR搜索的结果。视图返回所需内容,似乎按预期工作。我已经包含了几个Global:自定义文本字段作为标记条目的占位符。

我现在正在寻找一种解决方案来管理随机化标签值的要求。随机化不是问题,问题是如何将随机值包含在视图结果中。

我目前的做法是编写一个views_pre_render钩子来拦截显示为字段([nothing][nothing_1])的占位符。测试代码如下所示

function MODULE_views_pre_render( &$view )
{
    $view_display = $view->display['default'];
    $display_option = $view_display->display_options;
    $fields = $display_option['fields'];
    foreach( $view->result as $result )
    {
        $fields['nothing']['alter']['text'] = sprintf("test %d", rand(1,9));
    }
}

当呈现视图时,我目前没有看到占位符发生任何变化。

任何关于接近,替代解决方案等的指示都会感激不尽,因为这会消耗很多稀缺的时间。从46M内的钩子转储中调用print_r( $view )到一个日志文件中,以获得2个项目的结果集。

2 个答案:

答案 0 :(得分:2)

您的任务有两种可能的解决方案。

第一种方法是在模板级别上执行所有操作。为要随机化的视图字段定义模板。在显示器的高级设置中,转到主题:信息。确保选择了正确的主题并找到您所在领域的模板建议。它们从最常见到最具体的列出,你可以选择更适合你的东西。 我想你的领域最具体的模板建议是这样的:views-view-field - [YOR VIEW NAME] - [你的显示名称] - nothing.tpl.php。在主题模板目录中创建具有该名称的文件,在此模板中,您可以呈现您想要的内容。

默认情况下,此模板只有一行:

  print $output;

您可以将其更改为:

  print sprintf("test %d", rand(1,9));

或其他任何事情,无论如何:)

第二种方法是使用Views PHP模块。使用此模块,您可以添加自定义PHP字段,您可以在其中执行任何操作。即使该模块尚未发布,它似乎对大多数任务都能很好地工作,而且对于像随机化数字这样的简单任务来说肯定会有用。

答案 1 :(得分:0)

我在寻找另一个问题时偶然发现了这一点,并认为我会做出贡献。

只需添加“Global:Random”的视图“排序条件”,而不是添加其他模块或修改模板。