检索Drupal 7自定义字段时的EntityFormedException

检索Drupal 7自定义字段时的EntityFormedException,exception,drupal,drupal-7,customization,Exception,Drupal,Drupal 7,Customization,我正在和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">

我正在和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变量没有定义(即使根据应该定义的规则)。第二个问题是,我接收到
EntityFormedException:node类型的实体上缺少bundle属性。在entity_extract_ids()
中,当我手动定义并运行它时

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


var\u dump($node)
生成空值。这一定是我获取$node内容的方式不好。医生说的话对我来说有点神秘:

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


可以使用主题的template.php中的预处理函数来定义和设置$varables数组中的变量

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

例如,在template.php中执行此操作将创建或修改变量$display_头的值,使其可在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) {}
这将向设置窗体提供有关新设置的信息。像这样:


希望这就足够让您开始了。

可以使用主题的template.php中的预处理函数来定义和设置$varables数组中的变量

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

例如,在template.php中执行此操作将创建或修改变量$display_头的值,使其可在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) {}
这将向设置窗体提供有关新设置的信息。像这样:


希望这足以让您开始。

$node仅在您实际查看节点时可用。(例如,在首页上它将不可用。)您会收到错误消息,因为$node对象为空。“站点标语2”是静态文本吗?如果是这样,您应该尝试Drupal变量。(get_variable())$node仅在实际查看节点时可用。(例如,在首页上它将不可用。)您会收到错误消息,因为$node对象为空。“站点标语2”是静态文本吗?如果是这样,您应该尝试Drupal变量。(获取变量()