2013-06-27 2 views
1

Я играю с Drupal, и я пытаюсь добавить вторую строку к слогану сайта. Ниже приведен фрагмент страницы.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, что не очень хорошо. Док немного загадочный для меня, когда он говорит:

$ узел: Объект узла, если есть автоматически загружен узел, связанный со страницей, а идентификатор узла является вторым аргументом в пути на страницах (например, узел/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

Надеется, что этого достаточно, чтобы вы начали.