Я хочу добавить блок в левую колонку только моего модуля, а не всего сайта.
Если я помещу это в <default>
тег будет показан на всем сайте, но я хочу сделать что-то вроде <mymodule_default>
, Является ли это возможным?
Я знаю, что могу поставить свой блок в каждом layout_handler
лайк:
<mymodule_controllername_actionname>
<reference name="left">
<block type="mymodule/block" name="left_navigation" before="-" template="mymodule/left-nav.phtml" />
</reference>
</mymodule_controllername_actionname>
но это не то, что я хочу, я хочу сделать это так:
<mymodule_default>
<reference name="left">
<block type="mymodule/block" name="left_navigation" before="-" template="mymodule/left-nav.phtml" />
</reference>
</mymodule_default>
Или это не предпочтительно?
Спасибо
Вы можете установить макет только для вашего пользовательского модуля. Например, вы хотите левую колонку, ваш файл макета должен быть таким,
<?xml version="1.0"?>
<layout version="0.1.0">
<modulename_index_index>
<reference name="root">
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
</reference>
<reference name="left">
<block type="modulename/left" name="modulename_left" template="modulename/left.phtml"/>
</reference>
</modulename_index_index>
</layout>
И page/2columns-left.phtml
имея содержимое вашей левой колонки.
Поместите этот XML-файл в ваше приложение / design / frontend / default / ИМЯ ТЕМЫ / template / layout / module.xml
И не забудьте рассказать об этом в файл конфигурации вашего модуля (config.xml). Так должно быть,
<config>
...
<frontend>
<layout>
<updates>
<modulename>
<file>modulename.xml</file>
</modulename>
</updates>
</layout>
...
</frontend>
</config>
Обновить:
В соответствии с расположением magento правила , можете добавить <default>
в вашем модуле. Таким образом, он может установить, что блок будет доступен для всех страниц (контроллеров) в этом модуле.
Вот и все. Дайте мне знать, если у вас есть какие-либо сомнения.
Получил ответ на другом сайте, скопировав его сюда:
Вы можете добавить только дескриптор обновления макета в каждом контроллере
public function preDispatch()
{
parent::preDispatch();
$this->getLayout()->getUpdate()
->addHandle('mymodule_default');
}
Или с инструкцией <update handle="mymodule_default"/>
в целом <mymodule_controllername_actionname>
ручки
Пример:
<mymodule_controllername_actionname>
<update handle="mymodule_default"/>
...
<mymodule_controllername_actionname>