2009-10-06 22 views
6

Estoy creando una tienda Magento para un cliente y me gustaría agregar un atributo a todos los productos que funciona como una lista desplegable. Como el atributo 'Fabricante'.Magento: cómo rellenar los valores del atributo desplegable de un producto

Sin embargo, en lugar de ingresar manualmente la lista de valores para el atributo, me gustaría que los valores se rellenaran desde un sitio externo. Por lo tanto, cada vez que crea un producto nuevo o edita uno existente, el menú desplegable se rellena con la lista actualizada de valores que se ha recuperado de un sitio remoto. La lista no debe buscarse solo una vez durante la creación del atributo, sino cada vez que se crea o edita un producto.

Por ejemplo, supongamos que puede obtener una lista de todos los fabricantes mediante curl desde un sitio remoto. Los nombres en esta lista se modifican o agregan de vez en cuando, sin embargo, los ID se mantienen igual, por lo que deben usarse detrás de las escenas. ¿Cómo precargar los valores del menú desplegable del fabricante?

Sé cómo crear una extensión personalizada básica, pero extender el backend de adminhtml es algo nuevo para mí.

Cualquier ayuda es apreciada.

+0

¿Aceptar una respuesta? – ColinM

+0

@ColinM Oops. Hecho. :) –

Respuesta

10

Los atributos de los productos Magento son extremadamente flexibles, pero tener valores dinámicos por producto significaría que necesitaría un atributo por producto que no tiene mucho sentido, por lo que supongo que estos valores de atributos comparten algunas cosas en común entre los productos. almacenar para que tenga un número limitado de atributos (¿o uno?). Para cada atributo, debe crear previamente el atributo y el modelo de backend para ello y luego usar un trabajo o evento cron actualizar las opciones de valor de atributo de su API y almacenarlas en caché localmente en la base de datos o en algún otro método. Se puede añadir un atributo en su instalador módulo de la siguiente manera:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

O rodar su propia instrucción de inserción SQL para la tabla eav_attribute. Asegúrese de asignar su nuevo atributo a un atributo establecido en el back-end para que se pueda usar con sus productos.A continuación, se crea un modelo en My_Namespace_Model_Source que se extiende Mage_Eav_Model_Entity_Attribute_Source_Table (suponiendo que desea una selección de entrada para los valores de atributos) y pone en práctica, como mínimo, los siguientes métodos:

getAllOptions() 
getOptionText($value) 

Así que estos le tire de las opciones dinámicas que se almacenan localmente y en su mayor parte, su nuevo atributo se comportará como cualquier otro en Magento. Asegúrese de utilizar el almacenamiento en caché inteligente porque estos métodos podrían recibir muchos golpes en una carga de página. Puede haber un evento que pueda observar que se llame justo antes de que se visualice una página de creación o edición de producto; de lo contrario, simplemente anule una clase o controlador o utilice una tarea cron de Magento.

Editar: También podría usar los modelos de atributos de Magento existentes y crear sus valores de opción a través de la API existente, pero supongo que para realizar la sincronización o por alguna razón puede necesitar metadatos adicionales en cuyo caso querrá tener un modelo de back-end personalizado.

4

No es una buena respuesta, supongo, pero aquí va, primero agregaría un atributo y luego lo aplicaría ingeniería inversa para ver cómo se rellena.

Luego, en la página de visualización del producto en la administración, me gustaría anular editar y nuevas acciones de la ProductController, para cargar los valores utilizando rizo para ese atributo (se puede buscar el identificador del atributo en la tabla eav_attribute)

Puede empaquetar esto como una extensión personalizada, por lo que no edita el código del núcleo directamente. ¡Buena suerte!

4

Tienes que buscar Magento Event Dispatchers.

Básicamente, cada vez que ocurre un evento - actualizando un producto, enviando un pedido, eliminando algo, etc. - se envía un mensaje a través del sistema. Estos mensajes pueden capturarse y luego pueden desencadenar métodos que haya creado. Para lograr lo que desea, deberá detectar el evento que se desencadena cuando se crea y actualiza un producto y obtener que ejecute un método desde uno de sus módulos personalizados. Este método tomaría el valor del sitio remoto y actualizaría el producto con él.

Después de una rápida búsqueda en Google, he encontrado el siguiente artículo:

http://blog.baobaz.com/en/tag/magento-events

Usted puede encontrar lo eventos de Magento son provocados por mirar el código del módulo correspondiente.

Cuestiones relacionadas