检索Drupal 7自定义字段时的EntityFormedException
我正在和Drupal一起玩,我正在尝试在网站的标语中添加第二行。 下面是我工作的page.tpl.php的一部分检索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">
<?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变量。(获取变量()