【问题标题】:Why should I use theme() function in page.tpl.php?为什么要在 page.tpl.php 中使用 theme() 函数?
【发布时间】:2015-03-30 21:10:33
【问题描述】:

我正在使用 drupal 开发我的第一个站点,并且我还阅读了一些主题和模块开发的基础知识。现在我正在创建(覆盖鲜明的主题)我自己的主题,即 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() 函数有什么用?

【问题讨论】:

    标签: drupal drupal-7 drupal-theming


    【解决方案1】:

    为什么要在 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 中简单地print $main_menu;

    【讨论】:

    • Answer 可能无法提供 OP 要求的内容,但他现在需要知道的内容。加 1 用于指出 Drupal 中的良好实践。
    • 它不起作用 - 我将该函数添加到 template.php 并且 print $main_menu 正在返回“Array”字符串。顺便提一句。 $main_menu 已在 page.tpl.php 中定义,如注释所述: * - $main_menu (array): 一个包含主菜单链接的数组
    • 你能在你的template.php中搜索main_menu吗?它应该在那里定义,因为这个变量在您的 page.tpl.php 中可用。您应该找到它的定义位置并覆盖它。
    • 顺便问一下,你的主题的 page.tpl.php 是从哪里得到的?据我所知,Stark 主题没有模板文件。
    • Stark 没有默认的 page.tpl.php 文件,因此使用 modules/system 文件夹中的 page.tpl.php,这就是我复制/粘贴模板的地方。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      关键是,如果您使用drupal 的主题系统,它会给其他已安装的模块一个机会来进行更改——它们的钩子函数将被调用:

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

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

      【讨论】:

        猜你喜欢
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 2015-09-22
        • 2014-03-07
        • 2020-11-25
        • 2011-06-13
        • 1970-01-01
        相关资源
        最近更新 更多