Опитвам се да реорганизирам дясната си странична лента. В шаблона (2 колони-дясно), той извиква:
<?php echo $this->getChildHtml('right') ?>
Къде мога да намеря съдържанието на тази променлива?
Опитвам се да реорганизирам дясната си странична лента. В шаблона (2 колони-дясно), той извиква:
<?php echo $this->getChildHtml('right') ?>
Къде мога да намеря съдържанието на тази променлива?
Извикването на метод 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
в моя отговор тук с примерен синтаксис за добавяне на нови блокове и премахване на блокове, добавени в други файлове с оформление.
Ще намерите във вашия файл layout.xml, откъдето идва всичко. Той ще има списък с блокове, под които идват .phtml файлове и данни. Надявам се, че разбирате какво се опитвам да предам.
<reference name="right">
<block type="yourmodule/yourblock" name="yourblock" as="yourblock" />
</reference>
Можете да добавите вашите персонализирани блокове там по този начин.
<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