Drupal Views变量$ rows输出为String

时间:2013-01-24 21:05:48

标签: drupal-7 drupal-views drupal-theming theming

我为我的View开发了一个自定义的.tpl.php文件,过去它已经运行了。突然,在使用MAMP处理我的Macbook时,Drupal决定$ views->行需要输出为String类型而不是数组。我在网上搜索过,但在这里找不到答案。我没有在我的template.php文件中为主题做任何预处理或views_render挂钩。有没有人有任何想法或之前见过这个?

由于

2 个答案:

答案 0 :(得分:0)

在浏览视图模块代码之后,我找不到一个_render钩子,我会改变它以使$ rows返回到Array类型。我确实通过了modules / views / theme / views-view.tpl.php

因此,我使用views-view.tpl.php代码替换了我自己模板中的大部分代码,并将数据库替换为以前的版本,因此我可以完全开始。事实证明问题在于我的模板文件没有输出暴露的过滤器等,以及使用

的视图

打印$ rows

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

因此,底线看起来像Views中的Unformatted Fields现在输出$ rows作为String变量而不是数组。

答案 1 :(得分: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.
  } 
}

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