Как я могу добавить блок через файл макета XML, а не программно, через контроллер?


Как я могу добавить блок через файл макета XML, а не программно, через контроллер?

У меня есть свой блок, и я хочу использовать его в шаблоне, который уже существует (каталог/категория/просмотр.phtml).

Как я могу это сделать, не заходя и не меняя контроллер и не изменяя каталог/категорию/представление.phtml напрямую?

Я хочу добавить этот блок где-нибудь в уже существующий шаблон через XML, а не программно.

Это часть моего блока:

class Mynamespace_Mymodule_Block_Myblock extends Mage_Core_Block_Template
{
    public function _construct()
    {
        $this -> setTemplate("mynamespace_mymodule/myblock.phtml");
        return parent::_construct();

    }

    public function getItemsByCategoryAndUseState($category, $use_state) {
        return "some used or new items";
    }
}

Это config.xml моего модуля:

<config>
<modules>
    <Mynamespace_Mymodule>
        <version>3.0.0.1</version>
    </Mynamespace_Mymodule>
</modules>
<global>
    <blocks>
        <mynamespace_mymodule>
            <class>Mynamespace_Mymodule_Block</class>
        </mynamespace_mymodule>
    </blocks>
</global>
<frontend>
    <layout>
        <updates>
            <mynamespace_mymodule>
                <file>mynamespace_mymodule.xml</file>
            </mynamespace_mymodule>
        </updates>
    </layout>

</frontend>

Это мой package/theme/layout/mynamespace_mymodule.xml :

<layout version="0.1.0">
    <catalog_category_view> 
        <reference name="product_list"> 
            <block type="mynamespace_mymodule/myblock" name="myblock" after="-" /> 
        </reference> 
    </catalog_category_view>
</layout> 

Спасибо.

Author: Himanshu, 2016-11-25

2 answers

Вы можете добавить блок с помощью этого xml-кода

<catalog_category_view>
    <reference name="content">
        <block type="mymodule/myblock"  after="-" />
     </reference>
</catalog_category_view>

Добавить это <frontend> тег не в <global>

     <frontend>
      <layout>
        <updates>
            <mynamespace_mymodule>
                <file>mynamespace_mymodule.xml</file>
            </mynamespace_mymodule>
        </updates>
      </layout>
    </frontend>
 1
Author: Fme Extensions, 2016-11-25 12:11:46

Частично решил эту проблему, используя методы блока в шаблоне. Я просто:

  1. Создал блок
  2. Объявил блок в модуле config.xml
  3. Используя его в шаблоне (файл .phtml) следующим образом:
  4. echo $this -> getLayout() 
        -> createBlock('mymodule/myblock') 
        -> toHtml();
    

Я хочу сделать это только с обновлениями макета .XML.

 0
Author: Vladimir Despotovic, 2016-11-25 11:03:46