0

Создание подтемы в Drupal 7's page.tpl.php и необходимость вытягивать значение (обычный текст) из field_EXAMPLE из пользовательского типа контента за пределами того места, где остальная часть контент будет нормальным.Добавление поля из узла в page.tpl.php, drupal 7

<!-- Adding $title as normal--> 
    <?php print render($title_prefix); ?> 
     <?php if (!empty($title)): ?> 
      <h1><?php print $title; ?></h1> 
     <?php endif; ?> 
    <?php print render($title_suffix); ?> 

<!-- THE ISSUE: Adding field_EXAMPLE --> 
    <h2> <?php print render($field_EXAMPLE;);?> </h2> 
    ... 
<!-- Where the rest of the content loads by default --> 
    <div><?php print render($page['content']); ?></div> 

Будет field_get_items Работает?

function field_get_items($entity_type, $entity, $field_name, $langcode = NULL) { 
    $langcode = field_language($entity_type, $entity, $field_name, $langcode); 
    return isset($entity->{$field_EXAMPLE}[$langcode]) ? $entity->{$field_name}[$langcode] : FALSE; 
} 

Или это?

$node = node_load($nid); 
$node->field_EXAMPLE[$node->language][0]['value']; 

ли я поставить это в page.tpl.php? Пробовал, но не кубиками. -Novice

Здесь находится var_dump (get_defined_vars());

   ["field_thestring"]=> 
       array(1) { 
       ["und"]=> 
       array(1) { 
        [0]=> 
        array(3) { 
        ["value"]=> 
        string(44) "This is a string of text please refer to me " 
        ["format"]=> 
        NULL 
        ["safe_value"]=> 
        string(44) "This is a string of text please refer to me " 
        } 
       } 
       } 
+0

только кончик ... существует функция 'get_defined_vars()', которые могут быть использованы, чтобы увидеть, какие переменные доступны в TPL файле. поэтому, если у вас есть модуль devel, вы можете поместить 'dpm (get_defined_vars())' в tpl-файл и перезагрузить страницу, чтобы получить список всех переменных. – 2pha

ответ

0

Давайте предположим, что вы создали поле с именем field_thestring, что вы хотите, чтобы сделать для содержания тип article страница в месте за пределами THEME 's вне того, где размещается содержимое страницы.

Шаг 1. Скопируйте страницу page.tpl.php. и переименуйте его page--article.tpl.php.

Шаг 2.В page.var.php,

function THEME_preprocess_page(&$variables) { 

// To activate page--article.tpl.php 
if (isset($variables['node']->type)) { 
$nodetype = $variables['node']->type; 
$variables['theme_hook_suggestions'][] = 'page__' . $nodetype;  
} 

// Prevent errors on other pages 
if ($node = menu_get_object()) { 

if (!empty($node) && $node->type == 'article') { 
$fields = field_get_items('node', $node, 'field_thestring'); 
$index = 0; 
$output = field_view_value('node', $node, 'field_thestring', $fields[$index]); 
$variables['thestring'] = $output; 
} 
else{ 
$variables['thestring'] = 'Angry Russian: How this error?'; 
} 
} 
} 

Шаг 3. В page--article.tpl.php добавить <?php print render($thestring); ?>

Изначально я хотел требовать от всех типов контента, чтобы иметь другое поле, так как все типы контента имеет заголовок. Понял, что это не отличная идея для дальнейшего развития.

Source

0
$node = node_load($nid); 
$example_value = $node->field_EXAMPLE[$node->language][0]['value']; 

<h2> <?php print $example_value;?> </h2> 

или

$node = node_load($nid); 
$values = field_get_items('node', $node, 'EXAMPLE'); 
if ($values != FALSE) { 
    $val = $values[0]['value']; 
} 
else { 
    // no result 
} 
<h2> <?php print $example_value;?> </h2> 
+0

Я сомневаюсь, что узел должен быть загружен, поскольку он, вероятно, уже находится в переменной. См. Мой комментарий о функции 'get_defined_vars()' выше. – 2pha

+0

В соответствии с вопросом BVSK необходимо вывести значение поля другого узла в page.tpl. Поэтому необходим узел загрузки. –

+0

@VivekKumar Я получаю сообщение об ошибке 'Undefined variable: nid в THEME_preprocess_page()' в 'page.tpl.php' для этой строки' $ node = node_load ($ nid); ' – BVSK

0

Вы можете разместить свой код непосредственно в шаблон страницы, но вы также можете поместить его в страницу Preprocess крюк, установить переменную шаблона и использовать эту переменную из вашего шаблон страницы:

https://api.drupal.org/api/drupal/includes%21theme.inc/function/template_preprocess_page/7.x

Это своего рода способ очистки, но и Shoul d работать.

Кроме того, попробуйте удалить кэш Drupal, если вы не сразу увидите свое изменение на интерфейсе.

И для получения попытки узла:

global $node; 
$nid = $node->nid; 
$node = node_load($nid); 
... 

И если это не сработает, попробуйте следующее:

if ($node = menu_get_object()) { 
     // Get the nid 
     $nid = $node->nid; 
     $node = node_load($nid); 
     ... 
    } 

или таким образом:

if (arg(0) == 'node' && is_numeric(arg(1))) { 
    // Get the nid 
    $nid = arg(1); 
    $node = node_load($nid); 
    ... 
} 
+0

Не нравится '$ nid = $ node-> nid;'. Примечание. Попытка получить свойство не-объекта в 'THEME_preprocess_page()' – BVSK

+0

Итак, попробуйте другие варианты. Сначала получите идентификатор узла, а затем загрузите его самостоятельно, если вам это нужно. – MilanG

0

Вы можете использовать препроцесс для добавления значения в переменные $, переданные в шаблон

https://api.drupal.org/api/drupal/includes%21theme.inc/function/template_preprocess_page/7.x

В template.php:

MYTHEMENAME_preprocess_page(&variable){ 
$values = current(field_get_items('node', $variable['node'],'field_machine_name')); 
$variable['myvar'] = $values['value']; 
} 

В вашем template.tpl.php

echo $myvar; // contains your value 

 Смежные вопросы

  • Нет связанных вопросов^_^