3

我是 Drupal 开发的新手,正在尝试将现有的区域变量添加到我的模块的预处理器函数中。

基本上,我为我的网站创建了一个新区域(这是我主题的 .info 文件中的定义):

regions[feeds] = Feeds

从 Administer->Blocks,我已将我想要的块添加到新的“Feeds”区域。

然后,从另一个模块,“高级首页”模块,我试图在这个模块内的“首页”中添加一些 PHP。Advanced Front Page 模块只允许站点有一个登录页面,而不是立即查看其他站点内容的列表等。我为内容区域启用了 PHP,然后添加了以下内容:

<div>
    <?php print $feeds; ?>
</div>

它不打印“Feeds”区域,我相信这是因为无法从 page.tpl.php 文件外部访问该区域变量。所以环顾四周后,我发现了这些链接:

http://drupal.org/node/223430

http://drupal.org/node/237391

从那里,我尝试为模块“Advanced Front Page”添加一个预处理器函数,该模块的模块名称为“front_page”(或者可能只是“front”,我不是 100% 确定)。这是我的预处理器函数,我尝试将其添加到我的 template.php 文件和 /modules/front/front_page.module 文件(请注意,不是同时):

function front_preprocess(&$vars)
{
 $vars['feeds'] = theme('blocks', 'feeds');
}

不管我把这个文件(template.php 或front_page.module)放在哪里,它似乎都没有做任何事情。知道我哪里可能出错了吗?

4

2 回答 2

6

您的问题有几点需要解决:

  1. 我第二个 googletorps 的答案是你应该以不同的方式处理这个问题。
  2. 这些*_preprocess函数只能用于操作/注入模板或主题函数的变量,例如 page.tpl.php、node.tpl.phptheme_links()等。由于 front_page 模块不使用主题函数或(特殊)模板进行渲染它的输出,您不能通过*_preprocess函数在其中创建 $feed 变量。
  3. 旁注:对于*_preprocess函数,命名至关重要。您需要使用确切的模块名称或主题名称作为函数名称的前缀,具体取决于您声明它的位置。所以在你的例子中,如果你想给模块添加一个预处理函数,你会在它前面加上'front_page_',如果你把它添加到你的主题 template.php ,你会添加'yourThemeName_'.
  4. 可以通过直接从您的首页内容区域中的代码创建块来实现您想要的。与其尝试输出(不可用)$feed 变量,不如调用:

    主题(“块”,“提要”)

    这将导致 Drupal 返回给定区域的主题块(在本例中为“提要”)。请注意,这仍然不是一个好方法,因为即使您不使用 page.tpl.php 中的区域,它仍然会为您网站的每个页面请求创建!

所以我会接受 googletorps 的建议,只有在还有其他用途的情况下才添加新区域。如果我只是想在首页添加一些块,我不会创建新区域,而是将块配置为在内容区域中显示,并简单地将它们限制为仅<front>在其可见性设置中显示。

于 2009-08-31T12:10:48.867 回答
3

我没有尝试过高级首页模块,但是在处理区域时,你不应该做你做过的事情。这有点hacky,实际上不需要。我不知道模块如何挂钩到模板系统,但你的问题可能是让区域变量进入它的范围。但是,不要尝试使用该模块将该区域放入首页,而应将其放入您的 page.tpl.php。你实际上可以做你第一次尝试的事情,但我建议你像这样改变它:

<?php if ($feeds): ?>
<div id="feeds">
    <?php print $feeds; ?>
</div>
<?php endif; ?>

我在两个方面有所改进。

  1. 通过添加 if 语句,您不会添加空标记。因此,如果 $feeds 不包含任何内容,您将不会得到一个空的 div。
  2. 将 id 添加到区域是一个好主意。它使它们或它们的内容的样式更容易,它还为您的页面添加了 html 的语义。

现在,如果您只希望您的块显示在首页,您可以在每个块设置中进行设置。因此,您可能只使用已经存在的区域,除非您希望您的块显示在现有区域之外。添加区域时,仅将区域添加到单个页面不是一个好习惯,而是控制何时显示其内容要好得多。可能您不需要创建新区域,而只需使用已创建的区域即可。此外,如果您想对首页进行一些模板更改,您还可以创建 front-page.tpl.php 如果您愿意,您可以在其中为您的首页创建不同的模板布局。

于 2009-08-31T06:11:54.237 回答