โหลดการรวบรวมผลิตภัณฑ์อย่างง่าย (ทั้งในสต็อกและหมด)


9

ฉันประสบปัญหาในการโหลดผลิตภัณฑ์ "เด็ก" ทั้งหมดของผลิตภัณฑ์ที่กำหนดค่าได้ลงในคอลเล็กชันแม้กระทั่งสินค้าที่หมด

ชอบโหลดผลิตภัณฑ์เช่นนี้:

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

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

จะไม่สนใจผลิตภัณฑ์สำหรับเด็กที่ไม่มีในสต็อกอาจเป็นเพราะพวกเขาไม่ได้อยู่ในตารางราคาที่เข้าร่วม

มีตัวเลือกอื่นโดยไม่ต้องโหลดรหัสเด็กทั้งหมดโดยgetChildrenIdsแล้วโหลดผลิตภัณฑ์ง่าย ๆ พร้อมโหลดหรือไม่

คำตอบ:


2

ปัญหาอยู่ในการเรียกร้องให้addStoreFilter()ใน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;
}

เพิ่มตัวกรองเพื่อแสดงเฉพาะผลิตภัณฑ์ที่ขายได้ในร้านปัจจุบัน

หาก$configurableเป็นอินสแตนซ์ประเภทของผลิตภัณฑ์ที่กำหนดค่าได้ของคุณคุณสามารถยกเลิกการตั้งค่าตัวกรองร้านค้าเช่นนี้ก่อนที่จะโทรgetUsedProductCollection():

$configurable->setStoreFilter(null);

โซลูชั่นที่สมบูรณ์:

$configurable = $product->getTypeInstance();

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

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

1

จะเกิดอะไรขึ้นถ้าคุณลองด้วยวิธีนี้:

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


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

ให้มันลอง.


1

คุณสามารถใช้โค้ดด้านล่างเป็นทางเลือกสำหรับคำถามนี้:

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

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

1

หากคุณต้องการรวบรวมผลิตภัณฑ์ที่เกี่ยวข้องกับการกำหนดค่าได้ดังต่อไปนี้ควรใช้งานได้:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.