GetChildHtml और getBlockHtml में क्या अंतर है


11

सार

  • बीच क्या अंतर है getChildHtmlऔर getBlockHtml?
  • मैं टेम्पलेट में सेमी / ब्लॉक शीर्षक कैसे प्राप्त कर सकता हूं?

मैंने अनिवार्य रूप से पाद लेख को अपने स्वयं के पाद लेख से बदल दिया है और अपना स्वयं का सेट <?= $this->getChildHtml('...') ?>किया है जब तक मैंने उपयोग नहीं किया: यह काम नहीं किया <?= $this->getBlockHtml('...') ?>

लेआउट XML:

<layout>
    <default>
        <block type="core/template" name="custom_footer" as="footer" template="page/html/footer.phtml">
            <block type="cms/block" name="child_1">
                <action method="setBlockId"><block_id>footer_child_1</block_id></action>
            </block>
         </block>
    </layout>
</default>

टेम्पलेट (काम नहीं करता है):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getChildHtml('child_1') ?></div>
    </div>
</footer>

टेम्प्लेट (कार्य):

<footer>
    <div class="row">
        <div class="col-sp4"><?= $this->getBlockHtml('child_1') ?></div>
    </div>
</footer>

उपाय:

सबसे पहले मुझे अपने अंदर के पाद लेख को ओवरराइड करना पड़ा local.xml:

<default>
    <block type="core/template" template="page/html/custom_footer.phtml" name ="custom_footer" as "footer" />
</default>

मुझे अपने बच्चों को जोड़ना था ( getChildHtml()काम करने के लिए):

<reference name="footer">
    <block type="cms/block" name="child_1">
         <action method="setBlockId"><block_id>footer_child_1</block_id></action>
    </block>
</reference>

जवाबों:


27

getBlockHtml('block_name_here')block_name_hereअगर आप इसे लेआउट में पाते हैं तो ब्लॉक के html को नाम के साथ कहीं भी ...
getChildHtml('block_name_here')आपको ब्लॉक का html block_name_hereकेवल नाम से मिलता है, यदि वह ब्लॉक वर्तमान ब्लॉक का बच्चा है।

यहाँ एक उदाहरण है। अगले लेआउट अनुभाग पर विचार करें

<block type="core/template" template="some_template.phtml" name="some_name" />
<block type="core/template" template="some_other_template.phtml" name="some_other_name" />

अब टेम्पलेट फ़ाइल में some_template.phtmlयदि आप कोड की इस पंक्ति को जोड़ते हैं तो आपको <?php echo $this->getBlockHtml('some_other_name')?>ब्लॉक के लिए html मिल जाएगा some_other_name
अगर आप जोड़ते हैं <?php echo $this->getChildHtml('some_other_name')?>तो आपको कुछ नहीं मिलेगा।

निम्नलिखित परिदृश्य में

<block type="core/template" template="some_template.phtml" name="some_name">
    <block type="core/template" template="some_other_template.phtml" name="some_other_name" />
</block>

getChildHtmlऔर getBlockHtmlआपको वही मिलेगा। ब्लॉक का html some_other_name


धन्यवाद - तो क्या मैं यह सोचने में सही हूं कि मेरे अपडेट किए गए सवाल में कि: ब्लॉक <block type="cms/block" name="child_1">का बच्चा है footer? किस मामले में `getChildHtml ('child_1') काम क्यों नहीं करता है?
राख

@Ash। मुझे लगता है कि आपके मामले में यह getChildHtmlकाम नहीं करता है क्योंकि लेआउट पेज (उदाहरण के लिए 3columns.phtml) अभी भी डिफ़ॉल्ट पाद लेख ब्लॉक प्रदान करता है। मेरा मतलब है कि यह इसके <?php echo $this->getChildHtml('footer') ?>अंदर है। क्या मैं सही हू? मैं यहां अंधेरे में शूटिंग कर रहा हूं क्योंकि मुझे नहीं पता कि आपका लेआउट पृष्ठ कैसा दिखता है, लेकिन यह पहली चीज है जिसे मैं जांचूंगा। इसे बदलने का प्रयास करें <?php echo $this->getChildHtml('custom_footer') ?>और देखें कि क्या आप उपयोग कर सकते हैं getChildHtml
मारीस

मुझे लगता है कि आप सही हैं; मैंने पुराने फूटर ब्लॉक को काम कर लिया था - यद्यपि वास्तविक समस्या मैगनेटो से संबंधित नहीं थी। आपका उत्तर मेरी मान्यताओं को स्पष्ट करता है - धन्यवाद d00d :)
ash
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.