2012-04-20 44 views
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 

回答

1

貌似股票是不是目录模块的一部分!它有自己的模块,名为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

在加载集合之前,您应该添加这些属性(价格和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'); 
+0

这适用于价格,根据我的答案。但是,这似乎不适用于股票。我认为这是因为我们为我们的产品使用了OrganicInternet_SimpleConfigurableProducts,这意味着'stock_status'只是返回一个空白'stock_item'数组 – 2012-04-20 15:15:01

相关问题