web-dev-qa-db-ja.com

drupal画像フィールドを出力するにはどうすればよいですか?

drupal(7)内に既に存在する関数の名前を見つけるための助けを探しているだけかもしれませんが、ドキュメントをナビゲートするのが少し難しい場合があります。私。

カスタムフィールドを持つノードがあります。

私はテンプレート_field--mycustomcontenttype.tpl.php_内で作業しているので、画像スタイルの出力と画像フィールドを持つPHP関数の名前を見つけようとしています。

mycustomcontenttypeは、次の追加フィールドを持つノードです。

_[field_image] => Array
(
    [und] => Array
    (
        [0] => Array
        (
            [fid] => 51
            [alt] => ImageAltText
            [title] => 
            [width] => 150
            [height] => 150
            [uid] => 29
            [filename] => myimagename.jpg
            [uri] => public://myimagename.jpg
            [filemime] => image/jpeg
            [filesize] => 8812
            [status] => 1
            [timestamp] => 1339445372
            [uuid] => a088ea8f-ddf9-47d1-b013-19c8f8cada07
            [metatags] => Array
        (
    )
)
_

したがって、could _$item['#options']['entity']->field_image_で見つかった値を取り、実際のサーバーパスの_public://_の置換を行う(ugい)ハンドロール関数を使用してイメージを表示します。また、正しいdrupal画像スタイル(サムネイル、カスタムスタイルなど)で画像をロードすることもできます。

悲しいことに、私はただunknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail');のような機能をする関数の名前が何なのかわかりません。

これを見つけるのを手伝ってくれる人はいますか?

20
Alex C

あなたが探している image_style_url(style_name, image_url);

例えば:

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>

[〜#〜] edit [〜#〜]

指摘したように、コンテンツタイプの[表示の管理]ページで画像スタイルを設定し、レンダリングを使用して出力することもできます。

<?php print render($content['field_image']); ?>
23
SpaceBeers

field_get_itemsfield_view_value の組み合わせを使用してこれを行います。

例えば:

    <?php

    // In some preprocessor...
    $images = field_get_items('node', $node, 'field_image');
    if(!empty($images)) {
      $image = field_view_value('node', $node, 'field_image', $images[0], array(
        'type' => 'image',
        'settings' => array(
          'image_style' => 'custom_image_style' // could be 'thumbnail'
        )
      )
     );
    }
    $variables['image'] = $image;

    // Now, in your .tpl.php
    <?php print render($image); ?>

私は、フィールドアクセスと、まさにこのことについて書いています here

幸運を。

14
mavame

SpaceBeersの答えは正しいです-あなたはそのように画像を印刷することができます。しかし、Drupal側では、悪い。言語が未定義で、複数値フィールドの場合は最初のフィールドのみを直接使用している。また、DrupalのニースなものUIを使用して画像スタイルを変更します。

<?php print render($content['field_image']); ?>

これにより、イメージが適切なサイズ(imgタグ内)、altタグで印刷され、mycustomcontenttypeノードタイプの[表示の管理]タブで設定した内容が常に尊重されます。

12
Ayesh K

私はこれを使用します:

print theme('image_style', array('path' => [image uri from field], 'style_name' => [image style]));

また、クラス、alt、タイトルの要素を含む「attributes」配列変数を含めることもできます。これは、Drupal(またはテーマ)のデフォルトの画像レンダリングを使用しながら、画像スタイルの選択を可能にするためのより良いオプションだと思います。

8
Heather Gaye

あなたが使用する必要があります

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['uri']).'" />'?>

の代わりに

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>
3
Denis

Ayesh Kの答えは、フィールドをページに印刷するのに好ましいDrupalの方法です。はるかに読みやすく、UIで画像に対して行った操作/プリセットを保持します。

あなたはそれを分割することができますが、それは狭いユースケースのためになるようです。

1
ricardoom
<?php
global $base_url;
$nid=6;//node id
$node=node_load($nid);
echo '<div style="margin-right:350px;">';
echo "<Marquee>";
foreach($node->field_image_gallery['und'] as $v){
$image=$v['uri'];
$image_path=explode("public://",$image);
$url_path=$base_url.'/sites/default/files/'.$image_path[1];
echo '<img src="'.$url_path.'" width="100" height="100">&nbsp;';
 }

echo "</Marquee>";
echo "</div>";
?>
1
gangadhara
 $field_image = field_view_field('node', $promoNode, 'field_image');
 $variables['promo_image'] = render($field_image);

レンダリング:

<div class="field field--name-field-image field--type-image field--label-above">
  <div class="field__label">Image:&nbsp;</div>
  <div class="field__items">
      <div class="field__item even">
        <img typeof="foaf:Image" 
             src="http://domain/sites/domain/files/promo1.png"
             width="360" 
             height="301"
             alt="Promotional Image"
             title="Promotional Image Title">
      </div>
  </div>
</div>

注:Labelをに設定することで、フィールドのコンテンツタイプのManage-Display設定でlabel-aboveクラスを削除できますが、現在は機能しないため、CSSを使用して単にを非表示にします。 field__labelクラス。

0

これはそのようにすることができます:

   $style='full_width';
   $path=$node->my_img_field['und']['0']['uri'];
   $style_url = image_style_url($style, $path);
   print "<img src=".file_create_url($style_url)." >";
0
Matoeil