Къде е съдържанието на ‹?php echo $this-›getChildHtml(’right’) ?›

Опитвам се да реорганизирам дясната си странична лента. В шаблона (2 колони-дясно), той извиква:

<?php echo $this->getChildHtml('right') ?>

Къде мога да намеря съдържанието на тази променлива?


person Urvisha    schedule 16.04.2013    source източник


Отговори (3)


Извикването на метод getChildHtml() зарежда HTML за дъщерния блок с името, което се предава на метода, така че в този случай търсим дъщерен блок с име right.

За да определим къде да намерим този дъщерен блок, трябва да знаем кой блок извиква този метод. Знам, че това конкретно извикване на метода getChildHtml() се появява в шаблона на колоната на главната страница като вдясно е една от колоните. Така че погледнете във файла с оформление page.xml и потърсете шаблонния файл, в който сте намерили извикването на метода, ще намерите нещо подобно:

<reference name="root">
    <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
    <!-- Mark root page block that template is applied -->
    <action method="setIsHandle"><applied>1</applied></action>
</reference>

Използването на маркера <reference> във файл с оформление ви позволява да промените целевия блок, а маркерът <action> ви позволява да стартирате блоков метод вътре в блока, с който работите. Така че този раздел на оформлението задава шаблона вътре в основния блок. От това знаем, че това е основният блок, който извиква метода getChildHtml().

След това нека да разгледаме къде е дефиниран блокът root в оформлението, той е в същия файл с оформление page.xml и трябва да е точно в горната част:

<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
    ...
    <block type="core/text_list" name="right" as="right" translate="label">
        <label>Right Column</label>
    </block>
    ...
</block>

Има доста дефинирани в този блок, но можете да видите, че му е дадено името root и дефинира доста дъщерни блокове. Един от тези дъщерни блокове се нарича десен и това е този блок, чийто HTML се извежда от метода getChildHtml(). Важно е да се отбележи типът на блока - core/text_list. Това е специален тип блок, което означава, че при изобразяване на HTML за този блок с помощта на метода getChildHtml(), дъщерните блокове също ще бъдат изобразени. Ако типът на блока беше page/html като с основния блок, всеки дъщерен блок, добавен към десния блок, щеше да има нужда от собствено извикване на метод getChildHtml(), като използвате този тип блок, имате нужда само от извикване до getChildHtml('right') и всички дъщерни блокове също ще бъдат изобразени.

Както можете да видите, блокът десен е дефиниран тук, но е празен. Това е така, защото по абсолютно същия начин, по който вашият маркер препраща към основния блок (<reference name="root">), други файлове с оформление добавят дъщерни блокове към десния блок, като препращат към десния блок.

<reference name="right">
    ...
</reference>

Така че, за да отговорите най-накрая на въпроса си (и да се надяваме да информирате малко по пътя), трябва да търсите във файлове с оформление, различни от page.xml за препратки към десния блок, тук ще намерите всички дъщерни извеждане на съдържание чрез извикване на метода getChildHtml().

Можете да промените това, което се добавя към десния блок във вашия собствен файл с оформление на модул или local.xml файл с оформление, ако не създавате модул. Разкривам накратко файла с оформлението local.xml в моя отговор тук с примерен синтаксис за добавяне на нови блокове и премахване на блокове, добавени в други файлове с оформление.

person Jonathan Hussey    schedule 16.04.2013

Ще намерите във вашия файл layout.xml, откъдето идва всичко. Той ще има списък с блокове, под които идват .phtml файлове и данни. Надявам се, че разбирате какво се опитвам да предам.

person Chiragit007    schedule 16.04.2013
comment
layout.xml == catalog.xml? @chiragit007 - person Urvisha; 16.04.2013

<reference name="right">  
    <block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
 </reference>

Можете да добавите вашите персонализирани блокове там по този начин.

person Chiragit007    schedule 16.04.2013
comment
аз също имам проблем с оформлението, бихте ли ми помогнали с това: <layout version="1.0"> <adminhtml_sales_order_shipment_view> <reference name="content"> <block type="paketid_booking/adminhtml_sales_order_shipment_view_booking" name="paketid_booking" template="paketid/booking.phtml" /> </reference> </adminhtml_sales_order_shipment_view> </layout> персонализираният ми блок не се показва в изгледа на пратката? какво ми липсва за пълен въпрос, погледнете: stackoverflow. com/questions/39340112/ - person may; 06.09.2016