Magento, макет по умолчанию для пользовательского модуля

Я хочу добавить блок в левую колонку только моего модуля, а не всего сайта.

Если я помещу это в <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>

Или это не предпочтительно?

Спасибо

1

Решение

Вы можете установить макет только для вашего пользовательского модуля. Например, вы хотите левую колонку, ваш файл макета должен быть таким,

<?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> в вашем модуле. Таким образом, он может установить, что блок будет доступен для всех страниц (контроллеров) в этом модуле.
Вот и все. Дайте мне знать, если у вас есть какие-либо сомнения.

1

Другие решения

Получил ответ на другом сайте, скопировав его сюда:

Вы можете добавить только дескриптор обновления макета в каждом контроллере

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>
0

По вопросам рекламы [email protected]