Frage

Ich habe ein Mage_Sales_Model_Order_Shipment_Item Objekt und ich kann ein Produktmodell mit dem SKU des Sendungselements laden (wenn ich dieses Attribut nur mit dem Versandelement verwenden kann, umso besser).

Das geladene Produktmodell scheint das nicht zu enthalten size Attribut. Wenn ich var_dump($prod->getData()) oder var_dump($prod) Es gibt nichts an seiner Größe. Der Code des Attributs ist size. Es ist auf das von mir geladene Produkt festgelegt, es ist global, Dropdown -Typ, nicht eindeutig, erforderlich. Wie kann ich in diesem Fall "Größe" ein bestimmtes Produktattribut von einem von SKU geladenen Modell erhalten?

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

Ich würde auch erwarten, dass dies einen Wert von zurückgibt 57. Es ist ein Dropdown -Typ -Attribut. Wie kann ich den Wert für diese Option_ID erhalten? Zum Beispiel möchte ich den Wert erhalten "small", nicht 57. Übrigens sehe ich diese Werte für diese spezielle SKU in der Datenbank fest.

ich habe es versucht diese Lösung Auch

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

Aber $usedAtts ist false.

Aktualisieren: Ich habe die Methode in meinem ersten Beispiel ausprobiert und das Produkt mit geladen sku, bei einer frischen Installation und es hat funktioniert. Ich habe das Size -Attribut gleich eingerichtet, außer dass die neue Installation es im "Standard" -attributsatz hat, wobei der Prior eine Brauch ist. Ich werde versuchen, diese Unterschiede zu untersuchen. Aber in der Zwischenzeit hat jemand eine Vorstellung davon, warum ich sie in meiner vorherigen Installation nicht bekommen kann? Ich richte die Produkte gleich ein. Im Vorfeld kann ich das Farbattribut erhalten. Ich bin mir nicht sicher, warum ich keine Größe bekommen kann.

War es hilfreich?

Lösung 2

Das Problem war, dass es bei der Initialisierung von Magento die "Standard" -Spore -Ansicht (GO -Abbildung) verlangte. Ich musste es auf die Admin -Store -Ansicht einstellen, dann kann ich alle Produktinformationen erhalten, die ich brauchte.

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

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

Und dieser Code funktioniert jetzt gut:

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

Andere Tipps

Um die Frage zu beantworten:

Dank einiger praktischer integrierter Methoden müssen Sie nicht alleine geladen werden:

  • Mage_Sales_Model_Order_Shipment_Item bietet getOrderItem
  • Mage_Sales_Model_Order_Item bietet getProduct

Alles, was Sie tun müssen, ist Folgendes:

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

Wenn size ist auf dem Bestellelement beharrt, Sie können dies tun:

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

Wenn Sie den ID -Wert aus dem Produkt selbst laden müssen, können Sie alle ausgewählten ID -Werte des Produkts erhalten:

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

Es ist einfacher, dieses Attribut einfach an Ihr Angebot und Ihre Bestellung zu übergeben. Auf diese Weise können Sie es ausgleichen.

Fügen Sie es zum Angebot hinzu (in Ihrer Konfiguration.xml aus Ihrer Erweiterung)

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

Konvertieren

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

Kopieren Sie das Attribut zu Zitat

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

All dies befindet sich unter dem globalen Tag in Ihrer Konfiguration.

Als nächstes können Sie Ihr Attribut in das Zitat durch den Beobachter kopieren, dem Sie gerade das Ereignis in Ihrer Konfiguration zugewiesen haben:

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

Auf diese Weise müssen Sie Ihr Produkt nicht laden, um den Wert in Ihrem Versandmodel zu erhalten.

Nur um diese Antworten hinzuzufügen; Wenn Sie das Attribut erhalten müssen Wert, und Sie haben nicht den Camel-Case-Code verfügbar, Sie könnten verwenden getData() auf dem Produkt stattdessen:

$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top