0

次のコードでは、製品のリスト、在庫リストを出力していますが、何らかの理由でそれを機能させる唯一の方法は、それらをループしながら製品を再度インスタンス化することです。そうしないと、価格と在庫がわかりません。

何か案は?

ここに私のコードがあります、

        $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
4

2 に答える 2

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');
于 2012-04-20T14:44:30.097 に答える
1

Stock は Catalog モジュールの一部ではないようです! 製品のstock_item部分を扱うCatalogInventoryと呼ばれる独自のモジュールがあります。

そのため、次を追加する必要がありました。

コレクション選択時

$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();
于 2012-04-20T11:59:06.037 に答える