У меня есть следующий код:
$_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'));
Проблема с 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 не будет загружать его для отображения на странице списка продуктов.