Twig टेम्पलेट के भीतर से लिंक फ़ील्ड का मान्य URL कैसे प्राप्त करें?


30

मेरे पास एक लिंक फ़ील्ड है field_my_link(मशीन का नाम)।

एक Twig टेम्पलेट के भीतर मुझे इसके साथ लिंक का URL मान मिल सकता है:

{{ node.field_my_link.uri }}

यदि लिंक के URL के अंदर एक बाहरी URL है, जैसे http://example.comयह अच्छा काम करता है।

लेकिन, अगर लिंक के URL के अंदर एक आंतरिक URL संग्रहीत है , उदाहरण के लिए "/node/11", मुझे इस तरह से एक मूल्य मिलता है:

"internal:/node/11"

" internal:" उपसर्ग के साथ।

मैं मान्य URL कैसे प्राप्त कर सकता हूँ ?

उदाहरण के लिए, यदि लिंक का URL " http://example.com" मैं चाहता हूं " http://example.com" (यह पहले से ही काम करता है), यदि लिंक का URL " /node/11" मैं सापेक्ष URL चाहता हूं " /node/11", यदि लिंक का URL " <front>" मुझे URL चाहिए " /", आदि। ।


संपादित करें

मैं एक PHP प्रीप्रोसेस फ़ंक्शन के भीतर जो मूल्य चाहता हूं, उसे प्राप्त कर सकता हूं:

$url = $variables['node']->get('field_my_link')->first()->getUrl();

मैं Twig टेम्पलेट के भीतर समान मूल्य कैसे प्राप्त कर सकता हूं?

मुझे पता है कि मैं यह प्रीप्रोसेस फंक्शन के भीतर कर सकता हूं:

$variables['my_url'] = $url;

फिर उपयोग करते हुए Twig के भीतर url का उपयोग करें {{ my_url }}, लेकिन जब भी मेरे पास लिंक फ़ील्ड होगा मैं हर बार प्रीप्रोसेस फ़ंक्शन लिखने से बचूंगा।

जवाबों:


38

आपके नवीनतम संपादन से आपका PHP इस तरह टहनी में तब्दील हो जाएगा:

{{ node.field_my_link.0.url }}

यह इस तरह काम करता है, 0फ़ील्ड आइटम सूची का पहला आइटम लौटाता है, urlurl ऑब्जेक्ट प्राप्त करता है और क्योंकि टहनी इस ऑब्जेक्ट को एक स्ट्रिंग के रूप में डालेगी, यह मैजिक विधि को toString () कहेगा और url को स्ट्रिंग मान के रूप में आउटपुट करेगा।

आपको केवल उपयोग करने की आवश्यकता है url, क्योंकि टहनी विधि के लिए स्वचालित रूप से दिखती है getxyz()यदि उस नाम के साथ कोई संपत्ति नहीं है xyz


धन्यवाद। अब मैं इस फ़ंक्शन के साथ एक परीक्षण करता हूं। क्या आप जानते हैं कि क्या मैं इस फ़ंक्शन का उपयोग लिंक 'यूआरआई' पर भी कर सकता हूं? यदि node.field_my_link.uriबाहरी यूआरएल जैसा है तो क्या होगा http://www.example.com?
एंड्रिया

1
मैं के साथ की कोशिश की file_url(node.field_my_link.uri)है, और अगर node.field_my_link.uriहै "http://www.example.com"यह काम करता है (यह यूआरएल अपरिवर्तित छोड़ देता है), लेकिन अगर node.field_my_link.uriहै "internal:/"समारोह रिटर्न "/internal%3A/"(बजाय "/") ..
एंड्रिया

मैंने अभी आपका संपादन देखा .. अफसोस की बात है कि यह काम नहीं करता है, कोड node.field_my_link.entity.uri.valueएक शून्य मान देता है .. कोई अन्य विचार?
एंड्रिया

@ और, मैंने अपना उत्तर संपादित किया।
4k4

1
हाँ, यह काम करता है। वाक्य-विन्यास थोड़ा डरावना है, लेकिन यह अपना काम करता है।
एंड्रिया

17

आप रेंडर सरणी तत्व को सीधे अपने मामले में एक्सेस कर सकते हैं:

{{ node.field_my_link[0]['#url'] }}

यह एक मेरे लिए काम किया।
esQmo_

10

आपको दोनों मामलों को कवर करना होगा: बाहरी और आंतरिक URL।

पहले आइए देखें कि क्या URL बाहरी है और बस उसका प्रिंट लें *.uri

यदि यह आंतरिक है तो हमें इसके रूट नाम और मापदंडों को ड्रुपल path($name, $parameters, $options)फ़ंक्शन के माध्यम से तार करना होगा।

{% if node.field_link.0.url.external %}
  <a href="{{ node.field_link.uri }}">
    {{ node.field_link.title }}
  </a>
{% else %}
  <a href="{{ path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) }}">
    {{ node.field_link.title }}
  </a>
{% endif %}

2
धन्यवाद, यह वही है जो मुझे चाहिए था: एक कड़ी के रूप में लिंक फ़ील्ड से url प्राप्त करें: {% set url = path(node.field_link.0.url.routeName, node.field_link.0.url.routeParameters) %}फिर मैं एक कस्टम लिंक बना सकता हूं: ` <a href="{{ url }}" class="mycustomclass">custom link text</a>कोई प्रीप्रोसेस की आवश्यकता नहीं है और content.field_link के माध्यम से जाने की आवश्यकता नहीं है, इसलिए इसमें कुछ भी करने की आवश्यकता नहीं है केवल url प्राप्त करने के लिए लिंक फ़ील्ड के लिए 'मैनेज डिस्प्ले' करें।
user33560

8

मुझे एक ब्लॉक में एक लिंक फील्ड पर ऐसा करना पड़ा। यह अच्छी तरह से काम किया:

{{ content.field_my_link[0]['#url']|render }}

4
रेंडर के{{ content.field_my_link[0]['#url'] }} बिना उपयोग करना भी ठीक है , जैसा कि ट्वीग टेम्पलेट में, रेंडर सरणी मुद्रित होने पर स्वचालित रूप से प्रदान किया जाता है।
eric.chenchao

5

मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन Drupal 8 (8.6) के अंतिम संस्करण के साथ आप सीधे दोनों संस्करण (बाहरी और आंतरिक) के लिए url प्रदर्शित कर सकते हैं:

node.field_link.0.url

और अगर आपको यह जानना है कि लिंक बाहरी है या नहीं (मेरे मामले के लिए यह लक्ष्य के लिए था), तो आप इसका उपयोग कर सकते हैं:

node.field_link.0.url.external

उदाहरण:

<a href="{{ node.field_link.0.url }}" title="Title" target="{{ node.field_link.0.url.external ? '_blank' : '_self' }}"

1

आप निम्न जैसे कुछ का भी उपयोग कर सकते हैं, यह सब उस वस्तु के प्रकार पर निर्भर करता है जिसे आप निकाल रहे हैं और फ़ील्ड नाम, मेरे मामले में यह फ़ील्ड_लिंक नामक फ़ील्ड के साथ एक पैराग्राफ था और निम्नलिखित काम किया:

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