0

我已经为我的视图开发了一个自定义的 .tpl.php 文件,并且在过去它已经工作了。突然,在使用 MAMP 处理我的 Macbook 时,Drupal 决定 $views->rows 需要作为字符串类型而不是数组输出。我在网上和这里搜索过答案,但找不到。我没有在我的 template.php 文件中为主题做任何预处理或 views_render 钩子。有没有人有任何想法或以前看过这个?

谢谢

4

2 回答 2

0

浏览完 Views 模块代码后,我找不到一个 _render 挂钩,我可以更改它以使 $rows 返回到 Array 类型。我确实浏览了 modules/views/theme/views-view.tpl.php

所以我用views-view.tpl.php代码替换了我自己模板中的大部分代码,并用以前的版本替换了数据库,这样我就可以完全重新开始了。原来问题在于我的模板文件没有输出暴露的过滤器等,以及使用的视图

打印 $rows

而不是使用 $rows 作为数组。似乎我使用的任何版本的视图都使用 $rows 变量作为字符串。所以我在 Rewrite Results 框中放入了一个 %SPLIT% 字符串,这样我就可以做一个 PHP preg_split,将结果数组输入我的函数以生成我需要的东西,然后做一个 preg_replace 来摆脱 %SPLIT% $rows 中的字符串。结果看起来像我所拥有的。

因此,最重要的是,视图中的未格式化字段现在将 $rows 输出为字符串变量而不是数组。

于 2013-01-25T16:14:59.503 回答
0

如果满足条件,我在尝试以不同的方式为某一行设置主题时也发现了这一点。大多数事情都可以在 Views UI 中完成,但我无法弄清楚这一点。我终于能够在我的 template.php 文件中使用 yourtheme_preprocess_views_view_unformatted(&$vars) 来做到这一点。$rows 在那里的行为似乎仍然像一个数组(尽管它后来又变成了一个字符串)。

function yourtheme_preprocess_views_view_unformatted(&$vars) {

  if ($vars['view']->name == "name_of_view") {

    $rows = $vars['rows'];

    $newRows = array();

    foreach ($rows as $r) {

      $test = strpos($r, "string_i_looked_for");

        if ($test) {
          $newRows[] = "<hr>$r"; // I needed to put in a divider if the condition was met.
        }

        else {
          $newRows[] = $r;
        }
     }
  $vars['rows'] = $newRows; // So that the array of new rows is what will be sent along.
  } 
}

我的实际问题只在测试的第一个实例中需要除法器,所以我也使用了一个计数器,但我认为上面的例子给出了这个想法。

于 2014-05-20T18:49:53.037 回答