আমি কিভাবে বেস পাথ পেতে পারি?


16

আমি একটি ড্রুপাল 8 টেম্পলেট ফাইলের বেস পাথটি ব্যবহার করতে চাই। আমি নিম্নলিখিত চেষ্টা করেছিলাম, তবে আমি সঠিক ফলাফল পাই না।

{{ app.request.baseUrl  }}

{{base_path}}

আমার যা দরকার তা হ'ল নোডের পরম পথ {{ app.request.baseUrl }}/{{ url }}

আমি যে সমাধান খুঁজে পেয়েছি তা হ'ল এই কোডটি একটি প্রিপ্রোসেস হুকের মধ্যে রাখা এবং এটি থিমটিতে প্রেরণ করা।

 $host = \Drupal::request()->getHost(); 
$response = \Drupal::httpClient()

আমি আরও ভাল সমাধান খুঁজছি আমি যেটি ব্যবহার করছি তার পরিবর্তে আমার কী ব্যবহার করা উচিত?

উত্তর:


28

আপনি url()দ্রুপালের যে কোনও রুটে একটি বেস url তৈরি করতে ব্যবহার করতে পারেন । আপনি সেই <front>রুটটি সরবরাহ করতে পারেন যা কার্যত, আপনার বেস URL হবে।

{{ url('<front>') }}

তবে আপনি প্রথমে এটি রেন্ডার করুন :

{{ url('<front>')|render ~ file_url('public://image.jpg') }}

উদাহরণ স্বরূপ:

{{ url('<front>') ~ file_url('public://image.jpg') }}
# Outputs: "Array/sites/all/default/files/image.jpg"

{{ url('<front>')|render ~ file_url('public://image.jpg') }}
# Outputs: "http://example.com/sites/all/default/files/image.jpg"

1
এবং আমি নোড পরম পাথ পেতে চান?
ইউসুফ

2
নোডের প্রসঙ্গে path()ফাংশনটি নোড রুটটি পুনরুদ্ধার করতে প্রয়োগ করা যেতে পারে:{{ path('entity.node.canonical', {'node': node.id}) }}
শন কান কন

12

আপনি প্রায় কখনও স্পষ্টভাবে দ্রুপাল ৮ এর অংশগুলি থেকে পাথ তৈরি করতে হবে না I আমি এরকম কিছু নিয়ে যেতে চাই:

function FOO_preprocess_node(&$variables) {
  /** @var \Drupal\node\NodeInterface $node */
  $node = $variables['node'];
  $variables['url'] = $node->toUrl('canonical', [
    'absolute' => TRUE,
    'language' => $node->language(),
  ])->toString();
}

আপনার উত্তর সম্পাদনা করতে আমাকে pologize করুন, তবে url এখন একটি অবজেক্ট, আমাদের এটি স্ট্রিংয়ে রূপান্তর করা উচিত।
ইউসুফ

2
না, আপনাকে এটি করার দরকার নেই, টেমপ্লেটটি ইউআরএল অবজেক্টটি পরিচালনা করতে পারে the অবজেক্টটি রাখা অন্য মডিউলগুলির পক্ষে খুব ভাল, যাতে যে কোনও পর্যায়ে এটি এটিকে পরিবর্তন করতে পারে, অবশেষে এটি ডগায় রেন্ডার হওয়ার আগে।
4k4

@ 4 কে 4 কিন্তু আমি toStringশো না করেই চেষ্টা করেছি , তারপরে আমি কিন্ট (ইউআরএল) চেষ্টা করে দেখেছি এটি আপত্তিজনক ।
ইউসুফ

আমি @ 4k4 এর সাথে একমত হয়েছি যে এটি স্ট্রিংয়ে রূপান্তরিত করা উচিত নয় এবং অবজেক্ট হিসাবে রেখে দেওয়া উচিত যাতে এটি গ্রহণকারী অন্যান্য পদ্ধতি / ফাংশনগুলি প্রভাবিত না হয়।
বিশাল কুমার সাহু

10

ইন page.html.twigআপনি হবে ওয়ার্কিং আছে {{ base_path }}পরিবর্তনশীল। কেন এটি প্রতিটি টেমপ্লেটে উপলব্ধ নয়, আমার কোনও ধারণা নেই। যেহেতু আমি মনে করি এটি হওয়া উচিত এবং অন্য সব কিছুই অগোছালো দেখাচ্ছে, আমার পছন্দের সমাধানটি হ'ল দ্রুপাল যেভাবে প্রয়োজন তার জন্য প্রিপ্রসেস পৃষ্ঠা ফাংশনে যেমন করেন তেমনই করেন।

{{ base_path }}উদাহরণস্বরূপ থিমগুলিতে ব্লক টেমপ্লেটগুলিতে উপলব্ধ করার জন্য , এই কোডটি example.themeফাইলটিতে যুক্ত করুন:

/**
 * Implements hook_preprocess_block().
 */
function example_preprocess_block(&$variables) {

  $variables['base_path'] = base_path();
}

এমপিডির প্রদত্ত স্বীকৃত উত্তরে যেমন উল্লেখ করা হয়েছে, নোড বা অন্য সত্তার URL পাওয়া গেলে আপনার জন্য এটি করার সমস্ত পদ্ধতি রয়েছে।

তবে বেস_পথ পাওয়ার কারণ রয়েছে যেমন আপনার থিম ফোল্ডারে থাকা চিত্রগুলি প্রদর্শন করার সময়। {{ directory }}থিম ফোল্ডারে পাথ সরবরাহ করে তবে এটি বেসের পথটি ছেড়ে দেয় (সাধারণত একটি ডোমেনের সাব-ডাইরেক্টরি থেকে ড্রপালের যথাযথ কার্যকারিতা সংরক্ষণ করার জন্য যা হার্ডকোড করা উচিত নয়)। উপর page.html.twigবা যার উপরে preprocesser হয়েছে কোনো টেমপ্লেটে, এই যে উদ্দেশ্যে কাজ করবে:

<img src="{{ base_path ~ directory }}/images/nsf1.svg"
     alt="National Science Foundation logo" height="80" width="80" />

আপনি অবশ্যই খুব সুন্দর টেমপ্লেটগুলির জন্য আপনার ইচ্ছা দমন করতে পারেন তবে অবশ্যই শন কন এর উত্তর ঠিক আছে।


3

এবং 8.2.x পৃষ্ঠার ডকুমেন্টেশন অনুসারে , প্রথম পৃষ্ঠায় এবং বেস পাথ ইউরल्सগুলিতে ফিরে আসার জন্য দুটি গ্লোবাল ভেরিয়েবল যুক্ত হয়েছে:

ফ্রন্ট_পেজ: প্রথম পৃষ্ঠার ইউআরএল। প্রথম পৃষ্ঠায় লিঙ্ক করার সময় এটি বেস_পথের পরিবর্তে ব্যবহার করুন। এর মধ্যে ভাষার ডোমেন বা উপসর্গ অন্তর্ভুক্ত রয়েছে।

বেস_পথ: ড্রুপাল ইনস্টলেশনটির বেস ইউআরএল পাথ। আপনি যদি কোনও সাব-ডিরেক্টরিতে দ্রুপাল ইনস্টল না করেন তবে সাধারণত "/" হবেন।

সুতরাং আপনি সহ ফন্ট পৃষ্ঠা url front_pageএবং এর সাথে বেসটি পেতে পারেনbase_url

বিঃদ্রঃ

{{ url('<front>') }}উদাহরণস্বরূপ, যখন আপনি এটি অন্য পথের সাথে একত্রীকরণ করতে চান তখন প্রথম পৃষ্ঠার ইউআরএল পাওয়ার সাথে একটি সমস্যা রয়েছে

{%  set base_url = url('<front>')  %}
{% set url = [ base_url,'/landing-page?invitecode=' ,invite_code] | join  %}
{{ url }}

প্রত্যাবর্তন

Array/landing-page?invitecode= 

ডিফল্টরূপে এটি অর্থ পাঠ্য নয় এবং একটি দ্বিগুণ রেন্ডারে সক্ষম অ্যারেটি ফেরত দেয়


2

ভিতরে

function hook_preprocess(&$variables) {
  $variables['base_path'] = base_path();
}

টেম্পলেট ফাইলের মাধ্যমে আপনি কল করতে পারেন

{{ base_path ~ directory }}

2

এখনও পর্যন্ত এই থ্রেড কোনও সঠিক সমাধান আনেনি। আমরা রেন্ডার_ওয়াল () ব্যবহার করে এটি সংহত করতে পারি

কোনও সত্তা চিত্রের পরম পাথ পেতে আমি এখানে এটি ব্যবহার করেছি:

{% set base_url = render_var(url('<front>'))  %}
{% set url = base_url|trim('/', 'right')~file_url(content.field_media[0]['#media'].get('field_image').entity.uri.value)  %}

1 ম আমরা সাইটের বেস ইউআরএল পাই। তারপরে আমাদের একটি অতিরিক্ত / অপসারণ করতে হবে। তারপরে আমরা আমাদের ইমেজ আপেক্ষিক পথের সাথে আমাদের বেস পাথকে সম্মতি জানাই।


2

উপরের সমস্তটি আমার জন্য ব্যর্থ হয়েছে, কারণ আমার কাছে ভাষা পাথ সেটআপ রয়েছে, তাই আমার প্রথম পৃষ্ঠার ইউআরএলটি দেখতে ভাল লাগে https://example.com/en

আমি আমার সাইটের আসল বেস URL পেতে এই কোডটি ব্যবহার করে শেষ করেছি:

{% set base_url = url('<front>')|render|split('/', -1)|join('/') %}

1
{{ path('<front>') }}

আমি জানি আপনি ইতিমধ্যে এটিকে সঠিক হিসাবে চিহ্নিত করেছেন, তবে এটি কোনও অতিরিক্ত কাজ ছাড়াই কোনও টেম্পলেট ফাইলে একটি ডানা উপাদান হিসাবে ব্যবহার করা যেতে পারে। আমি এটি ব্লকটিতে পেয়েছি - উত্সাহী থিম থেকে সিস্টেম-ব্র্যান্ডিং-block.html.twig। সুতরাং আপনি এটি ব্যবহার করতে পারেন:

<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.