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')); 

Solutions Collecting From Web of "Magento – загрузка только настраиваемых продуктов"

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

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

 $_productCollection1 = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('*') ->addAttributeToFilter('type_id','configurable'); foreach ($_productCollection1 as $product1) { echo $product1->getName(); ... } 

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

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

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

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

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

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

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

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

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

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