web-dev-qa-db-ja.com

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

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

私が持っているのは実体です。ただし、$image = $node->fields['field_image']を使用すると、構造がすごくわかります。

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

8
Undrium

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

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

$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 およびその他の情報ページ(詳細はまだ進行中)。

17
Berdir

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

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

kint($node->get('field_image')->entity)を使用して配列を調べると非常に役に立ちました

enter image description here

次に、私のtwigファイルで使用しました:

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

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

1
Undrium

ノードに複数の画像がある場合、これを使用して画像の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を保持します。お役に立てれば。

0
Trey Ellis