2011-06-17 21 views
15

Me gustaría tener algunos atributos de productos de Magento que no son editables desde la interfaz de administración y algunos que no son visibles en esa interfaz (como un método para almacenar información persistente sobre un producto que no debe ser visto por usuarios humanos ... es la única forma de hacer esto que puedo pensar, cualquier otra sugerencia es bienvenida).Magento atributos de productos de solo lectura y ocultos

Así que mi pregunta es: ¿todos los atributos de Magento tienen que ser visibles y editables desde la interfaz de administración? Si no, ¿cómo pueden hacerse de solo lectura u ocultos?

Me di cuenta de que en la interfaz de administrador hay algunos campos de solo lectura, por lo que debe ser posible hacerlo de una forma u otra. Después de buscar Stackoverflow para esto encontré una posible solución que involucraba JavaScript, pero me gustaría no ir por ese camino si es posible.

Respuesta

15

OK, parece que se puede hacer después de todo. Después de agregar un observador para el evento catalog_product_load_after, el método lockAttribute de la clase Mage_Catalog_Model_Abstract se puede usar para hacer un atributo de producto de solo lectura. Aquí está el código para el método de observador:

public function lockAttributes($observer) { 
    $event = $observer->getEvent(); 
    $product = $event->getProduct(); 
    $product->lockAttribute('attribute_code'); 
} 
1

No, supongo que no es posible desde el administrador de atributos. Una solución fácil, rápida y sucia sería usar css para ocultar la entrada y la etiqueta.

11

Dado que el evento catalog_product_load_after se distribuye para cada carga producto, los atributos suministrados en el método lock_attributes están bloqueados después de cada carga de producto. Esto podría tener resultados inesperados: no es posible cambiar el valor de los atributos en el método lock_attributes sin desbloquearlos explícitamente.

En lugar de utilizar el evento catalog_product_load_after, basta con agregar un observador para el evento catalog_product_edit_action: este evento se distribuye solo al editar un producto en la interfaz de administración.

0

Usando este hilo y un poco más cavando; El método lockAttribute es de una clase abstracta, lo que significa que también es posible usarlo en atributos de categoría. Cogí el observador 'catalog_category_load_after' y lo utilizó para bloquear mis atributos deseados categoría:

public function lockCategoryAttributes($observer) { 
    $event = $observer->getEvent(); 
    $c = $event->getCategory(); 
    $c->lockAttribute('attribute_code'); 
} 

No estoy seguro de si eso es el observador derecho de uso pero funciona.

Así que sí, es posible bloquear atributos de categoría o hacerlos de solo lectura.

2

Creo que Aad Mathijssen y Epicurus combinados tienen la mejor respuesta a la pregunta, con un poco de aclaración. Como señala Aad, se llama a catalog_product_load_after después de cada carga de producto y eso significa en el FrontEnd también!

Si buscamos proteger los campos de atributo solo en los paneles de administración, catalog_product_edit_action es la opción más adecuada.

Su etc/config.xml A continuación tendrá lugar algo como esto:

<catalog_product_edit_action> 
    <observers> 
    <lock_attributes> 
     <class>yourmodule/observers</class> 
     <method>lockAttributes</method> 
    </lock_attributes> 
    </observers> 
</catalog_product_edit_action> 
Cuestiones relacionadas