Magento Block और Block Type को समझना


105

मैं सिर्फ इसका अर्थ समझना चाहता हूं

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

मुझे Google से कई संदर्भ मिले और इसके बारे में बहुत सी बातें समझ में आईं लेकिन मैं अभी भी type="page/html"अपने कस्टम मॉड्यूल के लिए एक प्रकार बनाने के तरीके को समझने में असमर्थ हूं।

कृपया समझाएँ

type="A/B"

मुझे पता है कि यह ए और बी कहाँ से आते हैं?

जवाबों:


126

Aएक मॉड्यूल का है उर्फ । इस मामले pageमें कम है Mage_Page_Block( app/code/core/Mage/Page/etc/config.xmlयदि आप देखना चाहते हैं तो यह परिभाषित किया गया है )।

Bउर्फ करने के लिए वर्ग के नाम रिश्तेदार है, प्रत्येक शब्द के प्रारंभिक अक्षरों बड़े रहेंगे। इस मामले में htmlहो जाता है Htmlऔर हल किए गए उपनाम से जोड़ दिया जाता है, इसलिए यह है Mage_Page_Block_Html। यह शायद फ़ाइल में पाया जाता है app/code/core/Mage/Page/Block/Html.phpक्योंकि वर्ग के नाम सीधे Magento के स्थानों में अनुवाद करते हैं।

क्या आप एक ब्लॉक उर्फ ​​के बजाय एक मॉडल उपनाम का उपयोग कर रहे थे तो इसके बजाय pageहोगा Mage_Page_Model। यही बात रिसोर्स मॉडल और हेल्पर्स के लिए भी होती है। अपने स्वयं के मॉड्यूल यह के दशक में इन परिभाषित करने के लिए की आवश्यकता होगी config अगर यह ब्लॉक, मॉडल और सहायकों है।


@ घड़ी की बाजी बहुत बहुत धन्यवाद। आपका जवाब मेरे लिए बहुत मददगार है।
अनूप

आपने मुझे एक टन बचाया। धन्यवाद।
सुमित मलिक

अच्छा स्पष्टीकरण
जलप्रेश पटेल

क्या होगा अगर यह फिर से लिखा / अधिलेखित ब्लॉक है, तो मैं ब्लॉक प्रकार को कैसे परिभाषित और उपयोग कर सकता हूं?
विक्की देव

@VyyDev आपको कुछ अलग करने की आवश्यकता नहीं है क्योंकि नया ब्लॉक पुराने ब्लॉक का वंशज होगा और इसलिए संगत है। आप कर सकते हैं, और दिखावा करना चाहिए, यह भी मौजूद नहीं है।
clockworkgeek

158

Magento ब्लॉक के प्रकारों के बारे में और अधिक समझने के लिए कुछ अंतर्निहित ब्लॉक प्रकार हैं जो व्यापक रूप से लेआउट में उपयोग किए जाते हैं।

  1. core/template: यह ब्लॉक इसकी template विशेषता द्वारा परिभाषित एक टेम्पलेट प्रदान करता है  । लेआउट में परिभाषित अधिकांश ब्लॉक टाइप या उपप्रकार के हैं  core/template
  2. page/html: यह core/template रूट ब्लॉक का एक उपप्रकार है  और परिभाषित करता है। अन्य सभी ब्लॉक इस ब्लॉक के चाइल्ड ब्लॉक हैं।
  3. page/html_head: पृष्ठ के एचटीएमएल हेड अनुभाग को परिभाषित करता है जिसमें जावास्क्रिप्ट, सीएसएस आदि के लिए तत्व शामिल हैं।
  4. page/html_header: पृष्ठ के हेडर भाग को परिभाषित करता है जिसमें साइट लोगो, शीर्ष लिंक आदि शामिल हैं।
  5. page/template_links: इस ब्लॉक का उपयोग लिंक्स की सूची बनाने के लिए किया जाता है। पाद और हेडर क्षेत्र में दिखाई देने वाले लिंक इस ब्लॉक प्रकार का उपयोग करते हैं।
  6. core/text_list: जैसे कुछ ब्लॉक  contentleftright आदि प्रकार के होते हैं  core/text_list। जब ये ब्लॉक प्रदान किए जाते हैं, तो getChildHtml() विधि को कॉल करने की आवश्यकता के बिना उनके सभी बाल ब्लॉक स्वचालित रूप से प्रदान किए जाते हैं ।
  7. page/html_wrapper: इस ब्लॉक का उपयोग एक रैपर ब्लॉक बनाने के लिए किया जाता है जो एक्शन द्वारा निर्धारित HTML टैग के अंदर अपने बच्चे को ब्लॉक करता है  setHtmlTagName। डिफ़ॉल्ट टैग  <div> अगर कोई तत्व सेट नहीं है।
  8. page/html_breadcrumbs: यह ब्लॉक पेज पर ब्रेडक्रंब को परिभाषित करता है।
  9. page/html_footer: पृष्ठ का पाद लेख क्षेत्र परिभाषित करता है जिसमें पाद लेख, कॉपीराइट संदेश आदि होते हैं।
  10. core/messages: यह ब्लॉक त्रुटि / सफलता / सूचना संदेशों को प्रस्तुत करता है।
  11. page/switch: इस ब्लॉक का उपयोग भाषा या स्टोर स्विचर के लिए किया जा सकता है।

यह केवल आमतौर पर उपयोग किए जाने वाले ब्लॉक प्रकारों की एक सूची है। कई अन्य ब्लॉक प्रकार हैं जो उन्नत थीम कार्यान्वयन में उपयोग किए जाते हैं।


क्या के बारे में: {{ब्लॉक प्रकार = "सेमी / ब्लॉक" ब्लॉक_िड = "शर्तें"}}
daslicht

5
@daslicht ने पहले ही उत्तर में उल्लेख किया है कि: यह केवल आमतौर पर उपयोग किए जाने वाले ब्लॉक प्रकारों की एक सूची है। कई अन्य ब्लॉक प्रकार हैं जो उन्नत थीम कार्यान्वयन में उपयोग किए जाते हैं।
कामेश जंगी

धन्यवाद। वाकई मददगार था।
अर्काम

8
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

पेज एक फ़्रंटेंडनाम है जिसे etc/config.xmlफ़ाइल में परिभाषित किया गया है html एक ब्लॉक क्लास नाम है

अधिक जानकारी:

इस पंक्ति में type(type="page/html")आपके से संबंधित ब्लॉक वर्ग नाम निर्धारित है template(template="example/view.phtml">)और प्रत्येक ब्लॉक के लिए नाम अद्वितीय है।

पहले फ़ोल्डर संरचना देखें

एप्लिकेशन> स्थानीय> नाम स्थान> modulename> आदि> config.xml

हम ने ठीक किया FrontendName = 'mymodule'

app> स्थानीय> नाम स्थान> modulename> ब्लॉक > hello.php

hello.php में आपने एक फंक्शन बनाया

   class namespace_modulename_Block_Data extends Mage_Core_Block_Template
   {
    public function mydata()
        {
            $data = "Block is called";
            return $data;
         }     
}   

और अब अपने लेआउट xml पेज पर आएं:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> यहाँ mydata नाम दृश्यपटल है

और अब अपने टेम्पलेट पर आते हैं

टेम्पलेट / उदाहरण / view.phtml पेज

यहाँ आप सीधे mydata () फ़ंक्शन को कॉल कर सकते हैं

पसंद

<div>
<?php echo $this->mydata(); ?>
</div>

अब आप ब्राउज़र में अपना आउटपुट प्राप्त कर सकते हैं "ब्लॉक कहा जाता है"


आपने ब्लॉक का नाम hello.php रखा है लेकिन ब्लॉक क्लास का नाम 'namepace_modulename_Block_Data' है, तो क्या यह नाम के अंत में हैलो नहीं होना चाहिए?
राय एहतिशाम

5

मैं "बी" प्रकार के बारे में नहीं जानता, लेकिन "ए" आपके मॉड्यूल नाम टैग को config.xml में config.xml उदाहरण में संदर्भित करता है:

<A><!-- script --></A>

नहीं, तुम गलत नहीं हो। लेकिन "<!-- script -->"भ्रामक हो सकता है। आइए स्पष्ट करें: जैसा कि उपरोक्त उत्तर में कहा गया है, यह एक उपनाम है, जिसमें दो भाग शामिल थे, पहला भाग ("ए") खुद उर्फ ​​है जिसे आप अपने मॉड्यूल में अपने मॉड्यूल की कक्षाओं में परिभाषित करते हैं config.xml, दूसरा एक पथ के सापेक्ष है नोड का मान। ये सब एक साथ ("ए" + पूंजीकृत "बी") पहले भाग ("ए" नोड के मूल्य) का उपयोग करते हुए एक वर्ग के नाम पर अनुवादित किया जाएगा, जैसा कि आप इसे परिभाषित करते हैं (यदि आप घंटों नहीं चाहते हैं तो ऊपरी / निचले हिस्से के लिए देखें) पीड़ित) और दूसरे भाग को प्रत्येक अंडरस्कोर के बाद कैपिटल किया जाता है। तो, A / B उदाहरण के साथ एक ब्लॉक और इस कॉन्फिग से शुरू करें:

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>

रनटाइम में मैगेंटो A/Bकॉन्फिगर द्वारा हल किया Vendor_Module_Block_Bजाएगा जिसमें निम्न पथ से ऑटोलॉड द्वारा शामिल किया जाएगा public/app/local/Vendor/Module/Block/B.php:। आप पर एक नज़र लेने के लिए एक बेहतर समझ मैं सलाह प्राप्त करने के लिए Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()और Varien_Autoload::autoload()


3

मैं "B" प्रकार के बारे में नहीं जानता, लेकिन "A" config.xml में आपके मॉड्यूल नाम टैग को संदर्भित करता है

Config.xml फ़ाइल में एक उदाहरण:

<A><!-- script --></A>

nb: मुझे आशा है कि मैं गलत नहीं हूँ ..

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