-1

私はdrupal7.xを使用しており、ノードコンテンツタイプのテンプレートを作成しています。私のコンテンツタイプには、画像フィールドを含む複数のカスタムフィールドがあります。imagefieldとその属性をノードテンプレートに追加しようとしています。を使用して画像を表示できます

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]=>…
4

2 に答える 2

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」を使用することは必ずしも正しいことではありません。

于 2012-06-22T14:47:58.353 に答える
1

これは次のように行うことができます。

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

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

und と 0 は逆です。print_r()inタグをラップすると<pre>、はるかに読みやすい、より適切にフォーマットされた配列が表示されます。

于 2012-06-22T12:39:30.120 に答える