【问题标题】:Drupal: D7 rewriting values returned by viewsDrupal:D7重写视图返回的值
【发布时间】:2026-01-18 05:10:01
【问题描述】:

我需要对结果中必须包含几个标签的内容执行索引搜索。标签必须是随机选择。平台为 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));
    }
}

我目前在渲染视图时没有看到占位符有任何变化。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

      print $output;
    

    您可以将其更改为:

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

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

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

    【讨论】:

    • 荣誉...这也很简单! 加上刷新缓存,解决方案本身就很简单。我现在将添加主要功能。
    • 最近重新访问了该解决方案,现在已经使用了 Views_PHP 模块,如上所述并调用了模块函数,因此在视图定义中而不是在表示层中维护逻辑。再次感谢您的领导。
    【解决方案2】:

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

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

    【讨论】: