Domanda

Ho un oggetto Mage_Sales_Model_Order_Shipment_Item e io sono in grado di caricare un modello di prodotto utilizzando sku dell'elemento della spedizione (se posso ottenere questo attributo da solo utilizzando la voce della spedizione, tanto meglio).

Il modello del prodotto caricato non sembra contenere l'attributo size. Quando ho var_dump($prod->getData()) o var_dump($prod) non c'è nulla circa la sua dimensione. Il codice del attributo è size. Si trova sul prodotto Sono carico, è globale, tipo a discesa, non unico, richiesto. Come posso ottenere un attributo specifico prodotto, in questo caso "dimensione", da un modello caricato da SKU?

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

Inoltre, mi aspetto questo per restituire un valore di 57. Si tratta di un attributo di tipo discesa. Come posso ottenere il valore di questa option_id? Ad esempio, mi piacerebbe ottenere il "small" valore, non 57. Btw, vedo questi valori impostati per questo particolare sku nel database.

Ho provato questa soluzione anche

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

Ma $usedAtts è false.

Aggiornamento: Ho provato il metodo nel mio primo esempio, di caricare il prodotto con sku, su una nuova installazione e ha funzionato. I ha installato l'attributo size lo stesso, tranne la nuova installazione ha nel set di attributo 'default', in cui la prima è una consuetudine. Cercherò di guardare in quelle differenze .. ma nel frattempo, qualcuno ha un'idea del perché io non riesco a farlo nella mia prima installazione? ha installato i prodotti lo stesso. Nella prima, posso ottenere l'attributo di colore .. non so perché non riesco a ottenere dimensioni.

È stato utile?

Soluzione 2

Il problema è stato che quando ero in fase di inizializzazione Magento è stato inadempiente al "default" store view (vai a capire). Avevo bisogno di impostarla alla vista negozio di amministrazione, quindi sono in grado di ottenere tutte le informazioni del prodotto di cui avevo bisogno.

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

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

E questo codice ora funziona bene:

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

Altri suggerimenti

Per rispondere alla domanda:

Grazie ad alcuni pratico built-in metodi non si ha a che fare tutto il carico da soli:

  • Mage_Sales_Model_Order_Shipment_Item fornisce getOrderItem
  • Mage_Sales_Model_Order_Item fornisce getProduct

Quindi, tutto si dovrebbe avere a che fare è questo:

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

Se size viene mantenuto alla voce ordine, si può fare:

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

In alternativa, se avete bisogno di caricare il valore ID dal prodotto stesso, è possibile ottenere tutti i valori ID selezionati del prodotto:

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

La sua più facile per passare solo questo attributo per il tuo preventivo e ordine. In questo modo si può ottenere allover.

Aggiungi al preventivo (in config.xml dal proprio interno)

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

Copia l'attributo di citazione

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

Tutte queste sono sotto il tag globale nella configurazione.

Avanti è possibile copiare l'attributo per la citazione attraverso l'osservatore che avete appena assegnato l'evento nella vostra config:

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

In questo modo non sarà necessario caricare il prodotto per ottenere il valore della tua shippingmodel.

Giusto per aggiungere a queste risposte; se avete bisogno di ottenere l'attributo Valore , e non si ha il codice cammello caso a disposizione, è possibile utilizzare getData() sul prodotto invece:

$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top