Tải Bộ sưu tập sản phẩm đơn giản (cả, trong kho và hết hàng)


9

Tôi gặp sự cố khi tải TẤT CẢ các sản phẩm "con" của Sản phẩm có thể định cấu hình vào bộ sưu tập, ngay cả những sản phẩm hết hàng.

Thích tải các sản phẩm như thế này:

$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}

sẽ bỏ qua các sản phẩm trẻ em hết hàng, có thể vì chúng không được liệt kê trong bảng giá, được tham gia.

Có tùy chọn nào khác mà không tải tất cả id con bằng getChildrenIds và sau đó tải từng sản phẩm đơn giản có tải không?

Câu trả lời:


2

Vấn đề nằm ở lời kêu gọi addStoreFilter()trong getUsedProductCollection():

public function getUsedProductCollection($product = null)
{
    $collection = Mage::getResourceModel('catalog/product_type_configurable_product_collection')
        ->setFlag('require_stock_items', true)
        ->setFlag('product_children', true)
        ->setProductFilter($this->getProduct($product));
    if (!is_null($this->getStoreFilter($product))) {
        $collection->addStoreFilter($this->getStoreFilter($product));
    }

    return $collection;
}

Điều này thêm các bộ lọc để chỉ hiển thị các sản phẩm có thể bán được trong cửa hàng hiện tại.

Nếu $configurablelà phiên bản loại của sản phẩm có thể định cấu hình của bạn, bạn có thể hủy đặt bộ lọc cửa hàng như thế này trước khi gọi getUsedProductCollection():

$configurable->setStoreFilter(null);

Giải pháp hoàn chỉnh:

$configurable = $product->getTypeInstance();

$configurable->setStoreFilter(null);
$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}

1

Điều gì xảy ra nếu bạn thử cách này:

$simpleCollection = $configurable->getUsedProductCollection()
                     ->addAttributeToSelect('*')
                     //->addFilterByRequiredOptions() //don't use any filter, get all itmes
                     ;


foreach($simpleCollection as $simple){
   //$simple->getName();
}

Hãy thử một lần.


1

Bạn có thể sử dụng mã dưới đây làm giải pháp thay thế cho câu hỏi này:

$simpleCollection=$configurable->getTypeInstance(true)
                ->getUsedProducts(null,$configurable);

foreach($simpleCollection as $simple){
   //$simple->getName();
}

1

Nếu bạn cần bộ sưu tập các sản phẩm liên quan đến cấu hình, những điều sau đây sẽ hoạt động:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.