Как вы уже заметили, мы выпустили новую версию UMI.CMS под номером 2.8.0. В этой версии основной акцент был сделан на новый модуль интернет-магазина, новый edit-in-place и на улучшение внутреннего дизайна системы.
Меня попросили написать про модуль интернет-магазина, но это слишком широкая тема, чтобы ужать ее до формата блога.
Поэтому я решил поступить следующим образом. В этом посте я выпишу технические интересности нового магазина и в целом версии 2.8 в виде списка тезисов и пояснений к ним. Ориентироваться буду преимущественно на разработчиков.
Я предлагаю написать в комментариях, какие именно пункты кажутся наиболее интересными. От ваших ответов будут зависеть темы следующих постов.
Интернет-магазин
Модуль интернет-магазина был полностью перепроектирован и переписан. Интерфейсы модуля и пользовательские возможности подробно описаны в документации,поэтому дублировать этот текст в блог я не буду. Лучше остановимся на отдельных компонентах модуля.
Скидки
Скидки в 2.8 стали компонентными. Каждая скидка состоит из двух частей: модификатора цены и списка правил скидки.
- Модификатор скидки - это алгоритм, согласно которому будет пересчитываться цена. Сейчас можно выбрать либо фиксированную скидку, либо процент от начальной стоимости.По необходимости разработчик может добавить свой совершенно новый модификатор.
- Правило скидки - это фильтр, который необходим системе в тот момент, когда она принимает решение, какие скидки подходят для определенных товаров или заказов. Т.е. это набор фильтров. Например, если у скидки выбрано 2 правила: ограничение по времени и по группе пользователей, то скидка будет применена только в том случае, если оба эти условия удовлетворены.
Как и в случае с модификатором цены, новые правила могут быть введены системы разработчиком сайта самостоятельно. Этот механизм позволяет реализовать буквально любой дисконтный механизм, который может потребоваться.
Скидки бывают двух видов: скидка на отдельный товар и скидка на заказ. От того, к чему применяется скидка, зависит выбор возможных правил и модификаторов.
Заказ
Заказ теперь приписываются домену, в котором он совершен, а в административной части список заказов можно отфильтровать по домену.
Генерация номера заказа вынесена в отдельный класс, что позволяет изменить стандартный механизм генерации номера (по умолчанию это инкрементация) на специфичный для вашей бизнес-задачи. В файле config.ini за это отвечает настройка “emarket.numbers”. Пример можно посмотреть в файле ~/classes/modules/emarket/classes/orders/numbers/default.php
Заказ в 2.8 может содержать опционные товары. Опционные товары отличаются от обычных тем, что содержат набор опций, которые могут влиять на стоимость товара.
Оплата
По умолчанию магазин теперь поддерживает следующие системы оплаты: Яндекс.Деньги, Payonline System, Chronopay
Мы постарались максимально облегчить для разработчика добавление в UMI.CMS новых систем оплаты. К примеру, размер кода, который реализует интеграцию с Payonline, составляет менее 50 строк кода (~/classes/modules/emarket/classes/payment/systems/payonline.php).
Доставка
По умолчанию поддерживаются: Почта России, доставка курьером, самовывоз.
Новые системы доставки интегрируются в UMI.CMS так же легко, как и новые системы оплаты.
Процесс покупки
Процесс покупки разбит на этапы. По умолчанию в процесс покупки входит 4 этапа:
- Проверка необходимых персональных данных
- Ввод или выбор адреса доставки
- Выбор способа доставки
- Выбор способа оплаты (и оплата)
Приведенный список этапов может меняться в зависимости от требований. Если на сайте не используется система оплаты или доставки, то при отключении соответствующих опций в настройках магазина, они исчезнут из процесса покупки. Также у разработчика существует возможность встроить в процесс покупки собственные этапы.
Покупка в интернет-магазине больше не требует обязательной регистрации.
Система
“Restrictions”– ограничения на значения свойств объектов и страниц. Этот механизм позволяет задавать ограничения на формат полей, а также определять правила преобразования значений при их получении и сохранении.
Для разработчиков модулей и макросов у нас появился новый способ осуществлять выборки – selector (вместо umiSelection ). Документацию по его использованию можно найти по адресу http://dev-wiki.umisoft.ru/index.php/Selector
Сборка мусора.В 2.8 появился механизм, позволяющий задавать expiration для объектов (umiObject) в системе. Когда происходит событие “cron”, сборщик мусора удаляет все устаревшие объекты. Таким образом, можно организовать удобную работу с временными объектами.
Трансляция результатов работы протоколов в json – в некоторых случаях результат работы макроса удобнее получить не в xml-формате, а в формате JSON.
В файле настроек появилась возможность указать страницу-заглушку и управлять ее показом при помощи фильтрации по ip.
Переход в режим “debug” теперь осуществляется через файл config.ini. Там же можно указать ограничение по ip-адресам для этой опции.
В файле config.ini можно указать ограничение на доступ к протоколам (udata, uobject, …) через http, а также ограничить доступ к ним в зависимости от прав пользователя.
Добавлен механизм слежения за перемещениями страниц. Теперь при запросе перемещенной страницы по старому адресу будет срабатывать seo-корректное перенаправление на ее новый адрес.
Механизм отрисовки капчи стал доступен для изменения разработчиком.
Для xslt-шаблонизатора в 2.8 по умолчанию включена опция “xslt-nested-menu”, которая позволяет макросу udata://content/menu/ выводить вложенное меню и избавиться от необходимости использовать рекурсивные вызовы в шаблоне.

Комментирование доступно только авторизованным пользователям.
Пожалуйста, зарегистрируйтесь или войдите на сайт.
Хотелось бы поподробнее:
1) Про Опционные товары и про поле типа "Составное".
2) Про импорт-экспорт в umiDump 2.0: говорилось, что будет возможность обмена нетолько страницами, но и объектами и типами данных. Как сделать экспорт-импорт типов данных? Только базовые типы можно перенести или остальные тоже?
3) Про нововведения в шаблонах админки: там какие-то хитрости появились. Например параметр flat-mode для чего нужен?
2. По этому пункту я попрошу ответить Антона Прусова.
3. Если я не ошибаюсь, то flat-mode у smc был еще в 2.7. Эта опция означает, что данные в таблицу будут переданы двумерным списком. по умолчанию, например, flat-mode используется при выводе объектов. Как это работает со страницами, можно посмотреть в модуле комментариев.
С вкладками все очень просто и удобно теперь.
Вот описание http://dev-wiki.umisoft.ru/index.php/Tabs в нашей wiki.
А вот еще вопросик: можно как-то сделать, чтобы настройки модуля для каждого домена свои были?
На данный момент экспортировать типы данных и объекты можно только спомощью API.
В 2.8.1 мы разрабатываем интерфейсы для экспорта типов и объектов.
Про модуль "Обмен данных" и интеграцию с 1С скоро будет опубликована отдельная статья, а так же в API скоро появится подробное описание формата umiDump 2.0.
http://blog.umi-cms.ru/anton_prusov/exchange/
В качестве примера попробуйте открыть:
http://yourdomain/udata/content/menu.json
Чтобы передать название callback-функции, в нужно указать его в get-параметре "json-callback":
http://yourdomain/udata/emarket/cart.json?json-callback=myCallback
Спасибо!
Речь уже не о баттерфляй....
Создаю сейчас в шаблонах данных в страницах контента новую группу полей. Заполняю ее. Потом пытаюсь переместить повыше - и обламываюсь. Оказывается, теперь нельзя переместить группу выше заблокированных системных групп( Ну и зачем вы так сделали? Теперь клиенту, чтобы заполнить действительно нужные ему поля, приходится проматывать "индексацию поисковиками", "отображение в меню" и проч, что в большинстве случаев и менять-то не надо! (вы ведь очень хорошо придумали, что система сама анализирует сестринские страницы и сама правильно выбирает шаблон, тип, в т.ч. и все указанные выше параметры - за это спасибо!)
Или я ммм.... дурак и что-то не понял? А из-за только одной этой группы на прожорливом по вертикали Баттрфляй у меня приходится делать PageDown...
1. если покупатель в последний месяц купил на сумму более 100 рублей, то в каждый новый заказ будет скидка 10%
т.е. тут временной интервал всегда "динамический" = от текущей даты обратно 1 месяц
можно ли настроить подобную скидку?
Теперь в админке ИД поля не посмотреть - ссылка-то яваскриптовая!
Однако, вопрос меня порадовал - "зачем вам нужно" ) Если бы ЮМИ была так богата функционалом на все случаи жизни и он безупречно работал бы, то да, было бы незачем. А пока без своих пристроек еще не обойтись...
2) Все же, я разрабытываю конечный продукт, и переносимость кода мне не столь критична. Даже скажу иначе - это как раз проблема, найти второго клиента, которому нужен будет точно такой же магазин. И в этом случае указание конкретного id проще многословных getType, getFieldId...
А зачем в типах данных регистрозависимая транслитерация?
Тепрь приходится не только помнить название поля, но еще и регистр. Да и вообще, в целях унификации лучше все единообразно бы было...