Question

J'ai un objet Mage_Sales_Model_Order_Shipment_Item et je suis en mesure de charger un modèle de produit en utilisant le sku de l'élément de l'expédition (si je peux obtenir cet attribut en utilisant simplement l'élément d'expédition, d'autant mieux).

Le modèle de produit chargé ne semble pas contenir l'attribut size. Quand je var_dump($prod->getData()) ou var_dump($prod) il n'y a rien de sa taille. Le code de l'attribut est size. Il est situé sur le produit que je suis le chargement, il est de type global, Dropdown, pas unique, nécessaire. Comment puis-je obtenir un attribut de produit spécifique, dans ce cas, la « taille », à partir d'un modèle chargé par sku?

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

En outre, j'attendre à ce que le retour d'une valeur de 57. Il est un attribut de type menu déroulant. Comment puis-je obtenir la valeur de cette option_id? Par exemple, je voudrais obtenir la valeur "small", non 57. BTW, je vois ces valeurs définies pour ce sku particulier dans la base de données.

J'ai essayé cette solution aussi

$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);

Mais $usedAtts est false.

Mise à jour: J'ai essayé la méthode dans mon premier exemple, le chargement du produit avec sku, sur une nouvelle installation et cela a fonctionné. configuration I l'attribut de taille tout de même, à l'exception de la nouvelle installation a dans l'ensemble d'attributs « par défaut », où l'avant est une coutume. Je vais essayer d'examiner ces différences .. mais entre-temps, quelqu'un a une idée des raisons pour lesquelles je ne peux pas l'obtenir avant dans mon installation? configuration I les produits les mêmes. Dans le prieur, je peux obtenir l'attribut de couleur .. ne sais pas pourquoi je ne peux pas obtenir la taille.

Était-ce utile?

La solution 2

Le problème est que lorsque je Magento il a été l'initialisation par défaut à la vue magasin « par défaut » (go figure). Je avais besoin de le mettre à la vue du magasin d'administration, je suis en mesure d'obtenir toutes les informations produit que je avais besoin.

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

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

Ce code fonctionne maintenant très bien:

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

Autres conseils

Pour répondre à la question:

Merci à certaines méthodes Incorporé pratique vous ne devez pas faire de chargement sur votre propre:

  • Mage_Sales_Model_Order_Shipment_Item fournit getOrderItem
  • Mage_Sales_Model_Order_Item fournit getProduct

Alors, tout ce que vous devriez avoir à faire est la suivante:

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

Si size est conservé à l'élément de commande, vous pouvez faire:

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

Ou, si vous avez besoin de charger la valeur d'identification du produit lui-même, vous pouvez obtenir toutes les valeurs d'ID sélectionnées du produit:

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

Il est plus facile de passer tout cet attribut à votre citation et de l'ordre. De cette façon, vous pouvez l'obtenir sur toute la surface.

Ajoutez à la soumission (dans votre config.xml de votre extension)

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

convert

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

Copier l'attribut citation

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

Tous ces éléments sont sous la balise globale dans votre config.

Ensuite, vous pouvez copier votre attribut à la citation creux l'observateur que vous venez d'affecter l'événement dans votre config:

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

De cette façon, vous ne devez charger votre produit pour obtenir la valeur dans votre shippingmodel.

Juste pour ajouter à ces réponses; si vous avez besoin pour obtenir l'attribut valeur , et vous n'avez pas le code chameau cas disponible, vous pouvez utiliser à la place getData() sur le produit:

$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top