Получить количество товара в пурпурном

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

Как получить значение созданного атрибута здесь, например, я создал атрибут с именем size, как получить это значение

ОБНОВЛЕНИЕ (Хотя вы должны спросить в другом QST, но я отвечу здесь для вас.)

Чтобы получить пользовательский атрибут, вам необходимо добавить атрибут в ->addAttributeToSelectраздел.

Все еще не работает?

Возможно, вам потребуется загрузить модель продукта, поскольку иногда я обнаруживал, что не все пользовательские атрибуты присоединяются, когда вы извлекаете ее из коллекции (я полагаю, что она предназначена для повышения производительности). Что-то вроде:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  
Адарш Хатри
источник
как получить значение созданного атрибута здесь, например, я создал атрибут с именем size, как получить это значение
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();
}
sv3n
источник
1

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

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

Проверено в template/catalog/product/view.phtml

Андреас Ридмюллер
источник