getChildHtml과 getBlockHtml의 차이점은 무엇입니까


11

개요

  • 차이점은 무엇이며 getChildHtml그리고 getBlockHtml?
  • 템플릿에서 cms / block 제목을 얻으려면 어떻게해야합니까?

기본적으로 바닥 글을 내 바닥 글로 바꾸고 내 자신을 설정했습니다 . <?= $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.
Marius

내 생각 엔 당신이 맞다; 실제 문제는 마 젠토와 관련이 없었지만 이전 바닥 글 블록을 덮어 썼습니다. 당신의 대답은 내 가정을 명확하게합니다-고마워요 d00d :)
ash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.