Расширение базовой модели в Magento

Я пытаюсь расширить: Mage_Catalog_Model_Product_Visibility

Я изменяю следующее в файле Visibility.php:

public function getVisibleInSiteIds()
  {
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH);
  }

В:

public function getVisibleInSiteIds()
  {
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH, self::VISIBILITY_NOT_VISIBLE);
  }

Устаревшие продукты, для которых установлено значение «Невидимый», по-прежнему будут отображаться по их прямому URL-адресу (по умолчанию Magento будет отображать ошибку 404).

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

приложение/и т.д./модули/CustomCode_InvisibleProducts.xml

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

приложение/код/локальные/CustomCode/InvisibleProducts/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCode_InvisibleProducts>
            <version>0.1.0</version>
        </CustomCode_InvisibleProducts>
    </modules>
    <global>
        <models>
            <customcode_invisibleproducts>
                <class>CustomCode_InvisibleProducts_Model</class>
            </customcode_invisibleproducts>
            <catalog>
                <rewrite>
                    <product_visibility>CustomCode_InvisibleProducts_Model_Catalog_Product_Visibility</product_visibility>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/CustomCode/InvisibleProducts/Model/Catalog/Product/Visibility.php

class CustomCode_InvisibleProducts_Model_Catalog_Product_Visibility extends Mage_Catalog_Model_Product_Visibility
{
     .....

Почему-то я неправильно расширяю модель, потому что ничего не происходит/не меняется.

Спасибо за помощь!


person Remy Nagelmaeker    schedule 21.02.2013    source источник
comment
Вы убедились, что модуль загрузился? Вы можете увидеть список в Система -> Конфигурация -> Дополнительно -> Отключить вывод модуля. Если его там нет, удалите кеш Magento и повторите попытку.   -  person Fabian Schmengler    schedule 21.02.2013
comment
Да, я сделал, это там, и это включено. Кстати, кеширование отключено.   -  person Remy Nagelmaeker    schedule 21.02.2013
comment
Конфигурация перезаписи мне кажется правильной. Следующим моим шагом было бы определить, вызывается ли переопределенный метод (с помощью отладчика или вызова Mage::log() в методе)   -  person Fabian Schmengler    schedule 21.02.2013
comment
Привет Фаб! Я не знаю, как сделать ни один из них   -  person Remy Nagelmaeker    schedule 21.02.2013
comment
Я добавил Mage::logo('Test') в файл Visibility.php, но в файле системного журнала ничего не отображается. Итак, я как-то предполагаю, что я неправильно расширяю/переписываю модель. Кто-нибудь понял, что я делаю неправильно?   -  person Remy Nagelmaeker    schedule 22.02.2013
comment
Я добавил Mage::log('Test2') в исходный файл Visibility.php, на этот раз журналы отображаются. Это подтверждает, что Magento по-прежнему использует оригинальный Visibility.php. Что я делаю неправильно?   -  person Remy Nagelmaeker    schedule 22.02.2013


Ответы (2)


Я изменил название расширения с CustomCode_InvisibleProducts на CustomCode_Visible, потому что не знал, что еще делать.

И как-то сразу заработало расширение.

Окончательный код:

приложение/и т.д./модули/CustomCode_Visible.xml

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

приложение/код/местный/CustomCode/видимый/и т.д./config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CustomCode_Visible>
            <version>0.2.0</version>
        </CustomCode_Visible>
    </modules>
    <global>
        <models>
            <customcode_visible>
                <class>CustomCode_Visible_Model</class>
            </customcode_visible>
            <catalog>
                <rewrite>
                    <product_visibility>CustomCode_Visible_Model_Catalog_Product_Visibility</product_visibility>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

app/code/local/CustomCode/Model/Catalog/Product/Visibility.php

class CustomCode_Visible_Model_Catalog_Product_Visibility extends Mage_Catalog_Model_Product_Visibility
{

  ....

        public function getVisibleInSiteIds()
    {
        return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_IN_CATALOG, self::VISIBILITY_BOTH, self::VISIBILITY_NOT_VISIBLE);
    }
person Remy Nagelmaeker    schedule 22.02.2013
comment
Прямо над вашим последним блоком кода у вас есть app/code/local/CustomCode/Model/Catalog/Product/Visibility.php. Разве это не должно быть app/code/local/CustomCode/Visible/Model/Catalog/Product/Visibility.php ? - person Buttle Butkus; 15.01.2014

Вы не объявляете свой модуль в своем config.xml

<modules>
    <CustomCode_InvisibleProducts>
        <version>0.1.0</version>
    </CustomCode_InvisibleProducts>
</modules>

Вставьте это перед вашим глобальным узлом.

person dagfr    schedule 21.02.2013
comment
Большое спасибо, dagfr, только что внес изменения. Тем не менее, я все еще не получаю никаких результатов. - person Remy Nagelmaeker; 21.02.2013