2012-04-11 6 views
5

Al crear un módulo personalizado en Magento a veces se requiere la creación de atributos personalizados en el sistema. Normalmente, ampliaría el módulo relevante con mi modelo de configuración o simplemente extendería Mage_Core_Model_Resource_Setup.Magento: se necesitan varios modelos de configuración para el módulo personalizado

Si mi módulo requiere agregar atributos a modelos específicos y requiere modelos de configuración específicos, es decir, eav o sales, ¿cuál es la mejor práctica aquí? Estoy pensando en definir mi propio modelo de configuración: MyCompany_MyModuel_Reseource_Setup (para 1.6 +) y luego en mi archivo de instalación sql solo crearé los modelos de configuración necesarios. ¿Es este el mejor enfoque aquí?

Respuesta

3

Es totalmente aceptable (y apropiado) para utilizar otros archivos de configuración del módulo en los archivos de su módulo:

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

Especialmente en el caso de la instalación de nuevos atributos, hay específicos de la entidad por defecto del atributo el que cada módulo manejará para usted (vea _prepareValues() métodos).

Esto, por supuesto, se ejecutará en la instancia de clase de instalación de su módulo, pero eso es bueno.

+0

Esto me ha mordido muchas veces. ¡Siempre asegúrese de estar usando el modelo de recurso correcto para el tipo de entidad al que está agregando! –

2

EDIT: He vuelto a leer su pregunta, y no estoy seguro si cubrí completamente lo que está preguntando. Sin embargo, la información se aplica un poco, así que la dejo aquí. Sin embargo, creo que su pregunta es sobre las mejores prácticas para agregar atributos a las entidades existentes. Específicamente en ese punto, es perfectamente aceptable usar recursos de configuración para agregar atributos a elementos, EAV u otros. Puede usar funciones como Mage_Eav_Model_Entity_Setup::addAttribute() para este fin, o usar Mage_Core_Model_Resource_Setup::run() para modificar tablas con consultas SQL según sea necesario.

Respuesta original:

Es posible utilizar varios recursos dentro del mismo módulo, por lo que este debe ser suficiente para hacer lo que está pidiendo.

De hecho, es bastante sencillo, solo defina dos recursos de configuración y Magento ejecutará ambos.

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

Luego incluyen la instalación necesaria/ficheros actualizados en el app/code/local/MyCompany/MyModule/sql/mymodule_setup y app/code/local/MyCompany/MyModule/sql/mymodule2_setup

Usted puede incluso añadir sus propias funciones para el instalador mediante la extensión del modelo de configuración. Esto se hace mediante la adición de una etiqueta de clase a:

<resources> 
    <mymodule2_setup> 
     <setup> 

así:

<class>MyCompany_MyModule_Entity_Setup</class> 

y crear un archivo en app/code/local/MyCompany/MyModule/Entity/Setup.php

que tiene este aspecto:

<?php 
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup 
    { 
    } 

Así como sospechabas, vas a necesitar ampliar Mage_Core_Model_Resource_Setup o Mage_Eav_Model_Entity_Setup (eav)

Cuestiones relacionadas