2012-04-11 17 views
5

Magento'da özel bir modül oluştururken, bazen sistemde özel öznitelikler oluşturmanız gerekir. Tipik olarak, ilgili modülü kurulum modelimle genişletirim veya sadece Mage_Core_Model_Resource_Setup dosyasını genişletirim. Modülümün, belirli modellere öznitelikler eklemesi ve özel kurulum modellerini (örn. Eav veya satış) gerektirmesi gerekiyorsa, o zaman buradaki en iyi uygulama hangisidir? Kendi kurulum modelimi tanımlamayı düşünüyorum: MyCompany_MyModuel_Reseource_Setup (1.6 + için) ve daha sonra sql kurulum dosyamda sadece gerekli kurulum modellerini yaratıyorum. Bu en iyi yaklaşım mı?Magento - özel modül için gerekli çoklu kurulum modelleri

cevap

3

Bu sizin modülün dosyalarında diğer modül kurulum dosyalarını kullanmak tamamen kabul (ve uygun) var:

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

Özellikle yeni özelliklerini yükleme durumunda, her modül idare edecek işletmeye özgü nitelik varsayılan vardır Sizin için (bkz. _prepareValues() yöntemleri).

Bu, elbette modülünüzün kurulum sınıfı örneğinde yürütülür, ancak bu bir tamam.

+0

Bu beni birçok kez ısırdı. Eklemekte olduğunuz varlık türü için doğru kaynak modelini kullandığınızdan emin olun! –

2

DÜZENLEME: Sorunuzu yeniden okudum ve sorduğun şeyi tamamen kapattığımdan emin değilim. Yine de bilgiler biraz geçerlidir, bu yüzden burada bırakırım. Ancak, sorunuzu mevcut varlıklar için özellik eklemeye yönelik en iyi uygulamalarla ilgili olduğunu düşünüyorum. Özellikle bu noktada, EAV veya başka şeylere özellik eklemek için kurulum kaynaklarını kullanmak kesinlikle kabul edilebilir. Bu amaçla Mage_Eav_Model_Entity_Setup::addAttribute() gibi işlevler kullanabilir veya tabloları gerektiği gibi SQL sorgularıyla değiştirmek için Mage_Core_Model_Resource_Setup::run() kullanabilirsiniz.

Orjinal cevap:

Aynı modülü içinde birden fazla kaynak kullanmak mümkündür, bu nedenle bu ne istediğini yapmaya yeterli olmalıdır.

Aslında oldukça basittir, sadece iki kurulum kaynağı tanımlayın ve Magento her ikisini de çalıştıracaktır. senin config.xml'de

:

<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> 

Ardından gerekli/install kurulum modelini genişleterek app/code/local/MyCompany/MyModule/sql/mymodule_setup ve app/code/local/MyCompany/MyModule/sql/mymodule2_setup

Hatta yükleyici için kendi işlevlerini ekleyebilirsiniz dosyaları yükseltme içerir.

<class>MyCompany_MyModule_Entity_Setup</class> 

ve şöyle app/code/local/MyCompany/MyModule/Entity/Setup.php

bir dosya oluşturmak: Yani

<?php 
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup 
    { 
    } 

böyle

<resources> 
    <mymodule2_setup> 
     <setup> 

: Sen bir sınıf etiketi ekleyerek bunu Şüphelendiğiniz gibi, Mage_Core_Model_Resource_Setup veya Mage_Eav_Model_Entity_Setup'ı genişletmeniz gerekecek (Eav).

İlgili konular