[miniShop2] Релиз новой версии 4.4.0
Привет друзья. Впервые за два года мы подготовили достаточно крупное (за счет накопившегося материала) обновление miniShop2.
Ниже расскажу, что в него попало.
Сразу скажу — лично я для себя закрыл тему с miniShop2 — хотелось бы уже третью версию запустить и не тратить силы на предыдущую.
Но ребята решили иначе и с долей энтузиазма вносили свои пул реквесты.
Роль лидера и движущей силы взял на себя @Евгений Webinmd, проверяя, вливая все обновления. Он же и написал треть всех новшеств. За что ему большое спасибо.
Из наиболее заметного хочу упомянуть следующее.
Дает возможность менеджеру управлять стоимостью доставки. Прямо в админке, у заказа появилось поле, изменения стоимости доставки. Нет никаких уведомлений и прочего, просто прямое изменение значения. Пользоваться этой возможностью или нет, решать вам.
На самом деле мы давно договорились, подобного рода библиотеки корректнее использовать внутри шаблона, а не загружать из компонента. Если у вас интернет-магазин, то почти наверняка в шаблоне уже есть какая то галерея или лайтбокс.
У @Руслан Алеев наконец дошли руки до конца удалить скрипт из компонента.
Если у товара более одного изображения, то в результате будет попадать рандомное изображение. Проблема присутствует, если использовать вызов сниппета с параметром includeThumbs.
Не удаляются ресурсы в корзине. Не удаляются опции у категорий.
В логе сервера при этом ошибки вида:
Добавлено поле для указания сколько товаров пропускать от начала при перегенерации изображений в галерее товаров.
Иногда скрипт не отрабатывает до конца, этот функционал позволит не начинать каждый раз с одних и тех же товаров
Суть проблемы
Начиная с MySQL 5.7.5 по-умолчанию включён режим ONLY_FULL_GROUP_BY. В этом режиме мы не можем в запросе выбирать поля, которые не перечислены в GROUP BY, не определены явно в результаты группировки или для которых не применяются функции агрегации.
Проявление проблемы в miniShop2: Если товару задать несколько категорий, то в админке и на сайте не выводятся опции товара. В логе получаем ошибку MySQL:
Как решено
Первичный ключ (поля option_id и category_id) таблицы ms_category_options, с которой джойнится таблица ms_options в запросе из msProductData::prepareOptionListCriteria(), добавлен в GROUP BY.
Спасибо за внимание. Прошу вопросы по MiniShop3 придержать — по этому поводу, готовлю отдельную статью.
Ниже расскажу, что в него попало.
Сразу скажу — лично я для себя закрыл тему с miniShop2 — хотелось бы уже третью версию запустить и не тратить силы на предыдущую.
Но ребята решили иначе и с долей энтузиазма вносили свои пул реквесты.
Роль лидера и движущей силы взял на себя @Евгений Webinmd, проверяя, вливая все обновления. Он же и написал треть всех новшеств. За что ему большое спасибо.
Из наиболее заметного хочу упомянуть следующее.
Управление стоимостью доставки оформленного заказа
Дает возможность менеджеру управлять стоимостью доставки. Прямо в админке, у заказа появилось поле, изменения стоимости доставки. Нет никаких уведомлений и прочего, просто прямое изменение значения. Пользоваться этой возможностью или нет, решать вам.
Удалены конфиги fotorama
На самом деле мы давно договорились, подобного рода библиотеки корректнее использовать внутри шаблона, а не загружать из компонента. Если у вас интернет-магазин, то почти наверняка в шаблоне уже есть какая то галерея или лайтбокс.
У @Руслан Алеев наконец дошли руки до конца удалить скрипт из компонента.
Добавлен пропущенный rank равный нулю в сниппете msGetOrder
Если у товара более одного изображения, то в результате будет попадать рандомное изображение. Проблема присутствует, если использовать вызов сниппета с параметром includeThumbs.
Проблемы с удалением опций
Не удаляются ресурсы в корзине. Не удаляются опции у категорий.
В логе сервера при этом ошибки вида:
PHP Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, string given in .../core/components/minishop2/model/minishop2/mscategoryoption.class.php:<actual line>
В PHP 8 более строгая проверка типов. Мы больше не можем использовать string в count(), т.к. она принимает в качестве аргумента только Countable|array. В коде же мы записываем в переменную $products результат implode() (которая всегда возвращает string) и передаём это в count(), что приводит к ошибке (исключение TypeError):$products = implode(',', $products);
$key = $this->getOne('Option')->get('key');
$key = $this->xpdo->quote($key);
if (count($products) > 0) {
Добавлена возможность пропускать товары при перегенерации изображений
Добавлено поле для указания сколько товаров пропускать от начала при перегенерации изображений в галерее товаров.
Иногда скрипт не отрабатывает до конца, этот функционал позволит не начинать каждый раз с одних и тех же товаров
Исправление пропадания опций у товаров с несколькими категориями
Суть проблемы
Начиная с MySQL 5.7.5 по-умолчанию включён режим ONLY_FULL_GROUP_BY. В этом режиме мы не можем в запросе выбирать поля, которые не перечислены в GROUP BY, не определены явно в результаты группировки или для которых не применяются функции агрегации.
Проявление проблемы в miniShop2: Если товару задать несколько категорий, то в админке и на сайте не выводятся опции товара. В логе получаем ошибку MySQL:
#1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'sandbox_print.msCategoryOption.rank' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Можно, конечно, отключить ONLY_FULL_GROUP_BY, но это уже более костыльный вариант, тем более что у самого modx с этим режимом проблем нет.Как решено
Первичный ключ (поля option_id и category_id) таблицы ms_category_options, с которой джойнится таблица ms_options в запросе из msProductData::prepareOptionListCriteria(), добавлен в GROUP BY.
Также есть ряд более мелких исправлений и дополнений
Спасибо за внимание. Прошу вопросы по MiniShop3 придержать — по этому поводу, готовлю отдельную статью.
Поблагодарить автора
Отправить деньги
Комментарии: 10
@Евгений Webinmd ты косарик себе взял за труды?)
боюсь что потом за этот косарик буду должен отработать неделю
Есть возможность оставить Фотораму при установке?
Очень к ней привык и не хочется велосипед изобретать
Очень к ней привык и не хочется велосипед изобретать
Это же просто JS плагин. Что мешает его подключить в шаблон самостоятельно?
Так-то там всё можно самостоятельно написать и подключить…
О чем тогда речь?
Я искренне не вижу проблем сделать в шаблоне примерно вот так
Я искренне не вижу проблем сделать в шаблоне примерно вот так
<link href="/ajax/libs/fotorama/4.6.4/fotorama.css" rel="stylesheet">
<script src="/ajax/libs/fotorama/4.6.4/fotorama.js"></script>
Просто оставьте чанк MSGalleryFotorama к примеру где подключена фоторама по CDN и сделан вызов галереи, а вообще хотелось бы что-то более интересное в плане галереи, например fancyapps.com/carousel/#combine (тоже в отдельный чанк к примеру)
Спасибо за труд!
skrinshoter.ru/s/160824/aSRanUBk — я правильно понимаю, что эта версия компонента поддерживает php 8+?
skrinshoter.ru/s/160824/aSRanUBk — я правильно понимаю, что эта версия компонента поддерживает php 8+?
8.0 с небольшими нюансами поддерживает. А вот с 8.1 будет больше забот.
А для чего удалили ссылку на $customer в методе getCustomerId? Теперь в событие msOnBeforeGetOrderCustomer передается всегда null и после события тоже всегда null и осталась бесполезная проверка, которая всегда выполняется, при этом на $customer в событии msOnBeforeGetOrderCustomer никак не повлиять, об этом даже pull request есть. Верните, пожалуйста, ссылку обратно)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.