2013-06-27 40 views
1

我正在玩Drupal,我试图添加第二行到网站的口号。 以下是我工作的page.tpl.php文件。EntityMalformedException当检索Drupal 7自定义字段

<?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是页面路径中的第二个参数(例如,节点/ 12345和节点/ 12345 /修订,但不是评论/回复/ 12345)。

+0

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

回答

1

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

然后,该变量可用于您已完成预处理的任何模板(页面,节点,表单等)。你的主题的template.php文件很可能会有如何做到这一点的意见。

例如,在template.php文件做这个创建或修改变量$ display_header的价值,使其可用于node.tpl.php

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

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

对于简单的子口号来说,您可以在主题中添加设置,以便像主题设置一样显示在主题的配置页面上。

这需要实现在你的主题的主题的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

希望这足以让你开始。