Добавил атрибут тип Yes/No.
Пытаюсь отсортировать по нему используя $collection->addAttributeToSort('my_cust', 'desc');
Не пашет, а вот по др. атрибутам сортирует. Может проблема в типе?
Спасибо.
Как упорядочить коллекцию по атрибуту типа dropdown
18.03.2011 12:22
Для отладки работы коллекций рекомендую смотреть запросы SQL, которые она выполняет для получения своих элементов.
18.03.2011 12:30
Спасибо, посмотрел запрос, там нет даже намека на атрибут, странно... добавляю др. атрибут запрос становится больше и уже связь на атрибут идет. Атрибуты отличаются только типом и опцией "Use In Layered Navigation" но ее я отключал и все равно сортировка шла.
Может все дело в типе?
Может все дело в типе?
18.03.2011 12:38
Попробовал добавить следующий код
Запрос изменился но продукты с нужным атрибутов вообще исчезли из коллекции, может что то не правильно в addAttributeToFilter('my_cust')?
$collection->addStoreFilter() ->addAttributeToFilter('my_cust');
Запрос изменился но продукты с нужным атрибутов вообще исчезли из коллекции, может что то не правильно в addAttributeToFilter('my_cust')?
18.03.2011 13:06
Проверил, все дело в типе. Создал еще один атрибут но с типом Drobdown и добавил в него Yes/No мортировка заработала, решил сделать еще третий атрибут с типом Yes/No мало ли что, добавил его, сортировка не пашет. Вот так вот.
22.03.2012 13:29
Theme up.
Такая же фигня.
Создал атрибут, добавил фильтр в коллекцию продуктов:
$_productCollection = $product
->getCollection()
->addCategoryFilter($cur_subcategory)
->addAttributeToFilter('isflashsale', array('neq' => 1))
->addAttributeToSelect(array('name', 'price', 'small_image', 'special_price'), 'inner')
;
Исчезли не только те продукты, которые не соответствуют фильтру, но и те которые удовлетворяют.
Стал копать дальше:
echo ($_productCollection->getSelect());
запрос выдаёт интересную вещь:
SELECT
...
FROM `dev_catalog_product_entity` AS `e`
...
INNER JOIN `dev_catalog_product_entity_int` AS `at_isflashsale_default`
ON (`at_isflashsale_default`.`entity_id` = `e`.`entity_id`)
AND (`at_isflashsale_default`.`attribute_id` = '240')
AND `at_isflashsale_default`.`store_id` = 0
LEFT JOIN `dev_catalog_product_entity_int` AS `at_isflashsale`
ON (`at_isflashsale`.`entity_id` = `e`.`entity_id`)
AND (`at_isflashsale`.`attribute_id` = '240')
AND (`at_isflashsale`.`store_id` = 1)
WHERE
(IF(at_isflashsale.value_id > 0, at_isflashsale.value, at_isflashsale_default.value) != 1)
Из запроса стало видно, что через INNER JOIN не цепляется таблица dev_catalog_product_entity_int по причине того, что в этой таблице нет записи по данному атрибуту у данного товара.
Т.е. Я создал атрибут, он в фильтре не вылазит.
Как только я переключил значение атрибута товара в любое значение, он стал участвовать в фильтрации. Потому что появилась запись в таблице catalog_product_entity_int.
Теперь задача сводится к тому, чтобы проинициализировать все товары, чтобы их вновь созданные атрибуты появились в этой таблице.
Am I on right way?
И как это сделать? Или есть другой путь зацепить атрибут?
Реиндексирование и очистка кэша не помогают.
Такая же фигня.
Создал атрибут, добавил фильтр в коллекцию продуктов:
$_productCollection = $product
->getCollection()
->addCategoryFilter($cur_subcategory)
->addAttributeToFilter('isflashsale', array('neq' => 1))
->addAttributeToSelect(array('name', 'price', 'small_image', 'special_price'), 'inner')
;
Исчезли не только те продукты, которые не соответствуют фильтру, но и те которые удовлетворяют.
Стал копать дальше:
echo ($_productCollection->getSelect());
запрос выдаёт интересную вещь:
SELECT
...
FROM `dev_catalog_product_entity` AS `e`
...
INNER JOIN `dev_catalog_product_entity_int` AS `at_isflashsale_default`
ON (`at_isflashsale_default`.`entity_id` = `e`.`entity_id`)
AND (`at_isflashsale_default`.`attribute_id` = '240')
AND `at_isflashsale_default`.`store_id` = 0
LEFT JOIN `dev_catalog_product_entity_int` AS `at_isflashsale`
ON (`at_isflashsale`.`entity_id` = `e`.`entity_id`)
AND (`at_isflashsale`.`attribute_id` = '240')
AND (`at_isflashsale`.`store_id` = 1)
WHERE
(IF(at_isflashsale.value_id > 0, at_isflashsale.value, at_isflashsale_default.value) != 1)
Из запроса стало видно, что через INNER JOIN не цепляется таблица dev_catalog_product_entity_int по причине того, что в этой таблице нет записи по данному атрибуту у данного товара.
Т.е. Я создал атрибут, он в фильтре не вылазит.
Как только я переключил значение атрибута товара в любое значение, он стал участвовать в фильтрации. Потому что появилась запись в таблице catalog_product_entity_int.
Теперь задача сводится к тому, чтобы проинициализировать все товары, чтобы их вновь созданные атрибуты появились в этой таблице.
Am I on right way?
И как это сделать? Или есть другой путь зацепить атрибут?
Реиндексирование и очистка кэша не помогают.
22.03.2012 14:13
Короче незнаю, прально/непрально, сделал так:
$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $product):
if (!$product->getIsflashsale())
$product->setIsflashsale(0)->save();
endforeach;
пробежался по всем продуктам, принудительно придал значение атрибута.
Залепуха, конечно, но кагбэ фильтрация заработала...
$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $product):
if (!$product->getIsflashsale())
$product->setIsflashsale(0)->save();
endforeach;
пробежался по всем продуктам, принудительно придал значение атрибута.
Залепуха, конечно, но кагбэ фильтрация заработала...