आंशिक टेम्पलेट शामिल करें


19

मैं एक कस्टम विषय के साथ Drupal 8 का उपयोग करने की कोशिश कर रहा हूं, मेरी आवश्यकताओं के लिए बड़ी संरचना के अंतर के कारण मेरे पास एक पृष्ठ है - front.twig.html और एक page.twig.html, मैं इसमें उपयोग किए गए टेम्पलेट भागों को बनाना चाहूंगा एक सामान्य Symfony2 प्रोजेक्ट में phrozn oder, उदाहरण के लिए एक footer.html.twig और एक header.html.twig। ये टेम्प्लेट एक उपनिर्देशिका / भागों / के तहत सहेजे जाते हैं।

लेकिन जब मैं इस टेम्पलेट को सामान्य कहता हूं तो मुझे टेम्पलेट के नाम के साथ एक स्ट्रिंग मिलती है।

उदाहरण के लिए:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

स्ट्रिंग के रूप में फ़ाइल नाम लौटाता है:

parts/footer.html.twig

Drupal 8 के साथ ऐसा करना संभव है?

जवाबों:


33

आप सापेक्ष पथ नहीं कर सकते, सभी रास्ते या तो द्रुपाल रूट से होने चाहिए या आपके 'टेम्प्लेट' डायरेक्टरी के नामस्थान पर आधारित होंगे: https://www.drupal.org/node/2143557

मैं "Drupal रूट" से बचूंगा और नामस्थानों का उपयोग करूंगा, कम से कम https://www.drupal.org/node/2291449 तक हल किया जाएगा।

{% include '@mytheme/parts/footer.html.twig' %}

संपादित करें: यदि आप लूप के लिए अतिरिक्त तर्क पारित करना चाहते हैं या अपने शामिल किए गए twigटेम्प्लेट के कुछ संस्करणों की जांच करना चाहते हैं तो आपको इस तरह से लिखना चाहिए:

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

संपादित करें: अब जब https://www.drupal.org/node/2291449 प्रतिबद्ध हो गया है, तो आप यह भी कर सकते हैं:

{% include 'footer.html.twig' %}

Https://www.drupal.org/node/2369981 देखें कि आपने सहायक अपवाद के बजाय फ़ाइल नाम को स्ट्रिंग के रूप में क्यों देखा।


includeमूल्यों के बारे में क्या ? मान लीजिए मैं जुड़ा हुआ चित्र बनाने से बचने के image-formatterलिए urlनल को शामिल करना और पास करना चाहूंगा ।
सईदबाकरा

इस उत्तर में दिए गए उदाहरण काम नहीं करते हैं।
अर्नोल्डबर्ड

3
इस बात से अवगत रहें कि स्ट्रिंग + के @mythemeमार्ग का समाधान करता है । दूसरे शब्दों में, निर्देशिका में हल होता है । mytheme/templates@mythememytheme/templates
डेनियल

@Daniels से टिप्पणी को और स्पष्ट करने के लिए। यदि आपके कस्टम थीम का नाम mytheme है और यह 'themes / custom / mytheme' पर स्थित है, तो Twig नाम स्थान 'थीम / कस्टम / mytheme / टेम्प्लेट' पर@mytheme हल होता है । इसमें शामिल एक टेम्पलेट का मतलब है कि यह 'विषयों / कस्टम / mytheme / टेम्पलेट्स / टुकड़े / footer.html.twig' का@mytheme/fragments/footer.html.twig
समाधान करेगा

15

विषय निर्देशिका के लिए एक पूर्ण पथ का उपयोग करें। यदि आप नामस्थान का उपयोग करते हैं, तो आपको कोड को किसी अन्य साइट या थीम पर लाने पर इसे बदलना होगा।

यह काम करना चाहिए:

{% include directory ~ '/templates/parts/footer.html.twig' %}

सब-थीम करते समय यह बहुत उपयोगी है। इसे अपने पैरेंट थीम में सेट करें, और फिर चाइल्ड थीम के टेम्प्लेट डायरेक्टरी में एक वर्जन रखें।
एंड्रयू किलेन

यह एकमात्र उत्तर है जिसने मेरे लिए काम किया।
अर्नोल्डबर्ड

5

फ़ाइल के मौजूद न होने पर कमबैक करने के लिए ऐरिग के ट्विग का उपयोग करना भी संभव है।

उदाहरण के लिए। यदि footer.html.twig उपलब्ध नहीं है, तो defaultfooter.html.twig का उपयोग किया जाएगा।

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}
फ़ाइल नाम में चर के उपयोग के साथ इसे मिलाएं और आप किसी प्रकार के संदर्भ के आधार पर विभिन्न फ़ाइलों को शामिल कर सकते हैं।

नायब: मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि यह सबसे अच्छा अभ्यास है या नहीं।


5

ध्यान दें कि आप withकीवर्ड के बाद चर पास कर सकते हैं :

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Twig प्रलेखन देखें http://twig.sensiolabs.org/doc/tags/include.html


4

अब जब थीम रजिस्ट्री के आधार पर टिग टेंपल इनहेरिटेंस जोड़ें, सक्षम करें टिग लोडर को जोड़ने के लिए प्रतिबद्ध किया गया है, आप निम्न लाइन का भी उपयोग कर सकते हैं।

{% include 'footer.html.twig' %}

1
यह काम नहीं करता है।
अर्नोल्डबर्ड

1

द्रुपाल 8 के लिए

विषय में एक टहनी फ़ाइल भी शामिल है जब आप एक कर {% include 'FILE_NAME.html.twig' %}Drupal को उम्मीद है कि आप फ़ाइल अपने वर्तमान विषय निर्देशिका में स्थित हो जाएगा। बस इसे वहाँ रखो और यह काम करने जा रहा है।

अपने मॉड्यूल में एक टहनी फ़ाइल सहित

यदि आप इसे एक MODULE में जोड़ना चाहते हैं, तो आपको इसे THEME फ़ंक्शन में घोषित करना होगा। अपनी .module फ़ाइल में बस निम्नलिखित जोड़ें:

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

फिर अपनी Twig फाइल को Your_MODULE / टेम्पलेट / FILE_NAME.html.twig में डालें


यह पथ के बारे में गलत जानकारी है। थीम हुक के साथ फ़ाइल से फ़ाइल को शामिल करने के लिए, आपको दूसरे तरीके की आवश्यकता है: {{शामिल करें ('@ yourModuleName / twigFileName.html.twig', {var1: var1Val, var2: var2Val}}}} मत भूलना, कि टेम्प्लेट फ़ाइलें अवश्य होनी चाहिए 'yourModuleName / टेम्पलेट्स /' में हों।
वेर्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.