Я пытаюсь реорганизовать правую боковую панель. В шаблоне (2 столбца справа) он вызывает:
<?php echo $this->getChildHtml('right') ?>
Где я могу найти содержимое этой переменной?
Я пытаюсь реорганизовать правую боковую панель. В шаблоне (2 столбца справа) он вызывает:
<?php echo $this->getChildHtml('right') ?>
Где я могу найти содержимое этой переменной?
Вызов метода getChildHtml()
загружает HTML для дочернего блока с именем, которое передается методу, поэтому в этом случае мы ищем дочерний блок с именем right.
Чтобы определить, где найти этот дочерний блок, нам нужно знать, какой блок вызывает этот метод. Я знаю, что этот конкретный вызов метода getChildHtml()
появляется в шаблоне столбца главной страницы, поскольку right является одним из столбцов. Итак, загляните в файл макета 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>
позволяет запускать метод блока внутри блока, с которым вы работаете. Таким образом, этот раздел макета устанавливает шаблон внутри блока root. Отсюда мы знаем, что это блок root, вызывающий метод 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 и определено довольно много дочерних блоков. Один из этих дочерних блоков называется right, и это именно этот блок, HTML-код которого выводится методом getChildHtml()
. Важно отметить тип блока — core/text_list
. Это особый тип блока, который означает, что при рендеринге HTML для этого блока с использованием метода getChildHtml()
дочерние блоки также будут рендериться. Если бы тип блока был page/html
, как и в случае с корневым блоком, каждый дочерний блок, добавленный к блоку right, нуждался бы в собственном вызове метода getChildHtml()
, используя этот тип блока, вам нужен только вызов getChildHtml('right')
и всех дочерних блоков. блоки также будут отображаться.
Как видите, здесь определен блок right, но он пуст. Это связано с тем, что точно так же, как ваш тег ссылается на корневой блок (<reference name="root">
), другие файлы макета добавляют дочерние блоки к блоку right, ссылаясь на блок right.
<reference name="right">
...
</reference>
Итак, чтобы, наконец, ответить на ваш вопрос (и, надеюсь, немного сообщить по пути), вам нужно искать в файлах макета, отличных от page.xml
, ссылки на блок right, здесь вы найдете все дочерние вывод содержимого вызовом метода getChildHtml()
.
Вы можете изменить то, что добавляется в блок right в вашем собственном файле макета модуля или в файле макета 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. ком/вопросы/39340112/
- person may; 06.09.2016