Twig टेम्पलेट में थीम परिसंपत्तियों के लिए पथ प्राप्त करें


22

मेरे पास एक Twig टेम्पलेट में छवि के लिए एक रास्ता पाने के बारे में एक सवाल है। छवि किसी फ़ील्ड या किसी चीज़ को नहीं दी गई है। बस एक स्थिर छवि जो "MYTHEME / छवि / आइकन / my-icon.png" में संग्रहीत है।

Drupal 7 में मुझे निम्नलिखित कोड के साथ मेरे नोड में पथ मिल गया है।

<img src="<?php print base_path() . path_to_theme(); ?>/image/icons">/my-icon.png

Drupal 8 में यह कैसे काम करता है? मैंने एक चर को पास करने की कोशिश की template_preprocess_node()

MYTHEME.theme:

$variables['images_path'] = \Drupal::theme()->getActiveTheme()->getPath() . '/image/';

टहनी टेम्पलेट:

<img src="{{ images_path  ~ 'icons/' ~ 'my-icon.png' }}">

यह काम नहीं करता है। कोई PHP त्रुटि नहीं है, लेकिन पथ को गलत तरीके से http: //localhost/node/themes/template/image/icons/my-icon.png कहा जाता है ।


"पथ गलत है" - यह बहुत मददगार नहीं है :) इसके अलावा आपको विषय की थीम फ़ाइल में प्रीप्रोसेसिंग करना चाहिए, वैश्विक tmeplate_preprocess_hook फ़ंक्शन में नहीं और आपको drupal_get_path ('थीम', 'yourtheme') का उपयोग करना चाहिए।

@ user21641 drupal_get_pathD7 :) के लिए है
चापबाबू

1
यह के लिए है 8 भी @Chapabu ...
क्लाइव

खैर मुझे एक पंख के साथ उड़ा! रंग मुझे सही किया :)
चापाबू

यह वास्तव में D8 के लिए भी है। मैंने इसका इस्तेमाल इस तरह किया है:$themePath = Url::fromUserInput('/' . drupal_get_path('theme', '[themename]')
वोडडे

जवाबों:


51

आप इसका उपयोग कर सकते हैं {{ base_path ~ directory }}जो पूर्ण समस्या को ठीक कर देगा, किसी भी पूर्वप्रक्रिया करने की आवश्यकता नहीं है, इन दोनों चर को कोर द्वारा शामिल किया गया है।

उदाहरण के लिए

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

पुनश्च। ~टहनी में सहायक CONCATENATE है।

संपादित करें: कम से कम पेज में * .html.twig टेम्प्लेट बेस_पैथ वैरिएबल शामिल है, संभवतः आपको अन्य टेम्प्लेट के लिए प्रीप्रोसेसिंग करने की आवश्यकता होगी, आप आसानी से देख सकते हैं {{ dump() }}कि क्या वेरिएबल मौजूद हैं

// File: THEMENAME.theme in your theme's root directory
function THEMENAME_preprocess(&$variables, $hook)
{
    $variables['base_path'] = base_path();
}

3
अपना समाधान साझा करने के लिए धन्यवाद। एक त्वरित टिप्पणी: मुझे $ चर ['आधार_पथ'] = आधार_पथ () को स्पष्ट रूप से जोड़ना था; इसे html.html.twig फ़ाइल में उपलब्ध कराने के लिए मेरा THEME_preprocess_html थीम हुक।
मार्कोस बुर्के

1
उपयोग के बारे में सावधान रहना {{ directory }}एक विषय में टहनी वैरिएबल का एक आधार के विषय के रूप में इस्तेमाल करते हैं और के लिए उप-विषयों बनाने के लिए करना चाहते हैं: drupal.stackexchange.com/questions/277278
JamesWilson

1
टहनी टेम्पलेट सुझाव मॉड्यूल प्रदान करता है {{ base_bath }}हर टेम्पलेट के लिए; अन्यथा कुछ टेम्पलेट्स के लिए आपको करना होगा जैसा कि मार्कोस बुर्के ने उपरोक्त टिप्पणी में किया था, या मैटोइल ने ड्रुपल.स्टैकएक्सचेंज
a/

9

डिफ़ॉल्ट रूप से एक {{ directory }}चर है जिसे आप अपने विषय निर्देशिका में उस बिंदु का उपयोग कर सकते हैं। समस्या यह है, यह पूर्ण नहीं है, जिस तरह से आपने जोड़ा है। मुझे लगता है कि यह कोर में एक बग है क्योंकि इसमें आधार पथ शामिल होना चाहिए, लेकिन यह बदलने से मौजूदा साइटों को तोड़ दिया जाएगा जो इसका उपयोग करते हैं।

तो आपको इसके सामने / जोड़ने की आवश्यकता है; यह टूट जाएगा यदि ड्रुपल को एक सबफ़ोल्डर में स्थापित किया गया है। आप या तो हार्डकोड कर सकते हैं या अपने टेम्प्लेट में उपयोग कर सकते हैं base_path()जैसा कि आपने कस्टम चर में 7.x में किया था।


से छवि का उपयोग कैसे करें /sites/default/files/MyFolder? मेरे पास MyFolder में एक छवि MyImage.jpg है। अब, अगर मुझे <img src={{ url }} alt={{ text }}>यहाँ लिखा गया है तो यूआरएल टेम्पलेट में पथ /MyFolder/MyImage.jpg पथ है, लेकिन यह काम नहीं कर रहा है।
जसदीप चटर्जी

2
जैसा कि बर्दिर ने लिखा है: एक बस <img src="/{{ directory }}/path/to/image"/>एक निरपेक्ष मार्ग प्राप्त करने के लिए उपयोग कर सकता है।
डेनियल

7
<img src="/{{ directory }}/images/logo.png"/> 

मेरे लिए जब काम किया

<img src="{{ base_path ~ directory }}/images/logo.png" alt="My Logo" />

नहीं किया

सामग्री टेम्पलेट के लिए, मुझे .module का उपयोग करना था

   function hook_preprocess(&$variables, $hook) {

  $module_handler = Drupal::service('module_handler');
  $path = $module_handler->getModule('myModuleName')->getPath();

  if(isset($variables['region']) && $variables['region'] == 'content'){
    $variables['module_path'] = $path;
    $variables['http_host'] = $_SERVER['HTTP_HOST'];

तथा

  <img src="{{ module_path }}/images/error404.png" />
  <img src="//{{ http_host }}/{{ module_path }}/images/error403.png" />

3
इस उत्तर को सही के बजाय चिह्नित किया जाना चाहिए
जिग्नेश रावल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.