किसी नोड पर field_image से छवि URL प्राप्त करना


42

इसलिए मेरे पास यह नोड है:

object(Drupal\node\Entity\Node)[1862]
  protected 'values' => 
    array (size=17)
      'vid' => 
        array (size=1)
          'x-default' => string '7' (length=1)
      'langcode' => 
        array (size=1)
          'x-default' => 
            array (size=1)
              0 => 
                array (size=1)
                  'value' => string 'en' (length=2)
      ... (more fields)
      'field_image' => 
        array (size=1)
          'x-default' => 
            array (size=1)
              0 => 
                array (size=5)
                  'target_id' => string '1' (length=1)
                  'alt' => string '' (length=0)
                  'title' => string '' (length=0)
                  'width' => string '150' (length=3)
                  'height' => string '120' (length=3)

अब field_image में एक्स-डिफ़ॉल्ट और कुछ मूल छवि डेटा के साथ एक सरणी है। मैं छवि कैसे दिखाऊं, या टहनी टेम्पलेट के अंदर छवि के लिए एक लिंक बनाऊं?


जांच करने के लिए समय नहीं है लेकिन शायद के रूप में सरल रूप में url(node.field_image.0.entity.uri)( प्रासंगिक मुद्दा )
क्लाइव

@ मैंने इसे आज़माया और मुझे यह त्रुटि देता है: Recoverable fatal error: Object of class Drupal\Core\Field\FieldItemList could not be converted to string इसलिए मैंने इसे इसके साथ आज़माया: url(node.field_image.0.entity.uri.value)लेकिन फिर यह मुझे यह बताता है:Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("Route "public://image.png" does not exist.")
Rias

Errr ... मैं इसे फिर एक preprocess हुक में किया जाना है, जब तक कि वहाँ परिवर्तित करने के लिए एक टहनी सहायक समारोह है की जरूरत है लगता है कि होगा FieldItemListएक स्ट्रिंग प्रतिनिधित्व में है (जो मैं नहीं मिल सकता है)
क्लाइव

ओह, मैं देख रहा हूँ, url()एक मार्ग चाहता है। कैसे के बारे में url_from_path(node.field_image.0.entity.uri.value)?
क्लाइव

हम्म url_from_path()यह उत्पन्न करने के लिए लगता है: http://mywebsite.local/public%3A//image.pngइसलिए यह urlencoding लगता है और url के सटीक मूल्य को जोड़ रहा है
Rias

जवाबों:


49

8.0.x के बाद इस उत्तर के लिए अपडेट संस्करण यहां दिया गया है। यह आधार @joelpittet टिप्पणी पर है।

{{ file_url(node.field_image.entity.fileuri) }}

2
कृपया ध्यान दें, कि आपको "unstyled" मूल छवि का url मिलेगा, न कि चित्र शैली विशिष्ट url (उदा। थंबनेल)। व्लादिमीर के जवाब के अलावा टहनी में सही स्टाइल वाली छवि यूआरएल प्राप्त करने का कोई तरीका नहीं है। कम से कम वर्तमान में ...
फिलिप माइकल

2
... छवि शैलियाँ अब
ट्विच टीक

1
फ़ाइल वर्ग में एक url()विधि है, जिससे आप केवल entity.url()entity.fileurifile_url()
केई

36

मैं ट्विग के बारे में नहीं जानता, लेकिन आपको $node->field_image->entity->getFileUri()PHP में URI के साथ फाइल मिलती है , और आपको file_create_url()उस पर कॉल करना होगा:

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

मुझे नहीं पता कि क्या यह टहनी में संभव है। यदि यह संभव नहीं है, तो आप हमेशा इसे प्रीप्रोसेस में गणना कर सकते हैं और एक नए चर के रूप में जोड़ सकते हैं।


2
हम file_create_url () को कोर में लाने की कोशिश कर रहे हैं लेकिन ब्याज की कमी ने इस मुद्दे को बासी बना दिया है। drupal.org/node/2168231 हालांकि अगर इसमें मिला है तो {{file_url (node.field_image.entity.fileuri)}}}
joelpittet

26

अगर किसी को स्टाइल की जरूरत है:

$styled_image_url = ImageStyle::load('large')->buildUrl($node->field_image->entity->getFileUri());

4
यह एक बेहतरीन जवाब है। ध्यान दें कि आपकी .theme या .module फ़ाइल में आप इसे शीर्ष पर जोड़ना चाहेंगे:use Drupal\image\Entity\ImageStyle;
mikeDOTexe

2
मैं https के साथ एक समस्या में भाग गया, जहां सफारी छवि नहीं दिखाएगा क्योंकि यह आईपी का उपयोग करता है। आप $relative = file_url_transform_relative($styled_image_url);यह सुनिश्चित करने के लिए जोड़ना चाह सकते हैं कि यह सापेक्ष है। यहाँ एपीआई
mikeDOTexe

9

उपरोक्त टहनी समाधानों में से कोई भी मेरे लिए काम नहीं करता था (शायद उन लोगों ने पुराने 8.x संस्करणों के लिए काम किया था, लेकिन 8.5 संस्करण के लिए नहीं

{{ file_url(node.field_image['#items'].entity.uri.value) }}

नोट: Drupal 8.5+ के लिए काम करना चाहिए


मुझे लगता है कि इसका बुरा यह है कि इस तरह की चीजें थोड़ी देर के बाद खराब हो जाती हैं। Drupal को अपग्रेड करने वालों को काम करते रहना चाहिए! यह मेरे लिए Drupal 8.6 में काम करता है, धन्यवाद।
स्टेफ वान लूवरेन

7

इसलिए मैंने क्लाइव की मदद से इसका उत्तर खोज लिया है ।

छवि को ट्विग में URI का उपयोग करके किया जाता है node.field_image.0.entity.uri.value

छवि के लिए पूर्ण URL प्राप्त करके उपयोग किया जा सकता है file_create_url(node.field_image.0.entity.uri.value)

ट्विग में ऐसा करना अभी तक संभव नहीं है, लेकिन वे इस पर काम कर रहे हैं -> यहां देखें


6

डी 8 में मेरे लिए काम करना समाप्त हो गया है:

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

kint($node->get('field_image')->entity)सरणी के माध्यम से उपयोग करना और देखना बहुत मददगार था

यहाँ छवि विवरण दर्ज करें

तब मेरी टहनी फ़ाइल में मैंने इस्तेमाल किया:

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

क्या होगा अगर कोई छवि सम्मिलित नहीं है और हमने डिफ़ॉल्ट मान सेट किया है।
अमोल


2

मैं हमेशा एक सहायक फ़ंक्शन का उपयोग कर रहा हूं

  /**
   * Get the Image URI.
   *
   * @param \Drupal\Core\Entity\Entity $entity
   * @param $fieldName
   * @param bool $imageStyle
   * @return mixed
   */
  public function getImageUri(\Drupal\Core\Entity\Entity $entity, $fieldName, $imageStyle = FALSE) {
    $imageField = $entity->get($fieldName)->getValue();
    if (!empty($imageField[0]['target_id'])) {
      $file = File::load($imageField[0]['target_id']);
      if ($imageStyle) {
        return ImageStyle::load($imageStyle)->buildUrl($file->getFileUri());
      }

      // Original URI.
      return file_create_url($file->getFileUri());
    }
  }

1

यह वह तरीका है यदि आप किसी छवि क्षेत्र के लिए किसी संबंधित छवि शैली के साथ छवि URL प्राप्त करना चाहते हैं:

सबसे पहले Twig Tweak मॉड्यूल इंस्टॉल करें

फिर छवि URI को एक चर के रूप में सेट करें। यूआरआई के साथ, आप जिस भी छवि शैली को चाहते हैं, उसके साथ पथ प्राप्त करने के लिए एक ट्विग ट्विक्स पैटर्न का उपयोग कर सकते हैं। निचे देखो:

{% set image_uri = content.field_feature_row_image['#items'].entity.uri.value %}

<img src="{{ image_uri|image_style('image1200x1103') }}"/>

Twig Tweak v2.4 + file_urlएक इकाई से फ़ाइल URL निकालने के लिए फ़िल्टर प्रदान करता है ।

<img src="{{ node.field_image|file_url|image_style('image1200x1103') }}"/>

0

मेरे पास एक ही मुद्दा था, इसलिए मैंने एक get_image_path()ट्विग फ़ंक्शन बनाया और इसे अन्य उपयोगी सामान के एक गुच्छा के साथ अपने बॉयलरप्लेट स्टार्टर मॉड्यूल में जोड़ा:

https://github.com/brynj-digital/starter

फ़ंक्शन छवि फ़ील्ड और छवि शैली के मशीन नाम को स्वीकार करता है, फिर उस छवि पथ को वापस करता है।

यह बहुत सारे संदर्भों में काम करता है - आप पास कर सकते हैं node.field_name, content.field_nameया row._entity.field_name(फ़ील्ड देखें टेम्पलेट के मामले में)।


0

हे भगवान, यह वास्तव में मेरी उम्र का पता लगाने के लिए क्यों मेरे परिणामस्वरूप यूआरएल काम नहीं किया। सभी 404'ed। यदि आपको पहले से मौजूद नहीं है, तो आपको पहले एक व्युत्पन्न बनाने की आवश्यकता है

उदाहरण के लिए जब आप बाद में एक छवि शैली जोड़ते हैं, तो मूल छवि अपलोड होने के बाद, फिर कोई स्टाइल छवि फ़ाइल नहीं होती है (छवि व्युत्पन्न)। इसे पहले बनाने की जरूरत है।

प्रतिस्थापित करें field_MYIMAGEऔर MYSTYLEआवश्यकतानुसार।

$original_image = $node->field_MYIMAGE->entity->getFileUri();
$style = \Drupal::entityTypeManager()->getStorage('image_style')->load('MYSTYLE');

$destination = $style->buildUri($original_image);
if (!file_exists($destination)) {
  $style->createDerivative($original_image, $destination);
}

$url = $style->buildUrl($original_image);

काश यह अपने आप हो जाता।


0

कुछ हद तक संबंधित है, यहाँ मैंने उपयोग किया है (मुझे वहां पहुंचने के लिए पिछले सभी उत्तरों के लिए धन्यवाद) टहनी में मीडिया इकाई के छवि क्षेत्र से एक छवि फ़ाइल URL प्राप्त करने के लिए:

{% set media_img_url = file_url(content.field_media_image.0['#item'].entity.uri.value) %}

अब मैं अपने चर टेम्पलेट में इस चर का उपयोग कर सकता हूं

{{ media_img_url }}

0

URI की तरह छवि विशेषता प्राप्त करने के लिए, alt, शीर्षक आदि टेम्पलेट वार के नीचे की तरह सिंटैक्स का उपयोग करें

नोड टहनी टेम्पलेट में

{{node.field_name.entity.fileuri}}

फ़ील्ड टहनी टेम्पलेट में

{{content.field_name.entity.fileuri}}

अन्य क्षेत्र में टहनी टेम्पलेट

{{element['#object'].field_name.entity.fileuri}}

नोट: इसके अलावा twig_tweaks के मॉड्यूल धोखा शीट की जाँच करें ।


0

आप url()शॉर्टकट के रूप में फ़ाइल वर्ग पर मौजूद विधि का उपयोग कर सकते हैं :

{{ file_url(node.field_image.entity.fileuri) }}

इसे छोटा किया जा सकता है:

{{ node.field_image.entity.url }}

यह प्रीप्रोसेस फ़ंक्शंस में काम करता है लेकिन Twig_Sandbox_SecurityErrorजब इसे ट्वीग टेम्पलेट में बुलाया जाता है तो यह ट्रिगर हो जाता है।

यदि आप प्राप्त करते हैं, Twig_Sandbox_SecurityErrorतो आप urlअपनी सेटिंग्स में अनुमति देने के लिए टहनी को बता सकते हैं । इस स्टाॅकफ़्लो पोस्ट में उल्लिखित फ़ाइल के अनुसार

फ़ाइल पर दस्तावेज़ देखें :: Url () https://api.drupal.org/api/drupal/core%21modules%21file%21src%21Entity%21File.php/function/File/3A%3Aurl/8.6.x


-4

आप इसे दो तरीकों से कर सकते हैं!

1) file_create_url (---------) // अंदर नोड का पथ लिखें

2) file_url (-------) // अंदर नोड का रास्ता लिखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.