Подтвердить что ты не робот

Magento - загрузка только настраиваемых продуктов

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

$_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'));
4b9b3361

Ответ 1

Проблема с 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())

Ответ 2

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

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

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

Он работает, но не знает, правильно ли он (я новичок в Magento). Сообщите мне, пожалуйста.

Ответ 3

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

$_productCollection = $this ->getLoadedProductCollection()
                            ->addAttributeToFilter('type_id','configurable');

Ответ 4

Попробуйте выполнить

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

    foreach($collection as $product)
    {

    }

Для загрузки настраиваемых и простых, а также попробовать

$collection->addAttributeToFilter('type_id', array('in' => array('configurable','simple')));

Ответ 5

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

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

Ответ 6

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