2011-02-13 2 views
2

Magento 전문가 중 한 명이 저에게 도움이 될 수 있습니까? 이것은 나를 하루 종일 미치게했다! !!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; 
    } 
} 
+0

Mage :: getModel ('catalog/product_type_price')을 인스턴스화하면 어떻게됩니까? 물건을 다시 가져 왔니? 그렇다면 클래스는 무엇입니까? –

+0

안녕하세요. 올바른 재정의 유형, 즉 MyNs_Mymod_Model_Price를 얻습니다. 그러나 핵심 모델 Mage_Catalog_Product_Type_Price에서 로그 항목을 추가하면 항상 이러한 항목이 기록됩니다. 즉, 재정의 된 클래스의 로그 메시지는 기록되지 않습니다. – William

+0

로딩중인 페이지와 표시되는 로깅을 추가하는 위치에 대한 더 많은 컨텍스트를 제공하면 사람들이 문제를 추적하는 데 도움이됩니다. Magento는 충분히 새롭고 끝없이 구성 할 수 있으므로 이러한 유형의 문제를 추적하는 가장 빠른 방법은 모델을 인스턴스화하는 코드를보고 생각해야하는 것을 반환하지 않는 이유를 파악하는 것입니다. 당신이 제공하는 상황에 따라, 더 많은 사람들이 도울 수 있습니다. –

답변

10

이 추측은 여기에 있지만 기반으로 Mage_Catalog_Model_Product_Type_Price 클래스를 성공적으로 다시 작성한 것 같습니다. Magento의 재 작성 시스템은 Ruby/Python에서 볼 수있는 "진정한"오리 유형/원숭이 패치가 아닙니다. 재 작성은 핵심 코드가 catalog/product_type_price 클래스를 통해 Mage_Catalog_Model_Product_Type_Price을 인스턴스화하는 경우에만 작동합니다. Mage_Catalog_Model_Product_Type_Price에서 상속하는 클래스의 인스턴스 인 objet에서는 작동하지 않습니다.

그래서,이

#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 핵심 코드가 이러한 개체를 인스턴스화하는 위치를 추적하고 진행 상황을 디버깅해야합니다. 코드에 더 많은 컨텍스트를 제공하면 사람들이 여기에서 문제를 해결하는 데 도움이 될 수 있습니다.

관련 문제