Uzyskaj ilość zapasów produktu w Magento

12

Muszę uzyskać ilość zapasów produktu dla produktu, jak to zdobyć

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'));

foreach ($products as $product) {
    $p['products'][] = array(
        'id'        => $product->getId(),
        'sku'       => $product->getSku(),
        'name'      => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'      => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'     => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
    );
}
Vellai Durai
źródło

Odpowiedzi:

10

Będziesz musiał dołączyć do stołu, aby uzyskać ilość.

Zobacz poniższy kod:

$products = Mage::getModel('catalog/product')
    ->getCollection()
    //->addAttributeToSelect('*')
    ->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'))
    ->joinField(
        'qty',
        'cataloginventory/stock_item',
        'qty',
        'product_id=entity_id',
        '{{table}}.stock_id=1',
        'left'
    );

foreach ($products as $product) {
    $p['products'][] = array(
        'id'            => $product->getId(),
        'sku'           => $product->getSku(),
        'name'          => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'        => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'         => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
        //get qty
        'qty'           => $product->getQty(),
    );
}

Jak uzyskać tutaj utworzoną wartość atrybutu, np. Utworzyłem atrybut o nazwie rozmiar, jak pobrać tę wartość

AKTUALIZACJA (Chociaż powinieneś zapytać w innym qst, ale odpowiem tutaj za ciebie.)

Aby uzyskać niestandardowy atrybut, musisz dodać atrybut w ->addAttributeToSelectsekcji.

Nadal nie działa?

Może być konieczne załadowanie modelu produktu, ponieważ czasami zdarza mi się, że nie wszystkie niestandardowe atrybuty są dołączane po wyciągnięciu go z kolekcji (chyba ze względów wydajnościowych). Coś jak:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  
Adarsh ​​Khatri
źródło
jak uzyskać tutaj utworzoną wartość atrybutu, np. utworzyłem atrybut o nazwie rozmiar jak pobrać tę wartość
vellai durai
Spróbuj $product->getSize()lub$product->getData('size')
Adarsh ​​Khatri
Zwracane są
Czy dodałeś już swój niestandardowy atrybut ->addAttributeToSelect? Musisz powiedzieć, co wybrać. w przeciwnym razie po prostu użyj ->addAttributeToSelect(*)zamiast tego. Spowoduje to wybranie wszystkiego związanego z produktem. Jeśli to nie zadziała, sprawdź wkrótce moją zaktualizowaną odpowiedź.
Adarsh ​​Khatri
Tak, dodałem
vellai durai
19

To działa dla mnie.

$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $_product) {
    $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product);
    echo $stock->getQty();
    echo $stock->getMinQty();
    echo $stock->getMinSaleQty();
}
Ajay Patel
źródło
6

Dodawanie informacji o zapasach do kolekcji produktów można wykonać za pomocą jednego wiersza:

/* Mage_Catalog_Model_Resource_Product_Collection */
$products->setFlag('require_stock_items', true);

Ta flaga jest używana w catalog_product_collection_load_afterobserwatorze:

/**
 * Add information about producs stock status to collection
 * Used in for product collection after load
 *
 * @param   Varien_Event_Observer $observer
 * @return  Mage_CatalogInventory_Model_Observer
 */
public function addStockStatusToCollection($observer)
{
    $productCollection = $observer->getEvent()->getCollection();
    if ($productCollection->hasFlag('require_stock_items')) {
        Mage::getModel('cataloginventory/stock')->addItemsToProducts($productCollection);
    } else {
        Mage::getModel('cataloginventory/stock_status')->addStockStatusToProducts($productCollection);
    }
    return $this;
}

Jeśli ta flaga nie jest ustawiona, ustawiono $product->getStockItem()->getData()tylko is_in_stock. Z flagą możesz uzyskać ilość, zaległości, ... dla każdego produktu w kolekcji

foreach ($products as $product) {
    echo $product->getStockItem()->getQty();
}
sv3n
źródło
1

Możesz uzyskać dostęp do zapasów produktów za pośrednictwem StockItem w następujący sposób:

$_product->getStockItem()->getQty();

Testowane w template/catalog/product/view.phtml

Andreas Riedmüller
źródło