将节点中的字段添加到page.tpl.php,drupal 7中

时间:2016-10-24 19:49:33

标签: drupal drupal-7 drupal-theming drupal-fields drupal-entities

在Drupal 7的field_EXAMPLE中创建一个子主题,并且需要从<!-- 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> 中提取自定义内容类型的值(纯文本)。 / p>

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

我把它放在 ["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 " } } } 中吗? 试过但没有骰子。 - 服务

这是var_dump(get_defined_vars());

.data-box {position:relative; display:inline-block;}
.logo {position:relative;}
.color-image {position:absolute; top:0; left:0; bottom:0; right:0; opacity:0.5;}
.data-name {position:absolute; left:0; right:0; bottom:5px; text-align:center;}

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您可以将代码直接放入页面模板中,但也可以将其放在页面预处理挂钩中,设置模板变量并使用页面模板中的变量:

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

它有点干净,但两者都应该有用。

另外,如果您没有立即在前端看到更改,请尝试删除Drupal的缓存。

要获取节点ID,请尝试:

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);
  ...
}

答案 2 :(得分: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

答案 3 :(得分:0)

让我们假设您创建了一个名为field_thestring的字段,您想要在article&#39;之外的位置为内容类型THEME页面呈现该字段。在页面内容呈现的位置之外。

步骤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