我正在和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 var(即使根据它应该是documentation)。第二个问题是,当我手动定义并运行它时,我收到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 / revision,但不是注释/答复/ 12345)。
答案 0 :(得分: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) {}
这为有关新设置的设置表单提供了信息。像这样:
希望这足以让你开始。