2014-12-26 3 views
2

Я хочу добавить блок в левом столбце только моего модуля, а не всего веб-сайта.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> 

Или это не является предпочтительным, ?

Thanks

ответ

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> 
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-файл в вашем приложении/дизайн/интерфейс/по умолчанию/ТЕМЫ NAME/шаблон/макет/module.xml

И не забыл сказать об этом в файле конфигурации модуля (config.xml). Это должно быть так,

<config> 
... 
<frontend> 
<layout> 
      <updates> 
      <modulename> 
       <file>modulename.xml</file> 
      </modulename> 
      </updates> 
     </layout> 
    ... 
</frontend> 
</config> 

Update:

По компоновке Magento в rules, вы можете добавить <default> в модуле. Таким образом, он может установить, что этот блок будет доступен для всех страниц (контроллеров) в этом модуле. Вот и все. Дайте мне знать, если у вас есть какие-то сомнения.

+0

Да, но таким образом я должен ite it в каждом обработчике макета, и если вы хотите расширить мой модуль с помощью какого-либо другого модуля и хотите добавить ссылку на 1-й модуль, возможно, это невозможно. – Ahmed

+0

Прошу прощения. Я не могу тебя достать. – Elavarasan

+0

сделать это простым, я не хочу писать блок в каждом обработчике макета, пытаясь найти лучший способ – Ahmed