为什么我需要两次实例化产品?

时间:2012-04-20 11:34:54

标签: magento

在下面的代码中,我打印的是产品列表,库存清单,由于某种原因,使其工作的唯一方法是在循环浏览产品时再次实例化产品。否则我会错过价格和库存。

有什么想法吗?

这是我的代码,

        $data = Mage::getModel('catalog/product')->getCollection()
                        ->addAttributeToSelect('name')
                        ->addAttributeToSelect('type_id')
                        ->addAttributeToSelect('sku')
                        ->addAttributeToSort('name', 'ASC')
                        ->addFilter('type_id', 'simple');

        ?><table dir="ltr" summary="Stock report table">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Type</th>
                    <th>SKU</th>
                    <th>Name</th>
                    <th>Price</th>
                    <th>Stock</th>
                </tr>
            </thead>
            <tbody>
                <?php

        $i = 0;
        foreach($data as $product){

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

            echo "<tr>";

            echo "<td>".$p->getId()."</td>";
            echo "<td>".$p->getTypeId()."</td>";
            echo "<td>".$p->getSku()."</td>";
            echo "<td>".$p->getName()."</td>";
            echo "<td>&pound;".number_format($p->getPrice(), 2)."</td>";
            echo "<td>".$p->getData('stock_item/qty')."</td>";

            $i++;
//            if($i == 1){ break; }
        }

        ?></tbody>
        </table>
        <?php

2 个答案:

答案 0 :(得分:1)

看起来Stock不是Catalog模块的一部分!它有自己的名为CatalogInventory的模块,它处理产品的stock_item部分。

所以我不得不添加以下内容,

选择我的收藏时

$data = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSelect('name')
                ->addAttributeToSelect('type_id')
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect('price')
                ->addAttributeToSort('name', 'ASC')
                ->addFilter('type_id', 'simple');

然后,当循环实例化库存项目并返回数据项目时,

$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product)->getQty();

答案 1 :(得分:1)

在加载集合之前,您应该添加这些属性(price和stock_status):

$data = Mage::getModel('catalog/product')->getCollection()
                    ->addAttributeToSelect('name')
                    ->addAttributeToSelect('type_id')
                    ->addAttributeToSelect('sku')
                    ->addAttributeToSort('name', 'ASC')
                    ->addFilter('type_id', 'simple')
                    ->addAttributeToSelect('price')
                    ->addAttributeToSelect('stock_status');