Magento 2 - ब्लॉक नाम बनाम नाम के रूप में


10

मैं Magento 2 में कुछ काम कर रहा हूँ और कुछ मॉड्यूल ओवरराइट कर रहा हूँ (सामने वाले पर)।

हालाँकि आज मैं कुछ ऐसा कर चुका हूँ जो मैंने पहले कभी नहीं किया है। जो मॉड्यूल मैं उपयोग कर रहा हूं, उसके अंदर एक ब्लॉक है जिसमें निम्नलिखित हैं:

<referenceBlock name="product.info.details">
    <block class="Vender\Module\Block\Catalog\Related" name="posts.tab" as="blog.posts"
               template="Vender_Module::catalog/posts.phtml" group="detailed_info">
    </block>
</referenceBlock>

यह अपना नाम निर्धारित करता है:

posts.tab

और फिर इसका उपयोग करने की अनुमति के रूप में कहा जाता है:

के रूप में = "blog.posts"

जब मैंने ब्लॉक को संदर्भित करने की कोशिश की, तो जैसा कि मैंने देखा था कि यह पृष्ठ से इसे हटा नहीं रहा था:

<referenceBlock name="product.info.details">
    <referenceBlock as="blog.posts" remove="true"/>
</referenceBlock>

इसलिए मैं यह देखने के लिए गया कि पेज वास्तव में फ्रंटएंड पर क्या कहलाता है (बस इसे कहीं और नाम दिया जा रहा था या पोस्ट्स का उपयोग नहीं किया गया था। नाम) - ब्लॉक का नाम पोस्टबास के साथ बुलाया जा रहा है , जो ठीक है जैसा कि मैं सिर्फ संदर्भ है कि इसे हटाने के लिए ब्लॉक कर सकते हैं। यह ठीक काम किया।

लेकिन मेरे सवाल, क्यों ब्लॉक का उपयोग के माध्यम से खींचा जा रहा है नहीं किया जाता है के रूप में और के बजाय का उपयोग कर के माध्यम से खींचा जा रहा है नाम

दूसरी बात यह है कि क्या में है के रूप में , क्योंकि स्पष्ट रूप से ब्लॉक परस्पर विरोधी नाम वैसे भी हो सकता है नहीं और अद्वितीय होना चाहिए - लेकिन मैं पूरी तरह से गलत हो सकता है।

जवाबों:


2

इस उदाहरण में ऐसा लगता है जैसे यह विशेषता बेकार है (जब तक कि इसका अन्यत्र उपयोग नहीं किया जाता है), मुझे नहीं लगता कि इसे कोई फर्क पड़ता है अगर इसे नाम या उपनाम के माध्यम से बुलाया जाता है, तो यह डेवलपर पर निर्भर है कि क्या उपयोग करना है - बस ध्यान दें यदि कोई अन्य व्यक्ति सेट है, तो आपको कॉल करते समय उसका उपयोग करना होगा getChildHtml

व्यक्तिगत रूप से मैं केवल एक लंबे ब्लॉक नाम को छोटा करने के लिए अन्य का उपयोग करूँगा / और इसे टेम्पलेट के माध्यम से प्रदान करते समय आसानी से पठनीय बना सकता हूं। उदाहरण के लिए यदि checkout.header.logo.textउपयोग किए जाने की आवश्यकता है logo.textऔर header.logo.textपहले से ही उपयोग किए जाते हैं, तो आप logoTextसभी ब्लॉकों पर उपनाम का उपयोग कर सकते हैं। जब तक वे एक ही लेआउट हैंडल और संदर्भ में सेट नहीं किए जाते हैं, तब तक वे एक ही उपनाम के उपयोग से अन्य ब्लॉकों के प्रतिपादन को प्रभावित नहीं करेंगे।

TL: DR यह बहुत अंतर नहीं करता है, यह पठनीयता / नाम को छोटा करने के लिए अधिक है।

टिप्पणियाँ

इस M1 प्रश्न में थोड़ी अधिक जानकारी है - 'नाम' का उपयोग कब करें और 'के रूप में' का उपयोग कब करें

मुझे यकीन नहीं है कि अगर यह एम 2 पर लागू होता है, लेकिन एम 1 में कम से कम एक तर्क था जिसे विशेषता कहा aliasजाता है as, मुझे लगता है कि यह ब्लॉक डालने या परेशान करने से संबंधित था।

फेबियन शेंगलर के अनुसार: "यदि ब्लॉक एक उपनाम को परिभाषित किए बिना बनाया गया था, तो नाम के लिए अन्य उपनाम चूक करता है।" यह एम 1 की बात कर रहा है लेकिन मुझे लगता है कि यही बात एम 2 पर लागू होती है।


अभी 2.3.1 पर मैं नाम सेChildHtml नहीं पा सका क्योंकि ब्लॉक में "उपनाम" था। उर्फ को हटाने के बाद ही मैं एक टेम्पलेट में ब्लॉक प्राप्त कर सका।
TheKitMurkit

अच्छा बिंदु @ TheKitMurkit - मैंने अपने उत्तर में थोड़ा सा जोड़ा है कि "यदि कोई उपनाम सेट है तो आपको getChildHtml कॉल करते समय इसका उपयोग करना होगा।" धन्यवाद।
बेन क्रुक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.