Как расширить модель блока списка основных продуктов?


Я хочу расширить функцию pring в magento, где я собираю некоторые данные о продукте.

В конце я хочу вызвать функцию, подобную $this->getAlternateTitle(), в списках и продуктах.

Вот что у меня есть: app/etc/modules/Namespace_Name.xml

    <?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Catalog>
            <active>true</active>
            <codePool>local</codePool>
        </Namespace_Catalog>
    </modules>
</config>

Затем я создаю конфигурацию в app/code/local/Namespace/Catalog/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Catalog>
            <version>0.0.1</version>
        </Namespace_Catalog>
    </modules>
    <global>
        <blocks>
                <class>Namespace_Catalog_Block_Product_List</class>
        </blocks>
    </global>
</config>

И, наконец, определение функции здесь: app/code/local/Namespace/Module/Block/Product/List.php

<?php

class Namespace_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_List {
    public function makeBlue() {
     echo "Blueberrys are colorful";
    }
}

Я есть только возвращаясь: Invalid method Mage_Catalog_Block_Product_List::makeBlue

Что я здесь делаю не так? Это моя первая функция magento, поэтому, пожалуйста, будьте добры ко мне;)

Author: 7ochem, 2015-09-28

2 answers

config.xml

  <global>

    <blocks>

            <catalog>
                <rewrite>
                    <product_list>Namespace_Catalog_Block_Catalog_Product_List</product_list>
                <product_view>Namespace_Catalog_Block_Catalog_Product_View</product_view>
                </rewrite>
            </catalog>

    </blocks>
  </global>

Написать класс :

App/code/local/Namespace/Catalog/Block/Catalog/Product/List.php

<?php
class Namespace_Catalog_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
{
}

App/code/local/Namespace/Catalog/Block/Catalog/Product/view.php

<?php
class Namespace_Catalog_Block_Catalog_Product_View extends Mage_Catalog_Block_Product_View
{
}
 4
Author: Amit Bera, 2015-09-28 13:22:06

Вам необходимо использовать систему перезаписи классов Magento, чтобы расширить блок Mage_Catalog_Block_Product_List. Следующий пример кода должен дать вам хорошее представление о том, как это сделать:

В app/etc/modules/Namespace_Name.xml:

...
<Namespace_Catalog>
   ...
   <depends>
       <!-- This dependency ensures that your module is loaded after the core module that you are extending. -->
       <Mage_Catalog/>
   </depends>
</Namespace_Catalog>
...

В app/code/local/Namespace/Catalog/config.xml:

...
<blocks>
    <catalog>
        <rewrite>
            <product_list>Namespace_Catalog_Block_Product_List</product_list>
        </rewrite>
    </catalog>
</blocks>
....

Если вам нужна более подробная информация, этот учебник от Tuts+ - отличный ресурс.

 2
Author: Joseph Leedy, 2015-09-28 13:30:09