KlenOfSky WEB Agency - создание и тех. поддержка сайтов. Продвижение в Яндекс и Google

Создание сайтов, поисковое продвижение в Google. Сопровождение, тех.поддержка


Звонить: +7 (999)96-88-777
Писать: web@klenovsky.ru


Получение списка товаров по их атрибутам или категории в Magento

Получение списка товаров по их атрибутам или категории в Magento

Как и все прочие элементы в Magento, товары имеют свою собственную модель и коллекцию, которую можно использовать для получения списка товаров. Так что первое что нам нужно - это получить экземпляр коллекции товара:

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

В то же время мы можем указать, какие атрибуты товар мы хотим получить. Для этого мы можем использовать метод addAttributeToSelect. Задавать их можно либо по отдельности - по одному в каждом методе, либо массививом в качестве аргумента.

$collection
   ->addAttributeToSelect('name')
   ->addAttributeToSelect('price');
 
$collection->addAttributeToSelect(array('company', 'region'));

Если нужно получить все атрибуты товара пишем так:

$collection->addAttributeToSelect('*');

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

$products->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED);

Или несколько, указанные друг за другом.

$collection
   ->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
   ->addAttributeToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);

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

// Equals: eq
$collection->addAttributeToFilter('name', array('eq' => 'Some product'));

// Not Equals: neq
$collection->addAttributeToFilter('sku', array('neq' => 'not-this-one'));

// Like: like
$collection->addAttributeToFilter('name', array('like' => 'Some%'));

// Not Like: nlike
$collection->addAttributeToFilter('name', array('nlike' => 'Not%'));

// Greater than: gt
$collection->addAttributeToFilter('price', array('gt' => 10));

// Greater than or equals: gteq
$collection->addAttributeToFilter('price', array('gteq' => 10));

// Less than: lt
$collection->addAttributeToFilter('price', array('lt' => 99));

// Less than or equals: lteq
$collection->addAttributeToFilter('price', array('lteq' => 99));

// In: in
$collection->addAttributeToFilter('id', array('in' => array(10, 15, 20)));

// Not In: nin
$collection->addAttributeToFilter('id', array('nin' => array(11, 16, 17)));

// NULL: null
$collection->addAttributeToFilter('size', 'null');

// Not NULL: notnull
$collection->addAttributeToFilter('size', 'notnull');

Получение пересень товаров по категориям делается немного иначе - сначала получаем категорию элемента по идентификатору, а затем - набор продуктов для этой категории.

$category = Mage::getModel('catalog/category')->load($categoryId);
$collection = $category->getProductCollection();

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

$collection = Mage::getModel('catalog/product')->getCollection()
    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left')
    ->addAttributeToFilter('category_id', array('in' => array(1 ,2 ,3)))
    ->addAttributeToSelect(array('name', 'price'));

В итоге, теперь можно работать с полученной коллекцией товаров:

foreach ($collection as $_product) {
   // do something with product
}
Большая Семеновская, 42 10509 Россия, город Москва, +7 (999)96-88-777
Рассказать друзьям:

comments powered by Disqus