web-dev-qa-db-ja.com

ビュー内の画像パスを取得するにはどうすればよいですか?

2つのフィールドを持つコンテンツタイプを作成しました。

  1. 題名
  2. 画像(複数画像フィールド)

次に、同じページビューを作成します。これら2つのフィールドが追加されました。ここで、ビューの外部テーマを作成する必要があります。ビュー-テーマ情報-行スタイルの出力から、view-tpl.phpテンプレートフォルダーのページ。

私はこの見方でこのデザインを与えました:

<style type="text/css">
    .imgStyle
    {
        width:100px;
        height:100px;
        border:3px solid grey;
    }
</style>

<img id="mainImage"" 
     src="images/collection-img/nandikesvara-front-3000-06.png" height="500px" width="540x"/>
<br />
<div id="divId" onclick="changeImageOnClick(event)">
    <img class="imgStyle" src="images/collection-img/nandikesvara-front-3000-06.png" />
    <img class="imgStyle" src="images/collection-img/nandikesvara-back-3000-06.png" />
    <img class="imgStyle" src="images/collection-img/nandikesvara-front-3000-06.png" />
    <img class="imgStyle" src="images/collection-img/nandikesvara-back-3000-06.png" />
    <img class="imgStyle" src="images/collection-img/nandikesvara-front-3000-06.png" />
</div>
<script type="text/javascript">

    var images = document.getElementById("divId")
                         .getElementsByTagName("img");

    for (var i = 0; i < images.length; i++)
    {
        images[i].onmouseover = function ()
        {
            this.style.cursor = 'hand';
            this.style.borderColor = 'red';
        }
        images[i].onmouseout = function ()
        {
            this.style.cursor = 'pointer';
            this.style.borderColor = 'grey';
        }
    }
    function changeImageOnClick(event)
    {
        event = event || window.event;
        var targetElement = event.target || event.srcElement;

        if (targetElement.tagName == "IMG")
        {
            mainImage.src = targetElement.getAttribute("src");
        }
    }
</script>

したがって、画像のsrcで渡すために、1つずつ画像パスをフェッチしたいと思います。私はこれを試しました$fields['image']->contentですが、画像をオブジェクトとして印刷します。 srcタグで渡す画像のパスを取得するにはどうすればよいですか。

1
Pratish Jha

Drupal 7の使用例は次のとおりです。

field_get_items()ノードからフィールドを選択するには、

file_load()は画像ファイルをロードします。

image_load()画像ファイルからURIを取得します

image_style_url()は、コンテキストごとに異なる方法で画像をフォーマットします

...おまけとして、適切なデータを確認し、フィールド画像が良くない場合はデフォルトの画像に置き換えます。

// If there is a field image.
if (!empty($node->field_image)) {
  $field = field_get_items('node', $node, 'field_image');
  if (!empty($field[0]['fid'])) {
    $image_file = file_load($field[0]['fid']);
    $image      = image_load($image_file->uri);
  }
}
// If image, then scale it. If not use the default image.
if (!empty($image)) {
  if (is_string($image)) {
    $image_source = $image;
  }
  else {
    $image_source = $image->source;
  }
  $url        = image_style_url('image_style', $image_source);
  $url_mobile = image_style_url('image_style_mobile', $image_source);
}
else {
  $url        = 'https://example.com/sites/default/files/default_image.png';
  $url_mobile = 'https://example.com/sites/default/files/default_image_mobile.png';
}

お役に立てれば。幸運を!

編集: @Kevinは、上記のコメントで非常に優れています。

この複雑さはすべて、エンティティビューモードを使用し、フィールドベースのビューを実行しないことで回避できます。

基本的に、Drupalを使用すると、コンテンツタイプごとに[表示の管理]タブで表示モードを設定できます。そこで、各表示モードで表示または非表示にするフィールドを決定できます。この機能を使用する場合、PHPテンプレートファイルで処理する必要はありません。

1
hotwebmatter

画像(およびファイル)フィールドのURIを取得するには:

$node->field_image->entity->getFileUri();

そして、あなたはあなたの画像のスタイル付けされたインスタンスのURLを取得します:

$bildstyler = ImageStyle::load('thumb');
$bildstyler->buildUrl($node->field_image->entity->getFileUri());
0
Rainer Feike