我为什么要在page.tpl.php中使用theme()函数?

时间:2015-03-30 21:10:34

标签: drupal drupal-7 drupal-theming

我在drupal的第一个网站上工作,我还阅读了一些主题和模块开发的基础知识。现在我正在创建(覆盖鲜明的主题)我自己的主题,即page.tpl.php,并且有一个main()函数被调用以输出主菜单项:

 <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?>

我粗略地了解这个功能是什么,但为什么我应该在这种情况下使用它?如果从模块输出数据 - 通过选定主题对输出进行样式化将是有意义的。但在这种情况下,我需要的所有内容都直接放在$main_menu数组中,我可以根据需要对其进行样式化,那么theme()page.tpl.php函数的用途是什么?

3 个答案:

答案 0 :(得分:3)

  

我为什么要在page.tpl.php中使用theme()函数?

你不应该。

为避免在页面模板中调用theme()函数,可以在template.php中执行此操作:

/**
 * Implements hook_preprocess_page().
 */
function yourtheme_preprocess_page(&$vars) {
  $vars['main_menu'] = theme('links__system_main_menu', array('links' => $vars['main_menu'], 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu')));
}

然后只需在你的page.tpl.php。{/ p>中print $main_menu;

答案 1 :(得分:2)

使用theme('links__system_main_menu', ...)的重点是重用主题的现有通用links主题实现。 system_main_menu后缀(在两个_之后)允许您提供通用links的更具体的实现。如果您覆盖首页的页面模板(例如。page-front.tpl.php)和nodes of a specific content,则不必重复HTML代码。这使得维护更容易,因为您不必将更改复制到多个文件。

答案 2 :(得分:0)

重点是,如果你通过drupal的主题系统,它给其他已安装的模块提供了更改的机会 - 它们的钩子函数将被调用:

https://www.drupal.org/node/933976

换句话说,如果你不“清理”,可能会发生其他模块功能不起作用。

相关问题