我在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
函数的用途是什么?
答案 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
换句话说,如果你不“清理”,可能会发生其他模块功能不起作用。