Я запрограммировал новый вариант упорядочивания. Почему он работает неправильно?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Виталий Иванов (Харьков)
  • Группа: Пользователь
  • Сообщений: 5
  • Регистрация: 09.03.2012

11.04.2012 02:51

Всем доброй ночи! Есть вопрос по сортировке товаров:
Я добавил в список "сортировать по" созданный атрибут "Наличие" (необходимо было добавить свой, из за нескольких вариантов наличия)
При каждом обновлении страницы каким то образом последовательность вывода товаров меняется хаотически. В чём может быть причина и как это можно исправить. Заранее спасибо!

P.S. Для наглядности прикрепляю два скрина. Первая загрузка, вторая - обновление страницы

Прикрепленное изображение: sort-1.png

Прикрепленное изображение: sort-2.png

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.04.2012 08:09

Раз данная функциональность добавлена вами — значит, это к вам вопрос, почему она так работает.
Или обратитесь к квалифицированному программисту, который проведет аудит вашего программного кода.

#3 Виталий Иванов (Харьков)
  • Группа: Пользователь
  • Сообщений: 5
  • Регистрация: 09.03.2012

16.07.2012 00:30

Я и строчки кода не написал. Видимо "запрограммировал" это громко сказано! Я добавил кастомный атрибут "Наличие" с параметрами:

1. Есть в наличии
2. Под заказ
3. Под заказ (ждать 2-3 дня)
4. Под заказ (ждать 2-3 недели)

Также разрешил упорядочивать товар по данному атрибуту.

Затем зашёл в админку: Настройки - Каталог - Стандартный режим упорядочивания товаров - "Наличие" (мой кастомый атрибут, не маженты.

Я вывел SQL запрос, который Мажента генерит и выполнил его на стороне MySQL - результаты всегда одинаковые и правильные, но где то в маженте товары перемешиваются.

К примеру: сначала последовательность ID товаров:
1 (в наличии), 2(в наличии), 3(Под заказ), 4(Под заказ).
После обновления страницы:
2 (в наличии), 1(в наличии), 3(Под заказ), 4(Под заказ).

#4 Виталий Иванов (Харьков)
  • Группа: Пользователь
  • Сообщений: 5
  • Регистрация: 09.03.2012

14.08.2012 03:17

Прошу помочь по данному вопросу, очень актуален!

Адрес сайта: selesta.com.ua. Товары меняют свои позиции без логических на то причин.

#5 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

14.08.2012 08:03

Если решение вопроса так важно для вас - почему же вы тогда за 4 месяца не оплатили труд специалиста?
Или же решение вопроса важно только если решать его бесплатно, поднимая тему на форуме, а если решать платно - то деньги важнее решения вопроса?

#6 Виталий Иванов (Харьков)
  • Группа: Пользователь
  • Сообщений: 5
  • Регистрация: 09.03.2012

14.08.2012 21:15

Спасибо за ответ, вопрос важен, но хотелось бы решить его самостоятельно. Вопрос я задал для того, чтобы специалисты дали совет по его решению. Если бы я хотел его решить за деньги - я бы так и написал.

Сейчас я склоняюсь к тому, чтобы переопределить запрос в базу и программно добавить новый пункт сортировки. Буду очень благодарен, если кто скажет куда смотреть, ссылки по интересующему меня материалу; Кто знает, какая модель отвечает за обработку сортировки, где добавить свой пункт и обработчик на него. Заранее всем спасибо

#7 Виталий Иванов (Харьков)
  • Группа: Пользователь
  • Сообщений: 5
  • Регистрация: 09.03.2012

16.08.2012 22:41

Я добавил дополнительный атрибут сортировки товара по ID:

$_productCollection = $this->getLoadedProductCollection()->addAttributeToSort('entity_id', 'ASC');



Данный запрос был получен функцией:

$_productCollection->printLogQuery(true);


SELECT `e`.*, `cat_index`.`position` AS `cat_index_position`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price`, IF(availibility_option_value_t2.value_id IS NULL, availibility_option_value_t1.value, availibility_option_value_t2.value) AS `availibility` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1 AND cat_index.visibility IN(2, 4) AND cat_index.category_id='5' AND cat_index.is_parent=1 INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0 LEFT JOIN `catalog_product_entity_int` AS `availibility_t1` ON e.entity_id=availibility_t1.entity_id AND availibility_t1.attribute_id='132' AND availibility_t1.store_id=0 LEFT JOIN `catalog_product_entity_int` AS `availibility_t2` ON e.entity_id=availibility_t2.entity_id AND availibility_t2.attribute_id='132' AND availibility_t2.store_id='1' LEFT JOIN `eav_attribute_option_value` AS `availibility_option_value_t1` ON availibility_option_value_t1.option_id=IF(availibility_t2.value_id > 0, availibility_t2.value, availibility_t1.value) AND availibility_option_value_t1.store_id=0 LEFT JOIN `eav_attribute_option_value` AS `availibility_option_value_t2` ON availibility_option_value_t2.option_id=IF(availibility_t2.value_id > 0, availibility_t2.value, availibility_t1.value) AND availibility_option_value_t2.store_id=1 ORDER BY `availibility` ASC, `e`.`entity_id` ASC LIMIT 30


При выполнении этого запроса через phpMyAdmin результаты всегда верные, сортируются сначала по наличию, потому по ID. Но на выдаче товаров на сайте, всё равно результаты не сортируются по ID

Поделиться темой: