कस्टम ब्लॉक टेम्पलेट फ़ाइल के लिए चर पास करें


11

मैं Drupal 8 में कस्टम सामग्री के साथ अपना कस्टम ब्लॉक बनाना चाहता हूं, शुरू में मैं इस पर सिर्फ साधारण पाठ के साथ ब्लॉक बनाता हूं, और सही ढंग से काम करता हूं, मेरी समस्या यह है कि मैं अपने कस्टम चर को कैसे पास कर सकता हूं? मैंने इसके बारे में कुछ ट्यूटोरियल देखा, मेरा मॉड्यूल नाम है tcdevऔर यह .moduleफ़ाइल की सामग्री है ।

function tcdev_theme($existing, $type, $theme, $path) {
    return array('tcdev' =>
        array(
            'variables' => array(
                'title' => 'Default title',
                'description' => null
            ),
            'template' => 'block--sliderblock'
        )
    );
}

और मेरा SliderBlock.php

    namespace  Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;


/**
 * Provides a 'SliderBlock' block.
 *
 * @Block(
 * id = "slider_block",
 * admin_label = @Translation("Slider Block"),
 * )
 */

class SliderBlock extends BlockBase{
    /**
     * {@inheritdoc}
     */
    public function build(){
        return array(
            '#title' => 'my title ',
            '#description' => 'my custom desc'
        );
}
}

और अंत में मेरी टेम्पलेट फ़ाइल block--sliderblock.html.twig

  <h2>My Custom Block{{ title }}-{{ description }}</h2>

लेकिन परिणाम केवल "मेरा कस्टम ब्लॉक-" है। समस्या यह है कि चर को टेम्प्लेट फ़ाइल में पास नहीं किया जा रहा है, मेरी गलती कहाँ है?

किसी भी मदद की सराहना करते हैं

जवाबों:


15

आपकी वापसी सरणी में एक #themeकुंजी नहीं है । तो इस समय आप एक टेम्पलेट फ़ाइल का उपयोग नहीं कर रहे हैं।

और आपके पास संभवतः बाहरी ब्लॉक और ब्लॉक के अंदर सामग्री को थीम करने के बीच मिश्रण है। आपके टेम्प्लेट में नाम tcdev है, क्योंकि यह वह नाम है जिसे आपने सरणी के शीर्ष पर परिभाषित किया है *_theme(), और tcdev.html.twig वह जगह है जहां आपके चर समाप्त हो जाएंगे।

आपका कोड निम्नलिखित की तरह दिखेगा।

function tcdev_theme($existing, $type, $theme, $path) {
  return array('tcdev' =>                  // this is the name of the template
           array(
            'variables' => array(
                'title' => 'Default title',
                'description' => null
            ),
        )
    );
}

SliderBlock.php

namespace  Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;


/**
 * Provides a 'SliderBlock' block.
 *
 * @Block(
 * id = "slider_block",
 * admin_label = @Translation("Slider Block"),
 * )
 */

class SliderBlock extends BlockBase{
    /**
     * {@inheritdoc}
     */
    public function build() {
        return array(
            '#theme' => 'tcdev',
            '#title' => 'my title ',
            '#description' => 'my custom desc'
        );
   }
}

tcdev.html.twig

  <h2>My Custom Block{{ title }}-{{ description }}</h2>

आपने लिखा कि आपने इसके बारे में कुछ ट्यूटोरियल देखे। संभवतः यह दो अलग-अलग विषयों के बारे में था, और आप उन्हें उसी समय लागू करने का प्रयास कर रहे हैं।

पहले लिंक में कस्टम टेम्पलेट tcdev.html.twig है। दूसरी कड़ी में विधि के साथ आप जो करने की कोशिश कर रहे हैं, वह है - स्लाइडरब्लॉक.html.twig।


लेकिन block--sliderblock.html.twigगाया, समस्या यह है कि मेरे चर को कैसे पास किया जाए !!!? मेरे कोड के अनुसार आप मुझे क्या सुझाव देते हैं। ? आपके ध्यान के लिए tnx
युसेफ

आप एक ब्लॉक के अंदर चर की सामग्री चाहते हैं? फिर यह ब्लॉक टेम्पलेट से जुड़ा नहीं है, क्योंकि यह ब्लॉक के बाहर के लिए है। ( block--sliderblock.html.twigरेंडर किया गया है, क्योंकि आपने एक थीम सुझाव के नाम का इस्तेमाल किया है, यह रेंडर करेगा भले ही ब्लॉक पूरी तरह से खाली हो, आप यह कोशिश कर सकते हैं)
4k4

मैंने चीजों को स्पष्ट करने के लिए आपके कोड को बदलने की कोशिश की, आशा है कि यह काम करता है, इसे डीबग नहीं किया।
4k4

मैं आपका कोड लागू करता हूं, कैश का पुनर्निर्माण करता हूं, लेकिन फिर भी इससे पढ़ा जाता है block--sliderblock.html.twigऔर इसके लिए कुछ भी पारित नहीं होता है। मैं डिबग जानकारी सक्षम करता हूं और डिबग जानकारी है<!-- END OUTPUT from 'themes/bootstrap/templates/block/block--system-branding-block.html.twig' <!-- FILE NAME SUGGESTIONS: x block--sliderblock.html.twig * block--slider-block.html.twig * block--tcdev.html.twig * block.html.twig --> <!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' --> <h2>Block-</h2>
Yusef

आपके चरों द्वारा नहीं पढ़ा जाता है block--sliderblock.html.twig। यह टेम्प्लेट अपने स्वयं के सेट चर के साथ काम करता है। (यदि आप इस टहनी का उपयोग करना चाहते हैं तो आपको इसे कोर या बेस थीम से कॉपी करना होगा और फिर आप देख सकते हैं कि चर क्या हैं)। बिल्ड फ़ंक्शन के रेंडर एरे में सेट किए गए आपके चर समाप्त हो जाएंगे tcdev.html.twig। क्या आपने इस टहनी फ़ाइल को बनाया है?
4k4

3

ताकि मैंने पाया, आप एक कस्टम ब्लॉक (मॉड्यूल) टेम्पलेट के साथ एक डिफ़ॉल्ट ब्लॉक टेम्पलेट को अधिलेखित करना चाहते हैं, और उसके बाद अपने चर को पास करें, सबसे पहले आपको यह सुनिश्चित करना होगा कि आप अपने टेम्पलेट को सही ढंग से ओवरराइट करें क्योंकि लगता है कि आपका वर्तमान ब्लॉक टेम्पलेट आपके द्वारा आउटपुट किया गया है थीम निर्देशिका (मॉड्यूल नहीं):

<!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' -->

ऐसा करने के लिए आपको पहले templates/अपने मॉड्यूल रूट में एक डायरेक्टरी बनानी चाहिए और फिर अपने टेम्पलेट को वहां रखना होगा।

अब Drupal को बताएं कि आप अपने मॉड्यूल में टेम्पलेट को स्टोर करते हैं। your_module.moduleइस समारोह में जोड़ें:

function YOUR_MODULE_theme($existing, $type, $theme, $path) {
  return array(
    'block__my_module' => array(
      'render element' => 'elements',
      'template' => 'block--my-module',
      'base hook' => 'block'
    )
  );
}

अंत में सावधान रहें कि आप अपनी टहनी फ़ाइल को कहाँ रखते हैं और आप इसे क्या कहते हैं। अपने मॉड्यूल डायरेक्टरी में टेम्प्लेट डायरेक्टरी बनाएं, और _थीम फ़ंक्शन नाम को इसके साथ बदलें -:
mymodule-block.html.twig

कैश को साफ़ करना न भूलें।


Nicensinइस पोस्ट में लिखे गए उत्तर की मदद से :
Drupal 8 कस्टम ब्लॉक (मॉड्यूल) ट्विग टेम्पलेट फ़ाइल बनाता है


1
ओपी ने किन चरों के बारे में पूछा?
लेमनकैंस

1

मुझे भी यह बात सूझी। चरों को ब्लॉक टेम्प्लेट में पास नहीं किया जाता है। आपके पास लगभग समान कोड है, मेरे मामले में मैंने twig डिबग को सक्षम किया और कैशे को services.yml में अक्षम कर दिया। कैश को साफ़ करते हुए भी मैं इस समस्या को हल कर रहा था, लेकिन अपने देव परिवेश में इस कॉन्फ़िगर को सक्रिय करते ही मैं हल हो गया।

twig.config:    
# Not recommended in production environments
# @default false
debug: true
# Not recommended in production environments
# @default null
auto_reload: true
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.