我在drupal的第一个站点上工作,我也阅读了主题和模块开发的一些基础知识。 现在,我创建(覆盖stark主题)我自己的主题,即page.tpl.php,并且有一个theme()函数用于输出主菜单项:

 <?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数组中,并且可以根据需要对其进行样式化,因此page.tpl.php theme()函数的用途是什么?

#1楼 票数: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')));
}

然后只需print $main_menu; 在您的page.tpl.php中。

#2楼 票数:2

使用theme('links__system_main_menu', ...)是重新使用该主题的现有通用links主题实现。 system_main_menu后缀(在两个_之后)允许您提供通用links的更具体的实现。 然后,如果您覆盖首页的页面模板(即page-front.tpl.php )和特定内容的节点的页面模板,则不必重复HTML代码。 由于您不必将更改复制到多个文件,因此使维护更容易。

#3楼 票数:0

关键是,如果您通过drupal的主题系统,它将为其他已安装的模块提供机会进行更改-它们的hook函数将被称为:

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

换句话说,如果您不以“干净”的方式进行操作,则可能会发生其他模块的功能无法使用的情况。

  ask by Incredible translate from so

未解决问题?本站智能推荐:

4回复

Drupal基本页面似乎不使用page.tpl.php

标题说的真的。 在Drupal中创建的基本页面似乎没有使用page.tpl.php文件作为模板。 如果我编辑html.tpl.php文件,这些更改将应用​​于每个页面,并且在加载基本页面时会导致错误。 我也尝试过复制page.tpl.php文件并将其命名为page—basic-pa
2回复

从page.tpl.php访问html.tpl.php变量

问候,我被困在page.tpl.php中访问html.tpl.php的$ scripts变量,如何访问该变量? 我正在使用Drupal 7 请帮忙。 提前致谢。
2回复

如何使用drupal 7在page.tpl.php中显示图像[关闭]

我有主题它是名称(汽车),并在page.tpl.php中有图像链接,我想以简短的方式显示这个图像任何人都可以帮助我...这方面的大多数node.tpl.php但我需要使用page.tpl.php显示图像 我尝试在template.php文件中添加此代码 然后像这样打印路径,但仍然
1回复

Drupal 7:在page.tpl.php中调用“菜单块”

我已经安装了菜单块模块; 我通过块页面上的“添加菜单块”创建了一个第二级菜单作为块,并将其分配给了内容区域。 它在页面内容的末尾显示菜单块,但是我需要在页面标题之后。 如何将菜单栏移动到页面标题的正下方? 有什么方法可以将此菜单块调用到page.tpl.php中,以便可以将其放在页面
2回复

Drupal 7:访问page.tpl.php中的自定义节点字段

我在页面内容类型中添加了一个新字段“mood”(图像)。 有没有办法访问page.tpl.php中存储在此字段中的图像?
4回复

将节点中的字段添加到page.tpl.php,drupal 7

在Drupal 7的page.tpl.php创建一个子主题,并需要从自定义内容类型的field_EXAMPLE提取值(纯文本),而其余内容通常不在此范围内。 field_get_items工作吗? 或这个? 我是否将此放在page.tpl.php ? 尝试过但没有骰子。
1回复

为Drupal 7页面回调自定义page.tpl.php以通过AJAX提供表单时遇到麻烦

我正在创建一个自定义模块。 我想实现一种可以用作块的形式,并可以在查询对话框(与ajax请求一起加载)中使用。 我创建的块没问题。 我也创建了页面回调函数,没问题。 因此,我可以将表单加载到一个块中,然后可以拉起jquery对话框,它将通过ajax请求获得表单。 但是,它会加载表单
1回复

如何使用theme_preprocess_page更改链接

我有一个名为type1的内容类型,此内容类型有一个名为image1的图像字段。 我想将image1的链接URL更改为某些内容。 我该如何使用heme_preprocess_page或其他任何方法。 谢谢