मुझे आधार पथ कैसे मिलेगा?


16

मैं एक Drupal 8 टेम्पलेट फ़ाइल में आधार पथ का उपयोग करना चाहता हूं। मैंने निम्नलिखित की कोशिश की, लेकिन मुझे सही परिणाम नहीं मिला।

{{ app.request.baseUrl  }}

{{base_path}}

मुझे नोड के लिए पूर्ण पथ की आवश्यकता है {{ app.request.baseUrl }}/{{ url }}

एक समाधान जो मैंने पाया है वह इस कोड को प्रीप्रोसेस हुक में डाल रहा है, और इसे विषय पर पास कर सकता है।

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

मैं एक बेहतर समाधान की तलाश में हूं। मैं जो उपयोग कर रहा हूं उसके बजाय मुझे क्या उपयोग करना चाहिए?

जवाबों:


27

आप url()Drupal में किसी भी मार्ग पर बेस 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

आपको Drupal 8 में कुछ हिस्सों को स्पष्ट रूप से बनाने की आवश्यकता नहीं है। मैं कुछ इस तरह से जाऊंगा:

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

अपना उत्तर संपादित करने के लिए मुझे क्षमा करें, लेकिन अब url एक वस्तु है, हमें इसे स्ट्रिंग में बदलना चाहिए।
युसेफ

2
नहीं, आपको ऐसा करने की आवश्यकता नहीं है, टेम्पलेट url ऑब्जेक्ट को संभाल सकता है। ऑब्जेक्ट को रखने के लिए यह अन्य मॉड्यूल के लिए अच्छा है, ताकि कोई भी इसे किसी भी चरण में बदल सके, इससे पहले कि यह आखिरकार टहनी में मिल जाए।
4k4

@ 4k4, लेकिन मैंने बिना toStringशो के कोशिश की, फिर मैंने kint (url) की कोशिश की और देखा कि यह ऑब्जेक्ट है।
युसेफ

मैं @ 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();
}

जैसा कि एमपीडी द्वारा प्रदान किए गए स्वीकार किए गए उत्तर में उल्लेख किया गया है, यदि नोड या अन्य इकाई का यूआरएल प्राप्त करना आपके लिए यह सब करने के तरीके हैं।

हालाँकि, आधार_पथ प्राप्त करने के कारण हैं, जैसे कि आपके थीम फ़ोल्डर में रहने वाले चित्र प्रदर्शित करना। {{ directory }}थीम फ़ोल्डर को पथ प्रदान करता है, लेकिन यह आधार पथ को बंद कर देता है (आमतौर पर सिर्फ एक / लेकिन एक डोमेन के उपनिर्देशिका जो हार्डकोड नहीं किया जाना चाहिए) से Drupal के उचित कामकाज को संरक्षित करने के लिए)। page.html.twigउपरोक्त प्रीप्रोसेसर वाले किसी भी टेम्पलेट पर या उस उद्देश्य के लिए यह काम करेगा:

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

और निश्चित रूप से शॉन कॉन का जवाब ठीक काम करता है यदि आप सुंदर टेम्पलेट्स के लिए अपनी इच्छा को दबा सकते हैं, लेकिन मैं नहीं कर सकता।


3

और 8.2.x पर पेज प्रलेखन के अनुसार , फ्रंट पेज और बेस पाथ को वापस करने के लिए दो वैश्विक चर जोड़े गए:

फ्रंट_पेज: फ्रंट पेज का URL। फ्रंट पेज से लिंक करते समय आधार_पथ के बजाय इसका उपयोग करें। इसमें भाषा डोमेन या उपसर्ग शामिल है।

base_path: Drupal स्थापना का आधार URL पथ। आमतौर पर "/" तब तक होगा जब तक कि आपने ड्रुपल को उप-निर्देशिका में स्थापित नहीं किया है।

तो आप Url के साथ फ़ॉन्ट पृष्ठ Url front_pageऔर आधार Url प्राप्त कर सकते हैंbase_url

ध्यान दें

{{ url('<front>') }}जब आप अन्य पथ के साथ इसका उदाहरण चाहते हैं, तो फ्रंट पेज url के साथ एक समस्या हो रही है

{%  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();
}

और टेम्प्लेट फ़ाइल में u के माध्यम से कॉल कर सकते हैं

{{ 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 हमें साइट का आधार URL मिलता है। फिर हमें एक अतिरिक्त / हटाने की आवश्यकता है। फिर हम अपनी छवि सापेक्ष पथ के साथ अपना आधार पथ समतल करते हैं।


2

उपरोक्त सभी मेरे लिए विफल रहे, क्योंकि मेरे पास भाषा पथ सेटअप है, इसलिए मेरा फ्रंट पेज URL जैसा दिखता है https://example.com/en

मैंने अपनी साइट के लिए वास्तविक आधार URL प्राप्त करने के लिए इस कोड का उपयोग किया:

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

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

मुझे पता है कि आप पहले ही इसे सही के रूप में चिह्नित कर चुके हैं, लेकिन इसे बिना किसी अतिरिक्त कार्य के टेम्पलेट फ़ाइल में एक टहनी तत्व के रूप में उपयोग किया जा सकता है। मुझे यह क्लासी थीम से ब्लॉक - सिस्टम-ब्रांडिंग-ब्लॉक.html.twig में मिला। तो आप इसे इस तरह से उपयोग कर सकते हैं:

<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.