节点模板中的图像

时间:2012-06-22 12:36:15

标签: drupal drupal-7

我正在使用drupal 7.x并且正在创建节点内容类型模板。我的内容类型有多个自定义字段,包括图像字段。我试图将图像字段及其属性添加到节点模板。我可以使用

显示图像

print render($content['field_custom_image'][0])

但是我也想显示文件名和标题文本。我尝试过下面的代码,但它没有显示任何内容。

print render($content['field_custom_image'][0]['und']['title'])

在Drupal 6中,我可以使用以下方式使用它:

print $node->field_custom_image[0]['data']['description']

执行print_r($node)时的输出如下。

[field_reclaimer_image] => Array ( [und] => Array ( [0] => Array ( [fid] => 8 [alt] => [title] => test title [width] => 1117 [height] => 651 [uid] => 1 [filename] => 24-1033_angle_02_1339771175.jpg [uri] => public://images/24-1033_angle_02_1339771175.jpg [filemime] =>…

2 个答案:

答案 0 :(得分:1)

你可以这样做:

echo $node->field_custom_image['und'][0]['filename'];

echo $node->field_custom_image['und'][0]['title'];

und和0是错误的方式。如果你将print_r()包裹在<pre>标签中,你会看到一个更加格式化的数组,这个数组更容易阅读。

答案 1 :(得分:1)

如果您有权访问节点对象,则应使用field_get_items(),它根据字段将使用的语言(通常是与节点关联的语言)返回字段的值。我将使用以下代码来打印第一张图像中的信息。

$values = field_get_items('node', $node, $field_name);
if (!empty($values)) {
  print $values[0]['title'];
  print $values[0]['description'];
}
在这种情况下,

render()不是必需的,因为您正在渲染字符串。在这种情况下,函数的作用就是返回作为参数传递的值。

function render(&$element) {
  if (is_array($element)) {
    show($element);
    return drupal_render($element);
  }
  else {
    // Safe-guard for inappropriate use of render() on flat variables: return
    // the variable as-is.
    return $element;
  }
}

如果您尝试渲染的值可能是字符串或渲染数组,那么使用render()更合适。

我在测试网站上尝试了以下代码。我加载的节点包含一个图像字段。

$node = node_load(8);
$values = field_get_items('node', $node, 'field_image');

dsm($values);

dsm()显示的是以下内容。

screenshot

返回的数组可以包含多个元素,具体取决于字段设置。准备好处理多个图像。

使用field_get_items(),您无需处理该语言。对于某些字段,语言ID可以是“und”,用于具有不依赖于语言的值的字段;对于其他字段,要使用的正确值可以是为节点设置的值。

还要考虑有些模块可以改变与字段关联的值,并且使用“und”不一定是正确的事情,对于那些包含“und”数组索引的有效值的字段也是如此。