tutorial source pricing plataforma open espaƱol magento

source - magento tutorial



Magento: obtenga un valor de atributo personalizado sin cargar todo el producto (4)

Esto depende de qué versión de Magento está ejecutando. Diferentes versiones tienen diferentes ofertas. ¡Si está ejecutando Community Edition 1.6+, el módulo de catálogo tiene un método muy bueno solo para usted !

Intenta lo siguiente:

$_item = $this->getProduct()->getId(); $_resource = $this->getProduct()->getResource(); $optionValue = $_resource->getAttributeRawValue($_item, ''custom_attribute_value'', Mage::app()->getStore()); echo $optionvalue;

Si estás interesado, puedes sumergirte en Mage_Catalog_Model_Resource_Abstract para ver qué está haciendo este pequeño. Básicamente, es solo una consulta (aunque es bastante compleja, como tiende a ser EAV) para recuperar el atributo que solicitó (o los múltiples atributos que solicitó, ya que también puede pasar una matriz).

En el momento en que uso esto para obtener un valor de atributo personalizado:

$_item = $this->getProduct()->getId(); $_product = $_product = Mage::getModel(''catalog/product'')->load($_item); $optionvalue = $_product->getCustomAttributeValue(); echo $optionvalue;

Me pregunto si hay una manera más fácil de obtener este valor personalizado sin cargar todo el producto.


Esto puede no proporcionar mucho, si hay algún beneficio de rendimiento; sin embargo, solo obtendrá el valor del atributo y no otras columnas:

$collection = Mage::getModel(''catalog/product'') ->getCollection() ->addAttributeToFilter(''entity_id'', $_item); $collection->getSelect() ->reset(''columns'') ->columns(array(''[custom attribute code]'')); $value = $collection->getFirstItem() ->getData(''[custom attribute code]'');

También puedes usar SQL directo, aunque no lo recomendaría a menos que el rendimiento fuera un problema real:

$connection = Mage::getSingleton(''core/resource'')->getConnection(''core_read''); $sql = <<<SQL SELECT `value` FROM catalog_product_entity_[backend type] WHERE entity_id = {$_item} AND attribute_id = [attribute ID] SQL; $row = $connection->fetchRow($sql); $value = $row[''value''];


Otra forma sencilla es agregar este "atributo_control" a la lista de atributos para obtener de forma predeterminada cuando verifique los datos del producto desde un elemento de cotización.

Si ya creó un módulo personalizado en config.xml, agregue esto.

<global> ... <sales> <quote> <item> <product_attributes> <custom_attribute /> </product_attributes> </item> </quote> </sales> ... </global>


Solo quiero mejorar la respuesta de @JMTyler, porque descubrí que no necesita un modelo de producto real para obtener el getResource()

Así que solo puedes hacerlo con un ID de producto y usando un singleton (esto sería mejor en caso de que lo estés haciendo en un bucle, así que no creas el modelo muchas veces)

$product_id = 10075; $_resource = Mage::getSingleton(''catalog/product'')->getResource(); $optionValue = $_resource->getAttributeRawValue($product_id, [ATTRIBUTE_ID/ATTRIBUTE_CODE], Mage::app()->getStore()); echo $optionValue;