この問題で私を助けてくれてありがとう。
私は解決策を見つけました。それはシンプルで、新しい製品を _productCollection オブジェクトに簡単に追加できる addItem() があります。
唯一のトリックは、空のコレクションをロードすることです
//load an empty collection (filter-less collections will auto-lazy-load everything)
$merged = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter('entity_id',-1);
空のテーブルに製品を追加する際に、製品 ID が重複していないことを確認する必要があります。magento では、重複した製品を製品コレクションに追加することはできません。
if(!$merged->getItemById($product->getId()))
{
$merged->addItem($product);
}
私の要件に従って、コード全体を以下に示します
$this->_productCollection = $layer->getProductCollection();
//load an empty collection (filter-less collections will auto-lazy-load everything)
$merged = Mage::getModel('catalog/product')->getCollection()->addFieldToFilter('entity_id',-1);
/**** Sorting the backorder product first ****/
foreach($this->_productCollection as $product)
{
if($product->getTypeId()=="simple" && $product->isSaleable())
{
if(!$merged->getItemById($product->getId()))
{
$merged->addItem($product);
}
}
}
/**** Sorting the avilable product second ****/
foreach($this->_productCollection as $product)
{
if($product->getTypeId()=="configurable" && $product->isSaleable())
{
if(!$merged->getItemById($product->getId()))
{
$merged->addItem($product);
}
}
}
/**** Sorting the sold out product last ****/
foreach($this->_productCollection as $product)
{
if(!$product->isSaleable())
{
if(!$merged->getItemById($product->getId()))
{
$merged->addItem($product);
}
}
}
/* Now assigning to the mergerd collection to the product Collection */
$this->_productCollection = $merged;