1

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

我创建了一个视图,通过search_api. 该视图返回所需的内容,并且似乎按预期工作。我已经包含了几个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));
    }
}

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

任何有关方法、替代解决方案等的指示都将不胜感激,因为目前这正在消耗大量稀缺的时间。print_r( $view )从钩子内部调用会将超过 46M 的数据转储到日志文件中,以获得 2 个项目的结果集。

4

2 回答 2

2

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

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

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

  print $output;

您可以将其更改为:

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

或其他任何东西,无论如何:)

第二种方法是使用Views PHP模块。使用此模块,您可以添加一个自定义 PHP 字段,您可以在其中做任何您想做的事情。尽管该模块尚未发布,但它似乎对于大多数任务都工作得很好,而且对于随机数字这样简单的任务,它肯定会奏效。

于 2012-03-02T22:31:10.303 回答
0

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

无需添加其他模块或修改模板,只需添加“全局:随机”的视图“排序标准”。

于 2013-10-26T21:40:01.027 回答