Drupal:强制区域始终渲染?

Drupal:强制区域始终渲染?,drupal,Drupal,我希望始终渲染所有区域。即使它们不包含任何块 我像这样呈现我的区域(在page.tpl.php): 我认为答案在于文件和相关函数 模板文件检查是否有名为$content的有效变量可用,该变量是从预处理函数加载的。如果$content数组为空,则条件将失败,并且不会呈现任何标记(如果区域不包含块,则会发生这种情况) 尝试将region.tpl.php的副本添加到主题中,删除if($content):条件,然后刷新Drupal的缓存。这不仅仅是因为没有为该区域分配任何块,而且几乎可以肯定是因为渲染数

我希望始终渲染所有区域。即使它们不包含任何块

我像这样呈现我的区域(在
page.tpl.php
):


我认为答案在于文件和相关函数

模板文件检查是否有名为
$content
的有效变量可用,该变量是从预处理函数加载的。如果
$content
数组为空,则条件将失败,并且不会呈现任何标记(如果区域不包含块,则会发生这种情况)


尝试将region.tpl.php的副本添加到主题中,删除
if($content):
条件,然后刷新Drupal的缓存。

这不仅仅是因为没有为该区域分配任何块,而且几乎可以肯定是因为渲染数组为空。请记住render函数的作用——它对render数组中的任何/所有元素和子元素调用drupal_render,将它们转换为html字符串进行输出。如果没有可渲染元素,则不会返回任何html

渲染这些区域的正确(编程)方法是为每个区域定义一个渲染数组,将#markup元素设置为希望Drupal在那里输出的任何html。这必须在自定义模块中完成


如果您只需要从gui执行此操作,那么除了定义幻影块之外,我看不到任何其他方法。在这种情况下,你可能应该重新考虑你想要实现的目标

您可以确保Drupal使用以下代码(在自定义模块中)渲染每个区域:

您需要将区域_1、区域_2、区域_3替换为要确保始终渲染的区域的名称


要稍微解释一下代码,如果blocks数组的计数为1,则表示该数组为空,因为它将始终包含#sorted属性。

您使用的Drupal版本是什么?我使用的是7.2.x版本。有关其他答案,请参阅:否,这不是原因,因为我已经为该区域编写了自己的模板,并且它没有这样的条件。我认为原因是,我在这个区域内没有块,这导致drupal在调用render($page['region_name'))时不渲染该区域;。我可以将虚拟块分配给每个区域,但我不想这样做。如果这是原因,并且您正在寻找快速破解方法,只需将内部语句更改为
$page[$region]=array(“#markup'=>”)
应该让drupal相信有一些事情不足以说服drupal。我想我会创造一些幻影街区。为什么要投否决票?我自己也使用过这段代码,可以验证它是否正常工作。
<?php print render($page['region_name']); ?>
function theme_name_page_alter(&$page) {
    $regions = system_region_list($GLOBALS['theme'], REGIONS_ALL);
    foreach ($regions as $region => $name) {
        if(empty($page[$region])) {
            $page[$region] = array();
        }
    }
}
function hook_page_alter(&$page) {
    foreach($page as $region => $blocks) {
        if(is_array($blocks) && in_array($region, array('region_1', 'region_2', 'region_3'))) {
            if(count($blocks)==1) {
                $page[$region]['phantom_content']['#markup'] = ' ';
            }
        }
    }
}