gpt4 book ai didi

php - Drupal *_preprocess 模块

转载 作者:行者123 更新时间:2023-12-02 07:15:33 26 4
gpt4 key购买 nike

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

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

regions[feeds] = Feeds

从 Administer->Blocks,我已将我想要的 block 添加到新的“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),它似乎都没有执行任何操作。知道我可能哪里出错了吗?

最佳答案

您的问题有几点需要说明:

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

    而不是尝试输出(不可用的)$feed 变量

    主题(' block ','提要')

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

    <

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

关于php - Drupal *_preprocess 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1354475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com