我正在使用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] =>…
答案 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()
显示的是以下内容。
返回的数组可以包含多个元素,具体取决于字段设置。准备好处理多个图像。
使用field_get_items()
,您无需处理该语言。对于某些字段,语言ID可以是“und”,用于具有不依赖于语言的值的字段;对于其他字段,要使用的正确值可以是为节点设置的值。
还要考虑有些模块可以改变与字段关联的值,并且使用“und”不一定是正确的事情,对于那些包含“und”数组索引的有效值的字段也是如此。