Я ведущий разработчик Magento, создал несколько моих собственных тем, и я хочу лучше понять расположение блоков XML Magento...
Обычно я использую файл local.xml
для управления всем, я могу определить блок следующим образом:
<cms_index_index>
<reference name="root">
<block type="core/template" name="example_block" as="exampleBlock" template="page/html/example-block.phtml"/>
</reference>
</cms_index_index>
Это создаст блок на домашней странице (cms_index_index
), и поскольку блок создается на одном уровне в root
, я бы обычно вызывал блок, добавляя:
<?php echo $this->getChildHtml('exampleBlock') ?>
... до 1column.phtml
(или 2columns-left
/right.phtml
, 3columns.phtml
и т.д.). Блок можно поместить на любую страницу, заменив cms_index_index
на соответствующий тег страницы.
Я вижу такие вещи, как следующие в основных файлах XML, и в учебниках:
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
content
- это блок, который является частью общей структуры страниц magento, и, насколько я понимаю, before="content"
должен размещать его там, где вы ожидаете, без использования getChildHtml('exampleBlock')
, пока что так хорошо.. однако, до/после почти никогда не работает для меня, и я часто нахожу, что прибегаю к методу getChildHtml как резервное копирование, что не всегда идеально, и означает редактирование больше .phtml файлов, чем это необходимо.
Я пробовал:
<reference name="root">
<block type="core/template" name="example_block" before="content" template="page/html/example-block.phtml"/>
</reference>
Ничего не появляется...
<reference name="root">
<block type="core/template" name="example_block" after="header" template="page/html/example-block.phtml"/>
</reference>
Все еще ничего.... Я также знаю, что я использовал before="-"
или after="-"
, чтобы поместить что-то перед всем внутри него родительским блоком. Мне иногда повезло с этим, но, как правило, просто путайте и расстраивайтесь.
Я искал по всему миру "magento xml до/после того, как не работал", и начал задаваться вопросом, может ли это просто меня это случилось... может кто-нибудь объяснить, когда я могу и не могу использовать до/после, чтобы позиционные блоки? Что не так с приведенными выше примерами?
Я в magento 1.7.0.2 (последний доступен во время публикации)
Основная мотивация для этого - уменьшить количество основных .phtml файлов, которые мне нужно изменить, просто добавив getChildHtml()
, поэтому, если есть другой (XML) способ обойти это, мне было бы интересно узнать...