【问题标题】:Drupal Views variable $rows outputs as a StringDrupal Views 变量 $rows 输出为字符串
【发布时间】:2013-01-24 21:05:47
【问题描述】:
我已经为我的视图开发了一个自定义的 .tpl.php 文件,并且在过去它已经工作了。突然,在使用 MAMP 处理我的 Macbook 时,Drupal 决定 $views->rows 需要作为字符串类型而不是数组输出。我在网上和这里搜索过答案,但找不到。我没有在我的 template.php 文件中为主题做任何预处理或 views_render 钩子。有没有人有任何想法或以前看过这个?
谢谢
【问题讨论】:
标签:
drupal-7
drupal-views
drupal-theming
theming
【解决方案1】:
浏览完 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 输出为字符串变量而不是数组。
【解决方案2】:
如果满足某个条件,我在尝试以不同的方式为某一行设置主题时也发现了这一点。大多数事情都可以在 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.
}
}
我的实际问题只在测试的第一个实例中需要除法器,所以我也使用了一个计数器,但我认为上面的示例给出了这个想法。