Magento - загружать только настраиваемые продукты - PullRequest
13 голосов
/ 12 марта 2011

У меня есть следующий код:

$_productCollection = $this->getLoadedProductCollection();

foreach ($_productCollection as $_product)
{
  if ($_product->_data['type_id'] == 'configurable')
  {
    ...
  } 
}

Хотя он делает то, что должен, он значительно замедляет время загрузки страницы.Можно ли загрузить только настраиваемые продукты и снять флажок «настраиваемый»?В магазине 12000 товаров, около 700 настраиваемых, остальные - простые дочерние продукты.

Я нашел следующий код, который возвращает все настраиваемые продукты.Мне нужны только товары из текущей категории:

$collectionConfigurable = Mage::getResourceModel('catalog/product_collection')
                ->addAttributeToFilter('type_id', array('eq' => 'configurable'));

Ответы [ 6 ]

27 голосов
/ 13 марта 2011

Проблема с getLoadedProductCollection() в том, что он уже загружен - данные о продуктах уже получены из базы данных. Недостаточно просто использовать коллекцию товаров текущей категории, которая будет игнорировать «слои» (фильтры атрибутов). Хитрость заключается в том, чтобы сначала удалить загруженные продукты из списка.

// First make a copy, otherwise the rest of the page might be affected!
$_productCollection = clone $this->getLoadedProductCollection();
// Unset the current products and filter before loading the next.
$_productCollection->clear()
                   ->addAttributeToFilter('type_id', 'configurable')
                   ->load();

print_r($_productCollection) также имеет свои проблемы: вы выводите не только продукты, но и все сведения о ресурсе, являющемся соединением с базой данных, и кэшированные значения, а также отдельные ресурсы продуктов и т. Д. ...

В этом случае я думаю, что вы были бы счастливее:

print_r($_productCollection->toArray())
7 голосов
/ 11 апреля 2013

Все эти решения не работают для меня, попробуйте это:

$_productCollection1 = Mage::getResourceModel('catalog/product_collection')
            ->addAttributeToSelect('*')
            ->addAttributeToFilter('type_id','configurable'); 

foreach ($_productCollection1 as $product1) {
    echo $product1->getName();
    ...
}

Это работает, но не знаю, правильно ли это (я новичок в Magento).Дайте мне знать, пожалуйста.

3 голосов
/ 03 января 2014

Попробуйте следующее

   $collection  =  Mage::getModel('catalog/product')->getCollection();
   $collection->addAttributeToFilter('type_id','configurable');

    foreach($collection as $product)
    {

    }

Для загрузки настраивается и просто, попробуйте

$collection->addAttributeToFilter('type_id', array('in' => array('configurable','simple')));
3 голосов
/ 12 марта 2011

То, как вы это делаете, требует загрузки всех продуктов перед их анализом и фильтрацией.Это, вероятно, ближе к тому, что вы ищете:

$_productCollection = $this ->getLoadedProductCollection()
                            ->addAttributeToFilter('type_id','configurable');
0 голосов
/ 23 марта 2016

Вот код для получения только настраиваемых продуктов:

 $Config_products  =  Mage::getModel('catalog/product')->getCollection()
            ->addAttributeToFilter('type_id','configurable');
0 голосов
/ 18 декабря 2012

Если вы измените «Видимость простого продукта» на «Не виден индивидуально», Magento не загрузит его для отображения на странице списка продуктов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...