Pregunta

Tengo un objeto Mage_Sales_Model_Order_Shipment_Item y yo soy capaz de cargar un modelo de producto SKU utilizando el elemento de envío (si puedo conseguir este atributo sólo por el uso del elemento del envío, mejor que mejor).

No parece que la modelo de producto cargado para contener el atributo size. Cuando var_dump($prod->getData()) o var_dump($prod) no hay nada acerca de su tamaño. El código del atributo es size. Se encuentra en el producto soy de carga, es de tipo global, desplegable, no único, es necesario. ¿Cómo puedo obtener un atributo de producto específico, en este caso el "tamaño", a partir de un modelo cargado por SKU?

$prod = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
echo $prod->getSize();
echo $prod->getData('size');

Además, yo esperaría que esto devuelve un valor de 57. Es un atributo de tipo desplegable. ¿Cómo puedo obtener el valor de esta option_id? Por ejemplo, me gustaría obtener el "small" valor, no 57. Por cierto, veo estos valores establecidos para este particular SKU en la base de datos.

He intentado esta solución también

$pc = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToFilter('size', array('notnull' => 'true'))
    ->addAttributeToFilter('size', array('neq' => ''))
    //->addAttributeToFilter('sku', array('eq' => '100-0055-BLK-S'))
    ->addAttributeToSelect('size');
//$p = $pc->getFirstItem();
$usedAtts = array_unique($pc->getColumnValues('size'));
$attModel = Mage::getSingleton('eav/config')->getAttribute('catalog_product', 'size');
$usedAtts = $attModel->getSource()->getOptionText(implode(',', $usedAtts));
var_dump($usedAtts);

Pero $usedAtts es false.

Actualización: I trató el método en mi primer ejemplo, cargar el producto con sku, en una instalación nueva y funcionó. I fijó el atributo tamaño de la misma, excepto la nueva instalación que tiene en el conjunto de atributos 'por defecto', en el que el anterior es una costumbre. Voy a tratar de mirar en esas diferencias .. pero mientras tanto, alguien tiene una idea de que por qué no puedo conseguir en mi antes de instalar? de configuración que los productos de los mismos. En la previa, puedo conseguir el atributo de color .. no está seguro de por qué no puedo obtener el tamaño.

¿Fue útil?

Solución 2

El problema fue que cuando estaba inicializando Magento que no cumplía a la vista de tienda "default" (que figura). Que necesitaba para ponerlo a la vista de almacén de administrador, entonces yo soy capaz de obtener toda la información del producto que necesitaba.

require 'app/Mage.php';
umask(0);
Mage::app();

//admin store
Mage::app()->setCurrentStore(0);

Y ahora este código funciona bien:

$prod = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
echo $prod->getSize() . ' - ' . $prod->getAttributeText('size');

Otros consejos

Para responder a la pregunta:

Gracias a alguno práctico en los métodos integrados que no tiene que hacer ninguna carga por su cuenta:

  • Mage_Sales_Model_Order_Shipment_Item proporciona getOrderItem
  • Mage_Sales_Model_Order_Item proporciona getProduct

Por lo tanto, todo lo que tiene que hacer es lo siguiente:

$product = $shipmentItem->getOrderItem()->getProduct();

Si size se conserva a la posición de pedido, puede hacerlo:

$item = $shipmentItem->getOrderItem();
echo $item->getAttributeText('size');

O, si usted necesita para cargar el valor de la identificación del producto en sí, se puede obtener todos los valores de ID seleccionados del producto:

$size = $shipmentItem->getOrderItem()->getProduct()->getSize();

Es más fácil sólo tiene que pasar este atributo a su cotización y orden. De esta manera se puede conseguir allover.

Añadir a la cita (en su config.xml desde su extensión)

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

convertir

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

Copiar el atributo de cotización

    <events>
            <sales_quote_item_set_product>
                <observers>
                    <yourmodule>
                        <class>yourmodule/observer</class>
                        <method>setCustomAttribute</method>
                    </yourmodule>
                </observers>
            </sales_quote_item_set_product>
   </events>

Todos éstos están bajo la etiqueta global en su configuración.

A continuación, puede copiar su atributo a la cita a través del observador que acaba de asignar el evento en su fichero de configuración:

public function setCustomAttribute(Varien_Event_Observer $observer) {
    $_item = $observer->getQuoteItem();
    $_product = $observer->getProduct();
    $_item->setCustomAttribute($_product->getCustomAttribute());
}

De esta manera usted no tendrá que cargar su producto para obtener el valor en su shippingmodel.

Sólo para añadir a estas respuestas; si usted necesita para obtener el atributo valor , y usted no tiene el código de camello de casos disponibles, se puede usar getData() en el producto en su lugar:

$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top