2012-04-11 3 views
5

Magento에서 사용자 정의 모듈을 생성 할 때 시스템에서 사용자 정의 속성을 작성해야하는 경우가 있습니다. 일반적으로 관련 모듈을 설치 모델로 확장하거나 단순히 Mage_Core_Model_Resource_Setup을 확장합니다.Magento - 사용자 정의 모듈에 필요한 다중 설정 모델

내 모델이 특정 모델에 속성을 추가해야하고 특정 설치 모델, 즉 eav 또는 sales가 필요한 경우 여기서 가장 좋은 방법은 무엇입니까? 내 설치 모델을 정의하는 생각 : MyCompany_MyModuel_Reseource_Setup (1.6 +) 및 다음 내 SQL 설치 파일을 단지 필요한 설치 모델을 만듭니다. 이것이 최선의 접근 방법인가요?

답변

3

그것은 당신의 모듈의 파일에 다른 모듈 설치 파일을 사용하여 완전히 허용 (적절한)입니다 :

$otherSetup = Mage::getResourceModel('catalog/setup','default_setup'); 
$otherSetup->addAttribute(...); 

을 특히 새 속성을 설치하는 경우, 각 모듈이 처리 할 개체 별 특성 기본값이 있습니다 (_prepareValues() 방법 참조).

물론 이것은 모듈의 설치 클래스 인스턴스에서 실행되지만 괜찮습니다.

+0

이것은 여러 번 나를 물었습니다. 항상 추가하려는 엔티티 유형에 적합한 자원 모델을 사용하고 있는지 확인하십시오. –

2

편집 : 귀하의 질문을 다시 읽었으며 귀하가 요청한 내용을 완전히 덮었는지 확실하지 않습니다. 그럼에도 불구하고 정보가 다소 적용되므로 여기에 남겨 두겠습니다. 그러나 귀하의 질문은 기존 엔티티에 속성을 추가하는 모범 사례와 관련이 있다고 생각합니다. 특히, 설치 리소스를 사용하여 사물, EAV 또는 다른 것에 속성을 추가하는 것이 완벽하게 허용됩니다. 이 경우 Mage_Eav_Model_Entity_Setup::addAttribute()과 같은 함수를 사용하거나 Mage_Core_Model_Resource_Setup::run()을 사용하여 필요에 따라 SQL 쿼리가있는 테이블을 수정할 수 있습니다.

원래 답 :

그것은 동일한 모듈 내에서 여러 자원을 사용할 수있다, 그래서 이것은 당신이 요구하는지 무엇을하기에 충분해야한다.

두 개의 설정 리소스를 정의하면 Magento가 둘 모두를 실행합니다. 당신의 Config.xml의

는 :

<config> 
    ... 
    <global> 
     ... 
     <resources> 
      <!-- Resource 1 --> 
      <mymodule_setup> 
       <setup> 
        <module>MyCompany_MyModule</module> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </mymodule_setup> 
      <mymodule_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </mymodule_write> 
      <mymodule_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </mymodule_read> 

      <!-- Resource 2 --> 
      <mymodule2_setup> 
       <setup> 
        <module>MyCompany_MyModule</module> 
       </setup> 
       <connection> 
        <use>core_setup</use> 
       </connection> 
      </mymodule2_setup> 
      <mymodule2_write> 
       <connection> 
        <use>core_write</use> 
       </connection> 
      </mymodule2_write> 
      <mymodule2_read> 
       <connection> 
        <use>core_read</use> 
       </connection> 
      </mymodule2_read> 
     </resources> 
     ... 
    </global> 
    ... 
</config> 

그런 다음 필요한 설치/설정 모델을 확장하여 app/code/local/MyCompany/MyModule/sql/mymodule_setupapp/code/local/MyCompany/MyModule/sql/mymodule2_setup

심지어 설치에 자신의 기능을 추가 할 수 있습니다에 업그레이드 파일을 포함한다.

<class>MyCompany_MyModule_Entity_Setup</class> 

및 다음과 같습니다 app/code/local/MyCompany/MyModule/Entity/Setup.php

에서 파일 생성 : 그래서

<?php 
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup 
    { 
    } 

을 같은

<resources> 
    <mymodule2_setup> 
     <setup> 

: 당신은에 클래스 태그를 추가하여이 작업을 수행 할 의심 스러우면 Mage_Core_Model_Resource_Setup 또는 Mage_Eav_Model_Entity_Setup을 확장해야합니다. (eav).

관련 문제