web-dev-qa-db-ja.com

テンプレート内の複数の画像フィールドの最初をレンダリングする

ブログ投稿が一覧表示されたときに1つの画像を表示するブログページのテンプレートファイルがあります。

私の問題は、元々これが単一の画像フィールド用であったことですが、今度はそれを複数に変更して、行の最初の画像のみをレンダリングしたいと思います。ビューではなく、テンプレートファイル内で実行したいと思います。

<div class="image"><?php print render($content['field_blog_images']); ?></div>

複数の画像フィールドに変更したので、まったく機能しないので、

<div class="image"><?php print render($content['field_blog_images'][0]); ?></div>

役立たず。

適切な手がかり。

B

3
user18400

それはあなたのimagefieldの構造についてすべてです。自動的に0のインデックスに移動しますが、その変数のダンプを実行すると、配列内の間違った位置にいたことに気付くでしょう。ループするか、レンダリングする非常に特定の要素をターゲットにする必要があります。

このドキュメントのコメントで詳細を確認し、例に合わせて変更してください。 :)

https://api.drupal.org/api/drupal/modules!field!field.module/function/field_view_value/7#comment-20069

そのため、これをpreprocess_nodeフックのtemplate.phpに取り込む価値があるので、テンプレートファイルであらゆる種類のクレイジーロジックを実行するわけではありません。

このようなもの:

function mytheme_preprocess_node(&$variables) {
  if($variables['node']->type == 'blog' {
    // My crazy logic to assign my image variable.
    $variables['blog_image'] = render($somevalue);
  }
}

それからあなたのtpl.phpではそれはただです:

print $blog_image;
2
webkenny

Drupal 7 -- https://stackoverflow.com/questions/3463147/getting-the-field-image-path-in-drupal- 7

<img src="<?php echo render(file_create_url($node->field_image['und'][0]['uri'])); ?>" />
1
ChezFre

ブログのティーザーのテーマを設定するためにnot to use Viewsを主張する場合は、 template preprocess_node 関数を使用して、使用するテンプレートファイルのフック候補と変数を作成できます。

例:

/**
 * Override or insert variables into the node template.
 */
function YOURTHEME_preprocess_node(&$variables) {

  $node = $variables['node'];

  // it allows to use templates for the type and view_mode e.g: node--blog--teaser.tpl.php
  $variables['theme_hook_suggestions'][] = 'node__' . $node->type . '__' . $variables['view_mode'];

  // blog teaser
  if ($node->type == 'blog' && $variables['view_mode'] == 'teaser') {
    $images = field_get_items('node', $node, 'field_blog_images');
    if ($images) {
      $blog_image = field_view_value('node', $node, 'field_blog_images', $images[0], 
        array(
          'type' => 'image',
          'settings' => array(
          'image_style' => 'thumbnail',
          'image_link' => 'content',
        ),
      ));
      $variables['blog_image'] = $blog_image; 
    }
  }
}

これで、node--blog--teaser.tpl.phpファイルを使用してブログのティーザーのテーマを設定し、画像を印刷できます。

<div class="image"><?php print render($blog_image); ?></div>
0
Jack-PL