GetChildHtml এবং getBlockHtml এর মধ্যে পার্থক্য কী


11

সংক্ষিপ্তসার

  • মধ্যে পার্থক্য কি getChildHtmlএবং getBlockHtml?
  • আমি কীভাবে টেমপ্লেটে সেমি / ব্লকের শিরোনাম পেতে পারি?

আমি মূলত আমার নিজের পাদচরণ সঙ্গে ফুটার প্রতিস্থাপিত হয়েছে এবং সেট আমার নিজের <?= $this->getChildHtml('...') ?>এই কাজটি পর্যন্ত আমি ব্যবহৃত করেনি: <?= $this->getBlockHtml('...') ?>

লেআউট এক্সএমএল:

<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যদি ব্লকের এইচটিএমএলকে নাম সহ পান তবে এটি যদি কোথাও লেআউটে এটি খুঁজে পায়।
getChildHtml('block_name_here')সেই ব্লকটি 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')?>ব্লকের জন্য এইচটিএমএল পাবেন 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আপনি একই জিনিস পাবেন। ব্লকের এইচটিএমএল some_other_name


ধন্যবাদ - তাহলে আমি কি এই ভাবনায় ঠিক আছি যে আমার আপডেট করা প্রশ্নে: ব্লকের <block type="cms/block" name="child_1">সন্তান footer? Case getChildHtml ('child_1') কেন কাজ করে না?
ছাই

@Ash। আমি মনে করি আপনার ক্ষেত্রে এটি getChildHtmlকাজ করে না কারণ লেআউট পৃষ্ঠা (উদাহরণস্বরূপ 3collines.phtml) এখনও ডিফল্ট ফুটার ব্লককে রেন্ডার করে I তার মানে এটির <?php echo $this->getChildHtml('footer') ?>ভিতরে রয়েছে । আমি কি সঠিক? আমি এখানে অন্ধকারে শুটিং করছি কারণ আপনার লেআউট পৃষ্ঠাটি কেমন দেখাচ্ছে তা আমি জানি না তবে আমি এই প্রথম জিনিসটি যাচাই করব। এটিকে পরিবর্তন করে <?php echo $this->getChildHtml('custom_footer') ?>দেখুন এবং ব্যবহার করতে পারবেন কিনা তা দেখুন getChildHtml
মারিয়াস

আমি মনে করি তুমি ঠিক; আমি যে পুরানো পাদলেখ ব্লকটি কাজ করছিলাম তা ওভাররাইট করেছিলাম - যদিও আসল সমস্যাটি ম্যাজেন্টো সম্পর্কিত নয়। ধন্যবাদ d00d :) - আপনার উত্তর আমার অনুমানের মুছে ফেলা হবে
ছাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.