2011-11-28 13 views
11

io uso questo codice:Magento: Prendi la quantità nel carrello per un determinato prodotto

// $items = Mage::getModel('checkout/cart')->getQuote()->getAllItems(); 
$items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems(); 
  
foreach($items as $item) { 
    echo 'ID: '.$item->getProductId().'<br />'; 
    echo 'Name: '.$item->getName().'<br />'; 
    echo 'Sku: '.$item->getSku().'<br />'; 
    echo 'Quantity: '.$item->getQty().'<br />'; 
    echo 'Price: '.$item->getPrice().'<br />'; 
    echo "<br />"; 
} 

per avere informazioni sui prodotti nel carrello.

Come posso ottenere solo la quantità di un determinato prodotto (productId)

Grazie mille.

risposta

39

tl; dr: La risposta a questa domanda varia in complessità in base al tipo di prodotto (configurabile, semplice, etc.).Questo può guidare come si imposta il catalogo e impostare la visibilità del prodotto semplice. Se tutto ciò che hai nel tuo catalogo è semplice, questa attività è molto semplice. Inoltre: vedi modifica alla fine.

Ci sono molti scenari da considerare. Ad esempio, se si aggiunge un articolo configurabile al carrello, la quotazione avrà due voci di preventivo per opzione: un articolo di quotazione per il prodotto padre configurabile che conterrà informazioni sulla quantità di opzioni e un articolo di quotazione che fornirà i dati di prodotto semplici dell'opzione. Gli articoli del gruppo avranno un articolo del gruppo principale e un elemento semplice per ogni opzione del pacchetto.

Ciò che si riduce a è che è necessario decidere come rappresentare la quantità di ciascun tipo di prodotto per l'utente; ad esempio, vuoi rappresentare lo stesso modello di maglietta di un elemento pubblicitario con tutte le grandezze o vuoi separarlo per ogni dimensione (quest'ultimo è il modo in cui Magento li rende nel carrello/aree di revisione).

vi consiglio di aggiungere i prodotti al carrello, quindi utilizzando questo nel frontend per vedere i dati oggetto citazione:

<?php 

include 'app/Mage.php'; 
Mage::setIsDeveloperMode(true); 

Mage::app(); // Mage_Core_Model_App 

Mage::getSingleton('core/session', array('name'=>'frontend')); 

$quote = Mage::helper('checkout/cart')->getCart()->getQuote(); 

echo count($quote->getItemsCollection()); 
foreach ($quote->getItemsCollection() as $item){ 
    Zend_Debug::dump($item->debug()); 
} 

mi consiglia di utilizzare una installazione con i dati di esempio e l'aggiunta di diversi quantitativi di ciascun tipo di prodotto al carrello. Sulla base di questo + l'output del codice precedente, vedrai che hai diversi approcci e trucchi mentre passi in rassegna. Gli scenari di confondimento sono quando si ha la seguente:

  • elementi configurabili
    • Per ogni opzione, avrete il prodotto configurabile come un elemento e il semplice prodotto da cui l'opzione è derivato come un oggetto. Se si desidera visualizzare il conteggio totale dal genitore configurabile, è necessario coincidere il qty configurabile totale nel circuito:

Codice:

$configurables = array(); 

// ...then, inside your foreach 
if($item->getProductType() === 'configurable'){ 
    if(isset($configurables[$item->getProductId()])){ 
     //add to the other options' quantity 
     $configurables[$item->getProductId()] += $item->getQty(); 
    } 
    else { 
     $configurables[$item->getProductId()] = $item->getQty(); 
    } 
} 
  • vuoto raggruppa gli elementi
    • I prodotti semplici che vengono aggiunti al preventivo come parte di un articolo raggruppato sono separati da elementi semplici che vengono aggiunti singoli e altri gruppi a cui possono appartenere.Se si vuole aggregare questi, è possibile scorrere in questo modo:

Codice:

$grouped = array(); 

// ...then, inside your foreach 
if($item->getProductType() === 'grouped' || $item->getProductType() === 'simple'){ 
    if(isset($grouped[$item->getProductId()])){ 
     //add to the other options' quantity 
     $grouped[$item->getProductId()] += $item->getQty(); 
    } 
    else { 
     $grouped[$item->getProductId()] = $item->getQty(); 
    } 
} 
  • Articoli Bundle
    • Articoli Quote prodotto bundle sono rappresentate da una articolo per il prodotto del pacchetto e articoli del prodotto semplice separati per ciascuna opzione. I prodotti semplici hanno le informazioni sulla quantità memorizzate contro di loro. Gli elementi semplici hanno un ID articolo principale che fa riferimento all'elemento di offerta del prodotto in bundle, proprio come fanno gli articoli per bambini articoli di articoli di design configurabili.

Si può vedere che la gestione di tutti gli scenari è ingombrante. Vorrei poterti dire che è più semplice farlo tramite i modelli di risorse, ma il fatto è che nel database la tabella sales_flat_quote_item_option memorizza le informazioni sulla quantità in una colonna di dati serializzati, quindi dovrai inserire le cose in PHP per andare ovunque con loro (che è fatto per te tramite il modello risorsa).

Spiacente, questa è una risposta così lunga, ma è possibile vedere che, in base all'impostazione del catalogo, si è in cura per un esame accurato e per verificare che le proprie basi siano coperte.

EDIT:Durante il tentativo di essere approfondita, non sono riuscito a dire che si dovrebbe guardare nella tabella sales_flat_quote_item. A seconda delle esigenze, è possibile utilizzare facilmente i dati in esso per modellare in modo rapido, elegante ed efficiente i dati necessari per raggiungere i requisiti di visualizzazione.

0

si potrebbe provare:

$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$item = Mage::getModel('sales/quote_item')->getCollection() 
       ->addFieldToFilter('quote_id', $quote->getId()) 
       ->addFieldToFilter('product_id', $productId) 
       ->getFirstItem(); 
//to get the quantity: $item->getQty(); 
+0

ottengo questo errore: Fatal error: Call to una funzione membro getStoreId() su un non-oggetto in/app/code/core/Mago/Vendite/Modello/Mysql4/Citazione/Articolo/Collection.php on line 67 – Bizboss

+0

Ti imbatterai in problemi con questo perché la citazione si aspetta che un oggetto negozio venga caricato. Se stai eseguendo questo codice "all'esterno" di Mage :: run(), usa 'Mage :: getSingleton ('core/session', array ('name' => 'frontend'));' – benmarks

0

Si dovrebbe utilizzare il metodo

setQUote 

quando si chiama la collezione. Dovrebbe apparire come questo

$quote = Mage::getModel('sales/quote')->load($quote_id); 
$salesQuoteItem = Mage::getModel('sales/quote_item')->getCollection() 
      ->setQuote($quote) 
      ->addFieldToFilter('quote_id', $quote_id) 
      ->addFieldToFilter('product_id', $data['product_id']) 
      ->getFirstItem(); 
3

Prova questa:

// if you don't have the product object already... 
$_product = Mage::getModel('catalog/product')->load($productid); 

$_quote = Mage::getSingleton('checkout/session')->getQuote(); 
$_item = $_quote ? $_quote->getItemByProduct($_product) : false; 
$qty = $_item ? $_item->getQty() : 0; 
Problemi correlati