Magento - Переопределение модели не работает - PullRequest
2 голосов
/ 13 февраля 2011

Пожалуйста, кто-нибудь из экспертов magento может мне помочь с этим.Это сводит меня с ума весь день !!!

Я пытаюсь переопределить Mage_Catalog_Model_Product_Type_Price и все, что я пытаюсь, не работает.Я делал подобные вещи несколько раз раньше и уверен, что мой код верен, но я явно что-то упускаю.

Контроллер работает нормально, и если я создаю экземпляр модели, он тоже работает нормально.Похоже, что само переписывание не работает.

Я использую Magento 1.5.1.

Вот код в файле конфигурации моих модулей:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <MyNs_MyMod>
            <version>0.1.0</version>
        </MyNs_MyMod>
    </modules>
    <global>
    <models>
      <catalog>
        <rewrite>
          <product_type_price>MyNs_MyMod_Model_Price</product_type_price>
        </rewrite>
      </catalog>
    </models>
  </global>
    <frontend>
         <routers>
            <mymod>
                <use>standard</use>
                <args>
                    <module>MyNs_MyMod</module>
                    <frontName>mymod</frontName>
                </args>
            </mymod>
        </routers>
    </frontend>
</config>

Вот код модели, обрезанный до минимума:

    <?php

class MyNs_MyMod_Model_Price extends Mage_Catalog_Model_Product_Type_Price
{
    public function getPrice($product = null) {
        Mage::log('Made it into getPrice()');

        return 0;
    }
}

1 Ответ

10 голосов
/ 14 февраля 2011

Это предположение здесь, но на основании ваших комментариев кажется, что вы успешно переписали класс Mage_Catalog_Model_Product_Type_Price. Однако , система перезаписи Magento - это не "настоящая" утка / мартышка, которую вы видите в Ruby / Python.Перезапись будет работать только в том случае, если базовый код создает экземпляр Mage_Catalog_Model_Product_Type_Price через псевдоним класса catalog/product_type_price.Он не работает с объектом, который является экземпляром класса, который наследует от Mage_Catalog_Model_Product_Type_Price.

Итак, рассмотрим это

#File: app/code/core/Mage/Catalog/Model/Product/Type/Configurable/Price.php
<?php
class Mage_Catalog_Model_Product_Type_Configurable_Price extends Mage_Catalog_Model_Product_Type_Price

Я предполагаю, что страница, которую вы загружаете, создает Mage_Catalog_Model_Product_Type_Configurable_Price.Вот почему ваша перезапись работает, когда вы создаете экземпляр catalog/product_type_price изолированно, но когда система создает экземпляр catalog/product_type_configurable_price, ваша перезапись не запускается (и не может быть инициирована).

Короче говоря, попробуйте переписать модель catalog/product_type_configurable_price и посмотрите, повезет ли вам больше.

Если это не сработает, вам нужно отследить, где код ядра Magento создает эти объекты, и отладить, что происходит.Предоставление большего контекста для вашего кода может помочь людям помочь вам с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...