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'));
Ответы
Ответ 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 не будет загружать его для отображения на странице списка продуктов.