将节点中的字段添加到 page.tpl.php,drupal 7
Add a field from a node into 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 "
}
}
}
$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'];
}
在你的template.tpl.php
echo $myvar; // contains your value
假设您创建了一个名为 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); ?>
最初,我想要求所有内容类型都有另一个字段,因为所有内容类型都有一个标题。确定这不是进一步开发的好主意。
在 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 "
}
}
}
$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'];
}
在你的template.tpl.php
echo $myvar; // contains your value
假设您创建了一个名为 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); ?>
最初,我想要求所有内容类型都有另一个字段,因为所有内容类型都有一个标题。确定这不是进一步开发的好主意。