2011-12-14 3 views
0

주소 및 고객에 대한 고객의 모델 엔티티를 무시하려고합니다. 그것은 내 개발 환경에서 작동하지만 프로덕션 환경에서 실행되도록 할 수는 없습니다. 둘 다 Magento 1.6.0.0을 사용하고 있습니다.재정의 된 모델 엔티티가 실행되지 않음

내가 잘못 점점 될 수 두 가지 영역이 있습니다

  1. 그것은 내가 필요한 모든 파일을 업로드하지 않았습니다하지만 난보고 싶었어 모르는 가능성이 있습니다. FTP'ing 전체 모듈 디렉토리 그래서 그들은 추가 파일이 있다면 그들은 코드의 다른 부분에서 있어야합니다 시도했다.
  2. 데이터베이스의 누락 된 데이터/잘못된 데이터입니다. 이것은 더 많은 가능성이 있지만 어디서 볼 것인지 확신 할 수 없습니다 (Magento 설치 파일을 사용하는 것과 반대되는 PhpMyAdmin을 통해 데이터를 직접 설정합니다 - 사용자 지정 Magento 프로젝트이므로 다른 곳에서는 복제/복제 할 필요가 없습니다) 미래.)

어쨌든, 내가 코드 수준에서 뭔가 잘못하고있는 경우를 대비해서, 여기에 내가 가진 것이있다.

오버라이드 (override)

class Zac_Attack_Model_Entity_Address extends Mage_Customer_Model_Entity_Address 
{ 
    protected function _afterSave(Varien_Object $address) 
    { 
     // this method never gets called. 
    } 
} 

class Zac_Attack_Model_Entity_Customer extends Mage_Customer_Model_Entity_Customer 
{ 
    protected function _saveAddresses(Varien_Object $address) 
    { 
     // this method never gets called. 
    } 
} 

config.xml에

<models> 
    <customer_entity> 
     <rewrite> 
      <address>Zac_Attack_Model_Entity_Address</address> 
      <customer>Zac_Attack_Model_Entity_Customer</customer> 
     </rewrite> 
    </customer_entity> 
</models> 

우리는 고객의 주소로 기본 주소의 세 번째 유형을 추가 할 수 있도록 재정의입니다. 새 주소에 대한 특성이 데이터베이스에 올바르게 설정되어 있습니다. 주소를 수동으로 'default_custom'주소로 설정하면 프런트 엔드와 백엔드 모두에서 고객 세부 정보에 표시되지만 모델 엔티티는 시스템에서 ' 주소를 입력하십시오. 내가 잃어버린 것이 무엇인지 알지 못한다면, 나는 항상 로직을 다양한 "저장"기능으로 옮길 수 있지만 Magento 핵심 코드가 이미 채택한 접근 방식을 유지하는 것을 선호합니다.

내가 여기서 잘못하고있는 아이디어가 있습니까?

답변

0

app/etc/modules/*에 구성 파일을 추가 했습니까?

해당 구성 파일에 true 값을 가진 <enabled/> 노드가 있습니까?

해당 구성 파일에 올바른 코드 풀의 이름이 포함되어 있습니까? (지역 사회 또는 지방).

모듈 이름의 고급 - 출력 비활성화 목록에 모듈 이름이 표시됩니까? Module List Module을 사용하여 왜 나타나지 않는지 디버깅 해 보셨습니까?

당신이 당신의 클래스 이름은 당신이 오버 라이딩 메소드가 호출 점점되지 확실 있습니까

$model = Mage::getMode('foo/bar'); 
var_dump(get_class($model)); 

을 사용지고 당신과 수표 모델의 인스턴스를 인스턴스화하는 코드를 작성하려고 했습니까?

동일한 클래스를 다시 작성한 다른 모듈이 있습니까?

+0

안녕 앨런, 좋은 질문입니다.처음 몇 가지 대답을하기 위해, 이것은 다른 곳에서 일하는 기존 모듈에 추가 된 것입니다. 그렇습니다. 모듈이 출력 사용 안 함 목록에 표시됩니다. 엔티티 모델을 인스턴스화하려면 어떻게해야합니까 (getModel은 엔티티 모델과 반대로 표준 모델 클래스를 반환합니다). 나는 그 질문에 대한 해답을 스스로 찾아 볼 것이나 이미 해답을 알고 있다면 더 빠를 수도있다. Magento 사이트에 대한 자습서는 시작했을 때 멋진 소식이었습니다. 감사합니다. ;-) –

+0

getModel ('customer/entity_address')을 호출하면 Mage_Customer_Model_Entity_Address가 반환되므로 다른 모듈에서는 재정의하지 않는 것으로 보입니다. 또한 커뮤니티 및 로컬 영역의 모든 모듈을 검사했지만 그 중 어느 것도 클래스를 오버라이드하지 않았습니다. 내 메소드 재정의가 호출되지 않는다는 것이 확실합니다. 재정의 메소드와 기본 메소드에 일부 die ('...') 문을 넣었습니다. 기본 메서드가 호출되었지만 재정의 된 메서드는 호출되지 않았습니다. –

0

해야 하는가가 아니라 config.xml처럼 :

<models> 
    <customer> 
     <rewrite> 
      <entity_address>Zac_Attack_Model_Entity_Address</entity_address> 
      <entity_customer>Zac_Attack_Model_Entity_Customer</entity_customer> 
     </rewrite> 
    </customer> 
</models> 
+0

글쎄, 그건 내 원래의 접근이었다 -하지만 나는 그것에 성공했다. 내 구성을 다음과 같이 변경했습니다. http://www.magentocommerce.com/boards/viewthread/14103/ 내 로컬 환경에서 성공적으로 작동합니다. 왜 그것이 라이브에서 작동하지 않는지 확실하지 않습니다 ... 나는 이것을 확실하게하기 위해 다시 시도 할 수도 있지만 작동하지 않을 것이라고 생각합니다. 답을 건네줍니다. –

+0

행운을 빌어 요 - 그것은 오버 라이드되지 않습니다. 어쨌든 제안 해 주셔서 감사합니다. –

+0

어쩌면 어리석은 생각 일 수도 있지만, 하나의 ''으로 결합하는 대신에 각 클래스를 퍼팅 해보고 자신의' '태그를 덮어 썼습니까? –

관련 문제