কোনও নোডে একটি ফিল্ড_মেজ থেকে চিত্রের 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)

এখন ফিল্ড_আইমেজে এক্স-ডিফল্ট এবং কিছু বেসিক চিত্রের ডেটা রয়েছে। আমি কীভাবে চিত্রটি দেখাব, বা টুইগ টেম্পলেটটির অভ্যন্তরে চিত্রটির একটি লিঙ্ক তৈরি করব?


চেক করার সময় নেই তবে সম্ভবত 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.")
রিয়াস

ত্রুটি ... আমি অনুমান করব এটি তখন একটি প্রিপ্রোসেস হুকের মধ্যে করা দরকার, যদি না কোনও টুইগ হেল্পার ফাংশনকে FieldItemListস্ট্রিং উপস্থাপনায় রূপান্তর করতে (যা আমি পাই না)
ক্লাইভ

ওহ আমি দেখছি, url()একটি পথ চাই। কীভাবে url_from_path(node.field_image.0.entity.uri.value)?
ক্লাইভ

হুম এটি url_from_path()তৈরি http://mywebsite.local/public%3A//image.pngকরেছে বলে মনে হচ্ছে : সুতরাং এটি urlncoding এবং ইউআরএলের সঠিক মান সংযোজন বলে মনে হচ্ছে
রিয়াস

উত্তর:


49

8.0.x এর পরে এই উত্তরের একটি আপডেট সংস্করণ এখানে রয়েছে। @ জোয়েলপিটেট মন্তব্যটিতে এই ভিত্তি ।

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

2
দয়া করে মনে রাখবেন, আপনি "আনস্টাইলযুক্ত" মূল চিত্রটির url পাবেন এবং চিত্র শৈলীর নির্দিষ্ট url নয় (যেমন থাম্বনেইল)। ভ্লাদিমিরমের উত্তর বাদে ডানাতে সঠিক স্টাইলযুক্ত চিত্রের url পাওয়ার কোনও উপায় নেই। কমপক্ষে বর্তমানে ...
ফিলিপ মাইকেল

2
... ইমেজ শৈলী পল্লব খামচি এখন উপলব্ধ - drupal.org/project/twig_tweak
4k4

1
ফাইল url()entity.url()entity.fileurifile_url()
ক্লাসটির

36

আমি ট্যুইগ সম্পর্কে জানিনা, তবে আপনি $node->field_image->entity->getFileUri()পিএইচপি-তে ফাইলটি ইউআরআই পাবেন , এবং আপনাকে file_create_url()সেই কল করতে হবে :

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

আমি জানি না এটি দ্বৈতভাবে সম্ভব কিনা। যদি এটি সম্ভব না হয় তবে আপনি সর্বদা এটি প্রাক প্রসেসিতে গণনা করতে পারেন এবং একটি নতুন ভেরিয়েবল হিসাবে যুক্ত করতে পারেন।


2
আমরা ফাইল_ক্রিয়েট_আরএল () কে মূল রূপে আনতে চাইছি কিন্তু আগ্রহের অভাবে বিষয়টি বাসি করে দিয়েছে। 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
এটি একটি দুর্দান্ত উত্তর। মনে রাখবেন যে আপনার। থিম বা .মডিউল ফাইলটিতে আপনি এটি শীর্ষে যুক্ত করতে চান:use Drupal\image\Entity\ImageStyle;
মাইকডটেক্স

2
আমি https সহ একটি ইস্যুতে দৌড়েছি, যেখানে সাফারি আইপি ব্যবহার না করে চিত্রটি প্রদর্শন করবে না। $relative = file_url_transform_relative($styled_image_url);এটি সম্পর্কিত কিনা তা নিশ্চিত করতে আপনি যুক্ত করতে চাইতে পারেন । এপিআই এখানে
মাইকডটেক্স

9

উপরের কোনও দ্বিগুন সমাধান আমার পক্ষে কাজ করেনি (সম্ভবত এগুলি পুরানো ৮.x সংস্করণের জন্য কাজ করেছে তবে 8.5 সংস্করণের জন্য নয়)

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

দ্রষ্টব্য: ড্রুপাল 8.5+ এর জন্য কাজ করা উচিত


আমি মনে করি এটি খারাপ লাগে যে এই ধরণের জিনিসগুলি কিছু সময়ের পরে অবনমিত হয়। দ্রুপাল আপগ্রেড করা তাদের কাজ করা উচিত! ধন্যবাদ ড্রপাল 8.6 এ এটি আমার জন্য কাজ করে।
স্টিফ ভ্যান লুভেরেন

7

সুতরাং আমি ক্লাইভের সাহায্যে উত্তরটি খুঁজে পেয়েছি ।

টুইগে ছবিটি ইউআরআই প্রাপ্ত করে ব্যবহার করা হয় node.field_image.0.entity.uri.value

ইমেজটির জন্য সম্পূর্ণ ইউআরএল পাওয়া ব্যবহার করে করা যেতে পারে 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) }}" />

সেখানে যদি চিত্রটি .োকানো না থাকে এবং আমরা ডিফল্ট মান সেট করে রেখেছি।
amol


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 টি পেতে চান তবে এই উপায়:

প্রথমে টুইগ টুইকের মডিউলটি ইনস্টল করুন

তারপরে চিত্রটি ইউআরআইকে ভেরিয়েবল হিসাবে সেট করুন। ইউআরআই দিয়ে আপনি যে কোনও চিত্র শৈলী চান তার সাথে পাথ পেতে আপনি একটি টুইগ টুইটস প্যাটার্ন ব্যবহার করতে পারেন। নিচে দেখ:

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

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

file_urlকোনও সত্তা থেকে ফাইল ইউআরএল বের করার জন্য টুইগ টুইক ভি 2.4 + ফিল্টার সরবরাহ করে।

<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

কিছুটা সম্পর্কিত, এখানে আমি মিডিয়া সত্তার চিত্র ক্ষেত্র থেকে একটি চিত্র ফাইলের ইউআরএল পাওয়ার জন্য (আমাকে সেখানে পাওয়ার জন্য সমস্ত পূর্ববর্তী উত্তরগুলির জন্য ধন্যবাদ) এখানে ব্যবহার করেছি:

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

এখন আমি আমার টুইগ টেমপ্লেটে এই পরিবর্তনশীলটি ব্যবহার করতে পারি

{{ media_img_url }}

0

ইউআরআই, ওয়েল, শিরোনাম ইত্যাদির মতো চিত্রের বৈশিষ্ট্য পেতে নীচের টেমপ্লেট অনুসারে সিনট্যাক্স ব্যবহার করুন

নোড টুইগ টেমপ্লেটে

{{node.field_name.entity.fileuri}}

ক্ষেত্রের পাতলা টেমপ্লেটে In

{{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 (-------) // ভিতরে নোডের পথ লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.