記事/エンティティから画像を取得する


8

Drupal 8に含まれている記事のコンテンツタイプから画像(パス)を最も簡単に取得するにはどうすればよいですか?

私が持っているのは実体です。と$image = $node->fields['field_image']はいえ、構造の地獄を私に与えます。

画像パスを取得する簡単な方法はありませんか?また、これでURLが見つかりません。得られるのは、ある種のtarget_id(ファイルID)です。


何がget_class ($node->fields['field_image'])あなたに何を与えるのですか?
クライブ

Drupal \ file \ Plugin \ Field \ FieldType \ FileFieldItemListは、Drupal \ file \ Plugin \ Field \ FieldType \ FileFieldItemListを提供します。これには、アップロードが許可されているプロパティのみが含まれているようです。
Undrium

リストを反復する場合、そのメンバーはどのタイプですか?チェックはしていませんが、フィールドのタイピングがある程度強力であることを期待しています。他のすべてが失敗した場合は、使用file_load()可能な方法の1つを使用できますDrupal\file\FileInterface
Clive

Drupal \ image \ Plugin \ Field \ FieldType \ ImageItemが得られますが、適切に処理する方法がわかりません。
Undrium 14

file_loadは最後の手段ですが、価格が下がっており、かなり間違っていると感じています。
Undrium 14

回答:


17

以前はこれを見なかった。

単一値フィールドの参照エンティティを取得する最短の方法は次のとおりです。

$node->field_image->entity->url()

デルタを明示的に指定することもできます。

$node->field_image[0]->entity->url()

これは、多くのArrayAccessおよび__get()マジックで機能します。

http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheetの優れたチートシートも参照してください。詳細については、https://www.drupal.org/node/1795854とその他のドキュメントページをご覧ください(まだ非常に多くの作業が進行中です)。


いいね!どうやって画像を代替できるのかと思っていました。$ node-> field_image [0]-> entity-> altと$ node-> field_image [0]-> entity-> image-> altを試しました。あなたが言及したドキュメントで見つけましたが、私が思うノードエンティティでは動作しません。
Hedeshy

1
alt / titleは参照ファイルエンティティではなく、フィールドアイテム自体にあります。$ node-> field_image [0]-> altだけで問題なく動作します。
Berdir 2018

3

D8で私のために働いたのは次のとおりです。

$imageUrl = $node->get('field_image')->entity->uri->value;

kint($node->get('field_image')->entity)配列の使用と確認は非常に役に立ちました

ここに画像の説明を入力してください

次に、私が使用した小枝ファイルで:

<img class="top-article-image" src="{{ file_url(imageUrl) }}" />

1

したがって、私の解決策は、nodeobjectにある "referencedEntities()"メソッドを使用することでした。これにより、反復可能なFile-objectsの配列が得られ、有効なパスを取得するためにファイルオブジェクトからメソッド「url()」を使用できます。


0

ノードに複数の画像がある場合、これを使用して画像のURLの配列を取得できます(他の多くの便利なものの中でスライドショーモジュールを作成するのに役立ちます)

$allImagesFound = false;
$imageUrls = array();
$numberOfImages = 0;
while(!$allImagesFound)
{
    //make sure we are not calling a null value, if so then we have found all images
    if($node->get('your_image_field_name')[$numberOfImages] != null) {
        $imageUrls[] = $node->get('your_image_field_name')[$numberOfImages]->entity->url();
        $numberOfImages++;
    } else {
        $allImagesFound = true;
        break;
    }
}

imageUrls配列は、nodesフィールドに関連付けられた画像のすべてのURLを保持します。お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.