2012-04-11 11 views
5

Quando si crea un modulo personalizzato in Magento, talvolta è necessario creare attributi personalizzati nel sistema. In genere, estenderei il modulo pertinente con il mio modello di configurazione o estendere semplicemente Mage_Core_Model_Resource_Setup.Magento: sono necessari più modelli di installazione per il modulo personalizzato

Se il mio modulo richiede l'aggiunta di attributi a modelli specifici e richiede modelli di configurazione specifici, ad esempio eev o vendite, allora qual è la procedura migliore qui. Sto pensando di definire il mio modello di installazione: MyCompany_MyModuel_Reseource_Setup (per 1.6 +) e quindi nel mio file di installazione sql creiamo solo i modelli di installazione richiesti. È questo l'approccio migliore qui?

risposta

3

E 'del tutto accettabile (e appropriato) per utilizzare altri file di installazione del modulo nel file del modulo:

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

Soprattutto nel caso di installazione di nuovi attributi, ci sono specifiche per entità di default degli attributi che ciascun modulo sarà gestire per te (vedi metodi _prepareValues()).

Questo verrà ovviamente eseguito nell'istanza della classe di installazione del modulo, ma è ok.

+0

Questo mi ha morso molte volte. Assicurati sempre di utilizzare il giusto modello di risorse per il tipo di entità che stai aggiungendo! –

2

EDIT: Ho riletto la tua domanda, e non sono sicuro di aver completamente coperto ciò che stai chiedendo. Tuttavia le informazioni si applicano un po 'quindi lo lascerò qui. Tuttavia, penso che la tua domanda riguardi le migliori pratiche per l'aggiunta di attributi alle entità esistenti. In particolare su questo punto, è perfettamente accettabile utilizzare le risorse di configurazione per aggiungere attributi a cose, EAV o altro. È possibile utilizzare funzioni come Mage_Eav_Model_Entity_Setup::addAttribute() a tale scopo oppure utilizzare Mage_Core_Model_Resource_Setup::run() per modificare tabelle con query SQL come richiesto.

risposta originale:

E 'possibile utilizzare più risorse all'interno dello stesso modulo, quindi questo dovrebbe essere sufficiente per fare quello che stai chiedendo.

È abbastanza semplice infatti, basta definire due risorse di installazione e Magento eseguirà entrambe.

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

quindi includere il necessario installare/aggiornare i file in app/code/local/MyCompany/MyModule/sql/mymodule_setup e app/code/local/MyCompany/MyModule/sql/mymodule2_setup

È anche possibile aggiungere le proprie funzioni per il programma di installazione, estendendo il modello di impostazione. A tale scopo, con l'aggiunta di un tag classe:

<resources> 
    <mymodule2_setup> 
     <setup> 

come questo:

<class>MyCompany_MyModule_Entity_Setup</class> 

e creare un file a app/code/local/MyCompany/MyModule/Entity/Setup.php

che assomiglia a questo:

<?php 
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup 
    { 
    } 

Così come sospettavi, avresti bisogno di estendere Mage_Core_Model_Resource_Setup o Mage_Eav_Model_Entity_Setup (EAV).

Problemi correlati