У меня есть несколько категорий: парни, дамы, мужчины, женщины и предложения.
Каждый продукт присваивается мужчинам, женщинам, мужчинам или женщинам.
И некоторые продукты относятся к категории «предложения».
Мне нужно получить все «предложения», но сортировать по другим категориям, я имею в виду:
ПРЕДЛОЖЕНИЯ -> ребята продукты -> женская продукция -> мужская продукция -> женская продукция
$collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSort('category_ids', 'ASC') ->addAttributeToSelect(array('name', 'sku', 'status', 'visibility', 'is_saleable')); foreach ($_productCollection as $_product) { echo "<!-- " . $_product->getName() . '-->'; }
Прямо сейчас я получаю продукты для отображения по категории «предложения», но эти продукты приводятся по атрибуту name, и мне нужны эти продукты, отсортированные по категориям перед именем.
Как я могу это достичь?
Следующий запрос будет возвращать все продукты и присоединяться к ним из таблицы отношений продуктов категории. Он также сортирует записи по category_id и позиции в пределах категории.
SELECT `e`.* FROM `catalog_product_entity` AS `e` LEFT JOIN catalog_category_product ON(entity_id=product_id) ORDER BY category_id AND position;
Единственное, что может случиться, это то, что вы сталкиваетесь с дублирующимися продуктами, поскольку продукты могут быть в категории товаров для женщин и женщин. Хотя это можно просто предотвратить, удалив x.catetgory_id
из запроса и добавив DISTINCT
для фильтрации дубликатов.
Под ним всего лишь быстрый макет того, как должна выглядеть коллекция. Вам все равно нужно проверить это. Надеюсь, это руководство в хорошем направлении для вас.
$collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('*') ->joinTable('catalog/category_product', 'entity_id=product_id', array('product_id' => 'product_id'), null, 'left') ->addAtributeToSort('category_id');