1

我正在玩 Drupal,我正在尝试在站点口号中添加第二行。以下是我正在工作的 page.tpl.php 部分。

<?php if ($site_name || $site_slogan): ?>
    <div id="name-and-slogan" class="hgroup">
        <?php if ($site_name): ?>
            <h1 class="site-name">
                <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>">
                    <?php print $site_name; ?>
                </a>
            </h1>
        <?php endif; ?>
        <?php if ($site_slogan): ?>
            <p class="site-slogan"><?php print $site_slogan; ?></p>
        <?php endif; ?>
        <?php
            /* ADDED */
            $node = menu_get_object();
            $siteslogan2 = field_get_items('node', $node, 'field_siteslogan2');
        ?>
        <?php if ($siteslogan2): ?>
            <p class="site-slogan2"><?php print $siteslogan2; ?></p>
        <?php endif; ?>
    </div>
<?php endif; ?>

我基本上添加了一个新的内容类型,其中包含一个名为 siteslogan2 (field_siteslogan2) 的字段,现在我想在这里检索并显示它。第一个问题是 $node 变量没有定义(即使根据文档它应该是)。第二个问题是我EntityMalformedException: Missing bundle property on entity of type node. in entity_extract_ids()手动定义并运行它时收到的。

首先,这是解决问题的正确方法吗?其次,为什么我会收到 EntityMalformedException 以及如何修复它?


var_dump($node)产生 NULL。一定是我获取$node内容的方式不好。当文档说:

$node:节点对象,如果有与页面关联的自动加载节点,节点ID是页面路径中的第二个参数(例如node/12345和node/12345/revisions,但不是comment/reply/ 12345)。

4

1 回答 1

1

可以使用主题的 template.php 中的预处理函数来定义和设置 $varables 数组中的变量来完成这类事情。

然后,此变量可用于您已对其进行预处理的任何模板(页面、节点、表单等)。您的主题的 template.php 文件很可能对如何执行此操作有评论。

例如,在 template.php 中执行此操作会创建或修改变量 $display_header 的值,使其可用于 node.tpl.php

function yourthemename_preprocess_node(&$variables, $hook) {
  $variables['display_header'] = false;
}

然后,您可以修改节点模板文件以使用此变量。

对于像子标语这样简单的东西,您可以向主题添加设置,因此它会像任何其他主题设置一样显示在主题的配置页面上。

这需要在主题的 theme-settings.php 中实现此功能:

function yourthemename_form_system_theme_settings_alter(&$form, $form_state) {}

这为设置表单提供了有关新设置的信息。像这样:

https://api.drupal.org/api/drupal/modules!system!theme.api.php/function/hook_form_system_theme_settings_alter/7

希望这足以让你开始。

于 2013-06-28T10:53:51.360 回答