Drupal*_preprocess与模块

Car*_*arl 2 php themes preprocessor drupal drupal-6

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

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

regions[feeds] = Feeds
Run Code Online (Sandbox Code Playgroud)

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

然后,从另一个模块,"高级前页"模块,我正在尝试将一些PHP添加到此模块中的"首页".高级前端页面模块只允许站点具有登录页面,而不是立即查看其他站点内容的列表等.我已为内容区域启用了PHP,然后添加了以下内容:

<div>
    <?php print $feeds; ?>
</div>
Run Code Online (Sandbox Code Playgroud)

它不打印"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');
}
Run Code Online (Sandbox Code Playgroud)

无论我在哪里放置此文件(template.php或front_page.module),它似乎都没有做任何事情.知道我可能会出错吗?

Hen*_*pel 5

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

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

    主题('块','饲料')

    这将导致Drupal返回给定区域的主题块(在这种情况下为'feeds').请注意,这仍然不是一个好方法,因为即使您不在page.tpl.php中使用该区域,它仍然会为您的网站发出的每个页面请求创建!

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