কোনও টুইগ টেম্পলেট থেকে কোনও লিঙ্ক ক্ষেত্রের বৈধ URL কীভাবে পাবেন?


30

আমার কাছে একটি লিঙ্ক ক্ষেত্র রয়েছে field_my_link(মেশিনের নাম)।

একটি টুইগ টেম্পলেট এর মধ্যে আমি এর সাথে লিঙ্কটির URL মান পেতে পারি:

{{ node.field_my_link.uri }}

লিঙ্কের ইউআরএলটির ভিতরে যদি বাহ্যিক URL থাকে তবে http://example.comএটি ভাল কাজ করে।

তবে, যদি লিঙ্কের ইউআরএলটির ভিতরে কোনও অভ্যন্তরীণ ইউআরএল থাকে তবে উদাহরণস্বরূপ "/node/11", আমি এর মতো একটি মান পাই:

"internal:/node/11"

internal:উপসর্গ সহ " "

আমি কীভাবে বৈধ URL পেতে পারি ?

উদাহরণস্বরূপ, লিঙ্কটির ইউআরএল যদি " http://example.com" আমি চাই " http://example.com" (এটি ইতিমধ্যে কাজ করে) হয় তবে লিঙ্কটির ইউআরএল " /node/11" আমি আপেক্ষিক ইউআরএল চাই " /node/11", যদি লিঙ্কটির ইউআরএল " <front>" আমি ইউআরএল চাই " /" ইত্যাদি। ।


সম্পাদনা

আমি পিএইচপি প্রিপ্রোসেস ফাংশনটির মধ্যে আমার যে মানটি পেতে চাই তা এটি ব্যবহার করে পেতে পারি:

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

আমি কীভাবে টুইগ টেমপ্লেটের মধ্যে একই মান অ্যাক্সেস করতে পারি?

আমি জানি আমি প্রিপ্রোসেস ফাংশনটির মধ্যে এটি করতে পারি:

$variables['my_url'] = $url;

তারপরে টুইগের মধ্যে ইউআরএলটি ব্যবহার করে অ্যাক্সেস করুন {{ my_url }}তবে প্রতিবার আমার কোনও লিঙ্ক ক্ষেত্র থাকলে আমি প্রিপ্রোসেস ফাংশনটি লিখতে এড়াতে চাই।

উত্তর:


38

আপনার সর্বশেষ সম্পাদনা থেকে আপনার পিএইচপি এই দ্বিধায় অনুবাদ করা হবে:

{{ node.field_my_link.0.url }}

এটি এটির মতো কাজ করে, 0ক্ষেত্রের আইটেম তালিকার প্রথম আইটেমটি ফিরিয়ে দেয় url, ইউআরএল অবজেক্টটি পায় এবং যেহেতু টুইগ এই বস্তুকে স্ট্রিং হিসাবে ফেলে দেবে এটি যাদু পদ্ধতিটিকে স্ট্রিং () হিসাবে কল করবে এবং স্ট্রিংয়ের মান হিসাবে ইউআরএল আউটপুট দেবে।

আপনার কেবল ব্যবহার করতে হবে url, কারণ প্যাঁচটি পদ্ধতিটির জন্য স্বয়ংক্রিয়ভাবে দেখায়getxyz() এই নামের কোনও সম্পত্তি না থাকলেxyz


ধন্যবাদ. এখন আমি এই ফাংশনটি দিয়ে একটি পরীক্ষা করি। আপনি কি জানেন যে আমি লিঙ্কগুলির ইউআরআইতে এই ফাংশনটি ব্যবহার করতে পারি কিনা? node.field_my_link.uriবাহ্যিক ইউআরএলের মতো হলে কী হবে http://www.example.com?
Andrea

1
আমি চেষ্টা file_url(node.field_my_link.uri), এবং যদি node.field_my_link.uriহয় "http://www.example.com"এটি কাজ করে (এটা URL অপরিবর্তিত ছেড়ে), কিন্তু যদি node.field_my_link.uriহয় "internal:/"ফাংশন আয় "/internal%3A/"(পরিবর্তে "/") ..
অ্যান্ড্রিয়া

আমি কেবল আপনার সম্পাদনাটি দেখেছি .. দু: খজনকভাবে এটি কাজ করে না, কোডটি node.field_my_link.entity.uri.valueএকটি নাল মান দেয় .. অন্য কোনও ধারণা?
Andrea

@ আন্দ্রেয়া, আমি আমার উত্তর সম্পাদনা করেছি।
4k4

1
হ্যাঁ, এটা কাজ করে। বাক্য গঠনটি খানিকটা ভীতিজনক, তবে এটি তার কাজটি করে।
Andrea

17

আপনি সরাসরি আপনার ক্ষেত্রে রেন্ডার অ্যারে উপাদানটি অ্যাক্সেস করতে পারেন:

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

এই আমার জন্য কাজ।
esQmo_

10

আপনাকে উভয় ক্ষেত্রেই কভার করতে হবে: বাহ্যিক এবং অভ্যন্তরীণ 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>কোনও প্রিপ্র্রোসেসের প্রয়োজন নেই এবং কন্টেন্টের মাধ্যমে যাওয়ার দরকার নেই।ফিল্ডলিঙ্ক, তাই কিছু করার দরকার নেই লিঙ্ক ক্ষেত্রের জন্য 'ইউআরএল প্রদর্শন পরিচালনা করুন' কেবলমাত্র url পেতে।
ব্যবহারকারী 33560

8

আমাকে একটি ব্লকের একটি লিঙ্ক ফিল্ডে এটি করতে হয়েছিল। এটি ভাল কাজ করেছে:

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

4
রেন্ডার{{ content.field_my_link[0]['#url'] }} ছাড়াই ব্যবহার করা ভাল , যেমন টুইগ টেম্পলেট, রেন্ডার অ্যারে স্বয়ংক্রিয়ভাবে রেন্ডার করা হয় যখন মুদ্রিত হয়।
এরিক.চেনচাও

5

আমি জানি এটি একটি পুরানো পোস্ট তবে ড্রুপাল 8 (8.6) এর শেষ সংস্করণ সহ আপনি সরাসরি উভয় সংস্করণের (বাহ্যিক এবং অভ্যন্তরীণ) ইউআরএল প্রদর্শন করতে পারেন:

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