Специально для mamaboutique.ru написал новый компонент msDiscount. Учитывая требования заказчицы, компонент написан максимально универсально, и скорее всего появится в нашем магазине.
На данный момент возможности такие:
Скидки на группу товаров
Скидки для группы пользователей
Создание акций, ограниченных по времени, с указанием групп пользователей и товаров
Для групп пользователей можно указать сумму оплаченных покупок, при достижений которой, они автоматически в неё вступят.
Пересчет корзины при авторизации юзера
Автоматический вывод цены со скидкой в price, а старой цены в old_price.
Пользователь после авторизации видит новые цены везде: и в каталоге, и на странице товара, и в корзине.
Величину скидки можно указывать относительную, в процентах, или абсолютную, в валюте магазина.
Самое главное отличие от других систем, что я видел: довольно хитрый алгоритм, который проверяет все возможности применения разных скидок к текущей комбинации покупатель-товар и выбирает максимальную.
При этом, требуемые группы могут как включать, так и исключать позиции из акции.
Компонент pdoTools постоянно развивается и дополняется. После каждой обновки мне, как правило, нужно обновлять и сниппеты, которые с ним работают — потому что пользователи уже ожидают там новые функции.
А компонентов со сниппетами несколько: Tickets, miniShop2, mSearch2, да и в самом pdoTools уже 6 сниппетов (и планируется еще 2).
Отсюда встал вопрос о некотором упрощении и унификации этих сниппетов, для чего нужно вынести чать логики работы в основные классы.
Поэтому, с версии 1.8.0 всё построение условия where, сортировка и выборка значений вшита прямо в pdoFetch.
Вшита аккуратно, мешать имеющимся сниппетам не должна, но вдруг? Поэтому версия 1.8.0-beta. Обновляться нужно осторожно, и в случае проблем сразу писать в комментарии.
На всякий случай предусмотрен и предохранитель. Если ваш сниппет барахлит с новой версией pdoTools — попробуйте указать:
&disableConditions=`1`
это отключит встроенную обработку условий.
Свежая версия pdoTools, как обычно, упрощает жизнь пользователям MODX.
getChunk и parseChunk мы уже заменили. Сделали выборку через PDO, с полдключением ТВ и проверкой прав. Что осталось?
Верно — еще больше упростить работу с библиотекой. Встречайте 2 новых метода: pdoFetch::getObject и pdoFetch::getCollection().
Чтобы вам было удобно работать, классы pdoFetch и pdoTools теперь всегда находятся в системе, и вы можете получить их через modX::getService(); когда угодно.
Предвижу вопрос, а что это за 2 класса? А все просто: pdoTools — основной класс, в нём находятся только проверка прав и работа с чанками. А pdoFetch расширяет его, добавляя работу с базами данных.
Так что, если вам нужно быстро обернуть какие то данные в чанки, то pdoFetch не нужен, можно вызвать сразу основной класс. А если хотите что-то получить из БД — вызывайте pdoFetch, он унаследует родителя и вы сможете работать и с таблицами и с чанками.
Ну а теперь, подробнее.
За один вчерашний день новый miniShop2.1 закачали больше раз, чем за все время бета-тестов.
Конечно, появилось много вопросов, которые я быстренько решаю и обновляю компонент в репозитории.
Исправлен файл action.php, который был оставлен для совместимости с уже работающими магазинами. Теперь он просто адресует все запросы в новый плагин — и проблем нет.
Немного изменена работа msProduct::toArray(). Свойства производителя теперь выводятся с префиксом не «vendor_», а «vendor.» для единообразия со сниппетом msProducts. А то в одном месте через подчеркивание, а в другом через точку — непорядок.
Желательно так же получать и имя производителя через xPDO:
echo $resource->get('vendor.name');
хотя и старый вариант с подчеркиванием тоже вернёт что нужно.
Исправлена ошибка с мусорными записями в таблице событий плагинов. В скрипте сборки пакета балы ошибка, поэтому создавалось 27 событий с именами 0, 1, 2 и т.д.
Новая версия их чистит, и добавляет 2 новых и очень интересных события для модификации цен и веса.
Релиз новой версии miniShop2. Список изменений очень большой, отмечу основные:
Работа без javascript, изменены все чанки товаров и корзины.
Переписан стандартный javascript, можно навешивать разные события
Разнообразные улучшения админки, включая настройку таблицы заказов заказов
Улучшение работы почти всех сниппетов
Новый объект msCustomerProfile
Улучшение галереи, возможность включить friendly urls
Переписана работа системных событий
Тонна других исправлений и улучшений
Внимание, еси вы используете стандартный javascript, который идёт в комполекте, и не меняли его — то вам нужно привести свои чанки к новому виду. В основном все изменения заключаются в оборачивании эелементов в формы, чтобы они работали как с js, так и без него.
Если же вы ранее переименовали стандартный js и подключили отдельно в системных настройках, то в этой версии я вернул вам action.php, для обратной совместимости.
При использовании старого javascript со старыми чанками проблем с обновлением быть сообще не должно. Это, я думаю, 90% работающих магазинов.
Например, наш магазин уже крутится на новой версии.
Актуальные версии чанков находятся здесь. А подробности тут.
Если вы не готовы потратить полдня на это обновление — лучше и не устанавливайте.
Обязательно сделайте три бэкапа! Я вас предупредил.
Стабильная версия 1.7.0 реализует хитрый план по захвату рынка ускорению всех сайтов на MODX Revolution.
Помимо двух уже привычных сниппетов pdoResources и pdoUsers, у нас появляется 4 новых:
pdoCrumbs — вывод хлебных крошек, заменяет BreadCrumb.
pdoField — получение любого поля произвольного ресурса, или его родителя. Заменяет getResourceField и UltimateParent.
pdoSitemap — скоростная генерация карты сайта. Заменяет GoogleSitemap.
pdoNeighbors — вывод соседних документов, от указанного ресурса. Не знаю, может что и заменяет, но делалось без оглядки на другие решения.
Все сниппеты отличаются высокой скоростью работы, поддержкой ТВ и других примочек pdoTools. Заодно презентую новый раздел на сайте с документацией по компоненту — уже пора.
Обновил HybridAuth, решил старые вопросы по генерации ссылок и авторизации в разные контексты.
Для этого пришлось вдумчиво поразбираться с авторизацией в MODX, благодаря чему нашелся баг переключения контекстов и получения юзера.
Суть в том, что при авторизации в любой контекст, нужно обязательно авторизовать юзера в web. Без авторизации в web вы не попадаете в другой контекст никак. Что же делать тем, кто хочет поднять 2 независимых сайта с авторизацией? Читать дальше.
Вопрос этот очень старый, на форуме его поднимали еще в 2010 году.
Новая версия mSearch2 c небольшими исправлениями и обновлённым виджетом сортировки.
Исправлена работа с параметрами &queryVar= и &parentsVar=
, если вы меняете их имена. Теперь стандартный javascript сначала смотрит в конфиг для определения новых имён, а не тупо проверяет «query» и «parents» в адресе.
Исправлен вывод сообщений «ничего не найдено». Раньше они возвращались сразу, а теперь оформляются в чанк &tplWrapper и выставляются в плейсхолдер — если так указано в параметрах запуска.
Таким образом, например, можно прятать сообщение от сниппета, если ничего не найдено:
[[!mSearch2?
&totalVar=`mytotal`
&toPlaceholder=`mysearch`
]]
[[+mytotal:isnot=``:then=`[[+mysearch]]`]]
Неожиданно быстрый релиз новой версии pdoTools приносит нам кучу новых возможностей, включая 100% поддержку ТВ параметров.
Краткий список изменений, после которых я могу смело рекомендовать pdoResources на замену getResources всем пользователям MODX Revolution:
Добавлен параметр &loadModels для указания списка сторонних дополнений, для загрузки их моделей.
Добавлены параметры &prepareTVs и &proccesTVs — вывод ТВ параметров во всю ширь.
Добавлен параметр &tvFilters для фильтрации по ТВ параметрам.
Добавлена поддержка параметров &sortbyTV и &sortdirTV, для указания сортировки по ТВ.
Добавлена поддержка указания @INLINE и @FILE биндингов во всех параметрах с чанками.
pdoResources догнал и перегнал getResources.
Всю неделю занимался оптимизацией одного сайта и переводом его на mSearch2.
Сайт работает на Shopkeeper и процессе обновления выяснилось, что mFilter2 не очень-то с ним дружит. В частности, не умеет выводить страницы из другого контекста.
По завершению работ накопилось много изменений, и все они вошли в эту версию.
Внимание, всем кто использует &toPlaceholder=1
, его формат изменился. Теперь нужно использовать &toPlaceholders=mse2\_
или другой префикс.
Соответственно, все плейхолдеры станут такими: [[+mse2_filters]], [[+mse2_results]], [[+mse2_tpls]] и [[+mse2_total]].
Добавился параметр &toSeparatePlaceholders=`` — он работает так же, но разбивает по отдельным плейхолдерам еще и сами фильтры. И тогда у вас выходит: [[+mse2_results]], [[+mse2_tv|price]], [[+mse2_resource|parent]] и т.д. [[+mse2_filters]] при этом тоже работает.
Исправлена фильтрация number, теперь она гораздо быстрее. Если вы замечали, что фильтры работают медленнее, если выведены цены — обновление это исправит.
При указании значений в &parents=`` не важно, в каком контексте документы — сниппеты выберут потомков без проблем.
Исправлена ошибка с выводом ТВ параметров в фильтре, если в них есть заглавные буквы.
Очередное обновление библиотеки для быстрой работы с БД pdoTools.
Изменений всего 3, зато каких!
Одно из основных нареканий при переезде на pdoResources — отсутствие «значения по умолчанию», заданного в настройках ТВ параметра.
Многие думают, что это значение пишется в БД, но нифига. Если ТВ параметр пуст — то записи в БД вообще нет, и mySql отдаёт NULL при запросе.
С версии 1.5.0-pl все сниппеты pdoTools (включая getTickets и msProducts) будут выводить «умолчательное» значение, указанное в ТВ.
Вслед за новым HybridAuth улучшился и Office.
Главное изменение — тесная дружба с HybridAuth. Теперь можно авторизоваться и через email и через любые социальные сервисы, которые вы настроите.
Интеграция сделана очень приятно, работает самостоятельно, ничего особо делать не нужно. Включаестся просто — добавлением плейсхолдера [[+providers]] в чанки Office (вход, выход и профиль).