これには簡単な答えがあるかもしれませんが、私はそれを見つけることができません。有効になっているが在庫がない商品を除いて、商品コレクションを取得しようとしています。
次の方法を試しましたが、これによりエラーが発生します。
$productIds = array('3','4','9');
$productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect(
array('name', 'image', 'price')
)
->addIdFilter($productIds)
;
$this->_productCollection = Mage::getSingleton('cataloginventory/stock')
->addInStockFilterToCollection( $productCollection )
;
次のエラーが発生します。
PHP Fatal error: Call to a member function getTypeInstance() on a non-object in app/code/core/Mage/Catalog/Block/Product/Abstract.php on line 117
app / code / core / Mage / Catalog / Block / Product / Abstract.php:117には以下のメソッドがあります:
/**
* Retrieve url for add product to cart
* Will return product view page URL if product has required options
*
* @param Mage_Catalog_Model_Product $product
* @param array $additional
* @return string
*/
public function getAddToCartUrl($product, $additional = array())
{
// line 117:
if (!$product->getTypeInstance(true)->hasRequiredOptions($product)) {
return $this->helper('checkout/cart')->getAddUrl($product, $additional);
}
$additional = array_merge(
$additional,
array(Mage_Core_Model_Url::FORM_KEY => $this->_getSingletonModel('core/session')->getFormKey())
);
if (!isset($additional['_escape'])) {
$additional['_escape'] = true;
}
if (!isset($additional['_query'])) {
$additional['_query'] = array();
}
$additional['_query']['options'] = 'cart';
return $this->getProductUrl($product, $additional);
}
コレクションをフィルタリングして在庫のある商品のみを取得する簡単な方法はありますか?明らかにisSaleable()
、ループの内側について知っています。ありがとう。
$this->getAddToCartUrl($product)
外に迷う者はいません。