如何在 Drupal 7 中将主题区域正确添加到视图视图--page.tpl.php
How do I properly add a theme region to a views-view--page.tpl.php in Drupal 7
好的,这就是我所发现的(有效 - 但它会产生日志通知)“只有变量应该在 eval()" 这简直让我抓狂!
最初像任何主题区域一样,我将我想要用于视图的区域添加到 theme.info 文件。
; View Regions
regions[view_header] = View Header
regions[view_content] = View Content
regions[view_footer] = View Footer
在 views-view--page.tpl.php 我放置了这些(我想要渲染区域的地方)
<?php print render(block_get_blocks_by_region('view_header')); ?>
<?php print render(block_get_blocks_by_region('view_content')); ?>
<?php print render(block_get_blocks_by_region('view_footer')); ?>
这会为 tpl 中的每个条目生成一个通知,但它按预期工作 100%
然后我尝试在主题 template.php 中添加一个钩子(试图从中创建变量)所以我可以像这样使用 <?php print $view_header; ?>
:
function theme_preprocess_views_view(&$variables){
$variables['view_header'] = render(block_get_blocks_by_region('view_header'));
$variables['view_content'] = render(block_get_blocks_by_region('view_content'));
$variables['view_footer'] = render(block_get_blocks_by_region('view_footer'));
这再次起作用 - 这再次产生日志通知.. 这次所有页面加载的每个区域 3 个,所以 9 个而不是 3 个(不仅仅是当 views-view--page.tpl.php 加载时)这可以追溯到主题 template.php(这次与上面列出的通知相同,但在该页面加载时没有来自视图模板中使用的 $variables 的通知)。
显然我在这里遗漏了一些东西!也许这完全是错误的方法...
如何使主题区域在 tpl 中可用变量?
- 我的印象是我发现的所有东西都是几年前的(3 到 10 年)并且可能在 php 5.x 上工作得很好 - 这个网站目前正在使用 php 7.2.x(这是否会影响需要完成的方式)
如有任何帮助,将不胜感激,谢谢!
这是因为函数 render()
需要一个引用,并且 只有变量应该通过引用传递 :
function render(&$element) {
# code need to be able to modify $element
}
render('value'); # throws notice
render(block_get_blocks_by_region('view_header')); # throws notice
$value = 'value';
$build = block_get_blocks_by_region('view_header');
render($value); # Ok
render($build); # Ok
此外,我认为要走的路应该是在预处理挂钩中将可渲染数组分配给 $variables
:
function theme_preprocess_views_view(&$variables){
$variables['view_header'] = block_get_blocks_by_region('view_header');
$variables['view_content'] = block_get_blocks_by_region('view_content');
$variables['view_footer'] = block_get_blocks_by_region('view_footer');
# ...
}
... 并让模板调用 render()
:
<?php print render($view_header); ?>
<?php print render($view_content); ?>
<?php print render($view_footer); ?>
好的,这就是我所发现的(有效 - 但它会产生日志通知)“只有变量应该在 eval()" 这简直让我抓狂!
最初像任何主题区域一样,我将我想要用于视图的区域添加到 theme.info 文件。
; View Regions
regions[view_header] = View Header
regions[view_content] = View Content
regions[view_footer] = View Footer
在 views-view--page.tpl.php 我放置了这些(我想要渲染区域的地方)
<?php print render(block_get_blocks_by_region('view_header')); ?>
<?php print render(block_get_blocks_by_region('view_content')); ?>
<?php print render(block_get_blocks_by_region('view_footer')); ?>
这会为 tpl 中的每个条目生成一个通知,但它按预期工作 100%
然后我尝试在主题 template.php 中添加一个钩子(试图从中创建变量)所以我可以像这样使用 <?php print $view_header; ?>
:
function theme_preprocess_views_view(&$variables){
$variables['view_header'] = render(block_get_blocks_by_region('view_header'));
$variables['view_content'] = render(block_get_blocks_by_region('view_content'));
$variables['view_footer'] = render(block_get_blocks_by_region('view_footer'));
这再次起作用 - 这再次产生日志通知.. 这次所有页面加载的每个区域 3 个,所以 9 个而不是 3 个(不仅仅是当 views-view--page.tpl.php 加载时)这可以追溯到主题 template.php(这次与上面列出的通知相同,但在该页面加载时没有来自视图模板中使用的 $variables 的通知)。
显然我在这里遗漏了一些东西!也许这完全是错误的方法...
如何使主题区域在 tpl 中可用变量?
- 我的印象是我发现的所有东西都是几年前的(3 到 10 年)并且可能在 php 5.x 上工作得很好 - 这个网站目前正在使用 php 7.2.x(这是否会影响需要完成的方式)
如有任何帮助,将不胜感激,谢谢!
这是因为函数 render()
需要一个引用,并且 只有变量应该通过引用传递 :
function render(&$element) {
# code need to be able to modify $element
}
render('value'); # throws notice
render(block_get_blocks_by_region('view_header')); # throws notice
$value = 'value';
$build = block_get_blocks_by_region('view_header');
render($value); # Ok
render($build); # Ok
此外,我认为要走的路应该是在预处理挂钩中将可渲染数组分配给 $variables
:
function theme_preprocess_views_view(&$variables){
$variables['view_header'] = block_get_blocks_by_region('view_header');
$variables['view_content'] = block_get_blocks_by_region('view_content');
$variables['view_footer'] = block_get_blocks_by_region('view_footer');
# ...
}
... 并让模板调用 render()
:
<?php print render($view_header); ?>
<?php print render($view_content); ?>
<?php print render($view_footer); ?>