Отримайте кількість запасів продукції в магенто


12

Мені потрібно отримати кількість товарних запасів товару, як це отримати

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

Відповіді:


10

Вам потрібно буде приєднатися до таблиці, щоб отримати кількість.

Дивіться нижче код:

$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(),
    );
}

Як отримати тут створене значення атрибута, наприклад, я створив атрибут з ім'ям розміру, як отримати це значення

ОНОВЛЕННЯ (Хоча вам слід запитати в іншому qst, але я відповім тут за вас.)

Щоб отримати спеціальний атрибут, вам потрібно буде додати атрибут у ->addAttributeToSelectрозділі.

Все ще не працює?

Можливо, вам доведеться завантажити модель продукту, як іноді я відчував, що не всі власні атрибути додаються, коли витягуєте його з колекції (призначена для причин продуктивності). Щось на зразок:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  

як отримати тут створене значення атрибута. Наприклад, я створив атрибут з назвою розмір, як отримати це значення
vellai durai

Спробуйте $product->getSize()або$product->getData('size')
Адарш Хатрі

Його лише повернені нульові значення
vellai durai

Ви додали власний атрибут до ->addAttributeToSelect? Ви повинні сказати, що вибрати. інакше просто використовувати ->addAttributeToSelect(*)замість цього. Це дозволить вибрати все, що стосується продукту. Якщо це не працює, то незабаром перевірте мою оновлену відповідь.
Адарш Хатрі

Так, я додав
vellai durai

19

Це працює для мене.

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

6

Додавання інформації про запаси до колекцій товарів може здійснюватися одним рядком:

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

Цей прапор використовується в catalog_product_collection_load_afterспостерігачі:

/**
 * 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;
}

Якщо цей прапор не встановлено, встановлено $product->getStockItem()->getData()лише параметр is_in_stock. За допомогою прапора ви можете отримати кількість файлів, замовлення, ... для кожного товару в колекції

foreach ($products as $product) {
    echo $product->getStockItem()->getQty();
}

1

Ви можете отримати доступ до кількості запасів продуктів через StockItem так:

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

Випробуваний в template/catalog/product/view.phtml

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.