ブログ投稿が一覧表示されたときに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
それはあなたのimagefieldの構造についてすべてです。自動的に0のインデックスに移動しますが、その変数のダンプを実行すると、配列内の間違った位置にいたことに気付くでしょう。ループするか、レンダリングする非常に特定の要素をターゲットにする必要があります。
このドキュメントのコメントで詳細を確認し、例に合わせて変更してください。 :)
そのため、これを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;
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'])); ?>" />
ブログのティーザーのテーマを設定するために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>