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



在Drupal 7的page.tpl.php中创建一个子主题,并需要从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>

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中吗?试过了,但没有掷骰子-新手

这里是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 "
                  }
                }
              }

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

步骤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); ?>

最初,我想要求所有内容类型都有另一个字段,因为所有内容类型有一个标题。确定这不是一个进一步发展的好主意。

$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>

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

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

您可以使用预处理将值添加到传递给模板的$variables中

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'];
}

在您的模板.tpl.php 中

echo $myvar; // contains your value

相关内容

  • 没有找到相关文章

最新更新