Скачать презентацию Новая e Commerce платформа D 7 скидки управление Скачать презентацию Новая e Commerce платформа D 7 скидки управление

Кирсанов_Волошин_Новая eCommerce платформа D7- скидки, управление заказами, автоматизация.pptx

  • Количество слайдов: 37

Новая e. Commerce платформа D 7: скидки, управление заказами, автоматизация Юрий Волошин, Алексей Кирсанов Новая e. Commerce платформа D 7: скидки, управление заказами, автоматизация Юрий Волошин, Алексей Кирсанов 1 С-Битрикс

Ждем ваши вопросы: #bitrixconf в приложении Bitrixconf онлайн на странице трансляции Пишем вопросы здесь Ждем ваши вопросы: #bitrixconf в приложении Bitrixconf онлайн на странице трансляции Пишем вопросы здесь

Скидки правило четырех «П» Переезд Производительность Пресеты Предсказания Скидки правило четырех «П» Переезд Производительность Пресеты Предсказания

Переезд • Магазинные скидки o o • единая сортировка единые правила применения Мигратор скидок Переезд • Магазинные скидки o o • единая сортировка единые правила применения Мигратор скидок из каталога в магазин o o • при миграции каталожные скидки отключатся если не мигрировать – все работает по старому Каталожные скидки больше не развиваются

Производительность • Предварительный просчет условий • Оптимизация купонов Производительность • Предварительный просчет условий • Оптимизация купонов

Пресеты • Пошаговые мастера • Оптимизация Пресеты • Пошаговые мастера • Оптимизация

Предсказания • Условие срабатывания предсказания • Показ в каталоге Предсказания • Условие срабатывания предсказания • Показ в каталоге

Административная часть Сценарии, кастомизация Административная часть Сценарии, кастомизация

Нам не хватало гибкости • Работа с формами требовала вмешательства на уровне ядра • Нам не хватало гибкости • Работа с формами требовала вмешательства на уровне ядра • Не было возможности встроить требуемый блок в форму • Требовались свои табы в формах • Работаем с телефонными продажами, товары должны быть сверху формы • Формы огромные, сложность навигации • Данные по клиенту должны быть всегда перед глазами • Не было возможности разделить заказ и сделать дополнительные отгрузки и оплаты.

Стояла задача – дать возможность сделать кастомизацию без потери обновлений! Стояла задача – дать возможность сделать кастомизацию без потери обновлений!

Пользовательские закладки Пользовательские закладки

Пользовательские закладки - 1 // init. php MainEvent. Manager: : get. Instance()->add. Event. Handler( Пользовательские закладки - 1 // init. php MainEvent. Manager: : get. Instance()->add. Event. Handler("main", "On. Admin. Sale. Order. Edit", array("My. Tab", "on. Init")); // "On. Admin. Sale. Order. Create", "On. Admin. Sale. Order. View" class My. Tab { public static function on. Init() { return array( "TABSET" => "My. Tab", "get. Tabs" => array("My. Tab", "get. Tabs"), "action" => array("My. Tab", "action"), ); } "show. Tab" => array("My. Tab", "show. Tab"), "check" => array("My. Tab", "check"), public static function action($ar. Args) { // Действие после сохранения заказа. Возвращаем true / false // Сообщение $GLOBALS["APPLICATION"]->Throw. Exception("Ошибка!!!", "ERROR"); return true; }

Пользовательские закладки - 2 public static function check($ar. Args) { // Проверки перед сохранением. Пользовательские закладки - 2 public static function check($ar. Args) { // Проверки перед сохранением. Возвращаем true / false return true; } public static function get. Tabs($ar. Args) { return array("DIV" => "edit 1", "TAB" => "Мой Tab", "ICON" => "sale", "TITLE" => "Мой Tab", "SORT" => 1)); } } public static function show. Tab($div. Name, $ar. Args, $b. Vars. From. Form) { if ($div. Name == "edit 1") { ? >Мое поле:

Информационная панель Информационная панель

Информационная панель - 1 // init. php MainEvent. Manager: : get. Instance()->add. Event. Handler('sale', Информационная панель - 1 // init. php MainEvent. Manager: : get. Instance()->add. Event. Handler('sale', 'on. Sale. Admin. Order. Info. Block. Show'); function on. Sale. Admin. Order. Info. Block. Show(Event $event) { // $order = $event->get. Parameter("ORDER"); } return new BitrixMainEvent. Result( BitrixMainEvent. Result: : SUCCESS, array('TITLE' => 'Параметр 1: ', 'VALUE' => 'Значение параметра 1', 'ID' => 'param 1'), array('TITLE' => 'Параметр 2: ', 'VALUE' => 'Значение параметра 2'), ), 'sale' );

Пользовательские блоки Пользовательские блоки

Пользовательские блоки - 1 // init. php Event. Manager: : get. Instance()->add. Event. Handler( Пользовательские блоки - 1 // init. php Event. Manager: : get. Instance()->add. Event. Handler("main", "On. Admin. Sale. Order. View. Draggable", array("My. Class", "on. Init")); class My. Class { public static function on. Init() { return array("BLOCKSET" => "My. Class", "get. Scripts" => array("My. Class", "get. Scripts"), "get. Blocks. Brief" => array("My. Class", "get. Blocks. Brief"), "get. Block. Content" => array("My. Class", "get. Block. Content"), ); } public static function get. Blocks. Brief($args) { $id = !empty($args['ORDER']) ? $args['ORDER']->get. Id() : 0; return array( 'custom 1' => array("TITLE" => "Пользовательский блок для заказа №". $id), 'custom 2' => array("TITLE" => "Еще один блок для заказа №". $id), ); }

. ." src="https://present5.com/presentation/2629959_438040503/image-18.jpg" alt="Пользовательские блоки - 2 public static function get. Scripts($args) { return ''; } public static function get. Block. Content($block. Code, $selected. Tab, $args) { $result = ''; $id = !empty($args['ORDER']) ? $args['ORDER']->get. Id() : 0; if ($selected. Tab == 'tab_order') { if ($block. Code == 'custom 1') $result = 'Содержимое блока custom 1 Номер заказа: '. $id; if ($block. Code == 'custom 2') $result = 'Содержимое блока custom 2 Номер заказа: '. $id; } } } return $result;

Пользовательские блоки - 3 // init. php Add. Event. Handler( Пользовательские блоки - 3 // init. php Add. Event. Handler("main", "On. Admin. Sale. Order. Edit. Draggable", array("My. Edit. Class", "on. Init"), 100); Add. Event. Handler("main", "On. Admin. Sale. Order. Create. Draggable", array("My. Edit. Class", "on. Init"), 100); class My. Edit. Class extends My. Class { public static function on. Init() { return array( "BLOCKSET" => "My. Edit. Class", } ); "check" => array("My. Edit. Class", "check"), "action" => array("My. Edit. Class", "action"), "get. Scripts" => array("My. Edit. Class", "get. Scripts"), "get. Blocks. Brief" => array("My. Edit. Class", "get. Blocks. Brief"), "get. Block. Content" => array("My. Edit. Class", "get. Block. Content"),

Пользовательские блоки - 4 public static function action($args) { // заказ сохранен, сохраняем данные Пользовательские блоки - 4 public static function action($args) { // заказ сохранен, сохраняем данные пользовательских блоков // возвращаем True в случае успеха и False - в случае ошибки // в случае ошибки $GLOBALS["APPLICATION"]->Throw. Exception("Ошибка!!!", "ERROR"); return true; } public static function check($args) { // заказ еще не сохранен, делаем проверки // возвращаем True, если можно все сохранять, иначе False // в случае ошибки $GLOBALS["APPLICATION"]->Throw. Exception("Ошибка!!!", "ERROR"); return true; }

Пользовательские блоки - 5 public static function get. Block. Content($block. Code, $selected. Tab, $args) Пользовательские блоки - 5 public static function get. Block. Content($block. Code, $selected. Tab, $args) { $result = ''; $id = !empty($args['ORDER']) ? $args['ORDER']->get. Id() : 0; if ($selected. Tab == 'tab_order') { if ($block. Code == 'custom 1') { $result = 'Содержимое блока custom 1 для заказа №'. $id. ' '; } if ($block. Code == 'custom 2') { $result = 'Содержимое блока custom 2 для заказа №'. $id. ' '; } } return $result;

Пользовательские блоки - 6 // вставим итоговую стоимость заказа в кастомное поле на странице Пользовательские блоки - 6 // вставим итоговую стоимость заказа в кастомное поле на странице создания/изменения заказа public static function get. Scripts($args) { $id = !empty($args['ORDER']) ? $args['ORDER']->get. Id() : 0; } return '';

Впечатляющая гибкость • Полный набор инструментов для всевозможных кастомизаций • Не теряя возможности обновлений Впечатляющая гибкость • Полный набор инструментов для всевозможных кастомизаций • Не теряя возможности обновлений • Не требуется вносить правки в ядро продукта Впечатляйте своих клиентов - возможностями e. Сommerce платформы D 7

Автоматизация интернет продаж Автоматизация интернет продаж

Автоматизация рутины Действия на оплату • После подтверждения частичного платежа • При получение полного Автоматизация рутины Действия на оплату • После подтверждения частичного платежа • При получение полного платежа • Зависимость доставки от поступления оплаты Действия с доставками • На разрешение доставки частичной отгрузки • На разрешение доставки полной отгрузки • С заказом при полной отгрузке • С заказом при любой частичной отгрузки Действия со статусами заказа • Связанные с отгрузками частичными/полными • Связанные с оплатами частичными/полными

Настройки Настройки

События События

Виды событий • События обсчета • Система автоматически поддерживает консистентное состояние • существующий заказ Виды событий • События обсчета • Система автоматически поддерживает консистентное состояние • существующий заказ – численная отгрузки новый заказ – полный пересчет • целостность • загрузка или Меняем объекты в памяти • создание оплаты заказ События сохранения • Сохраняются все сущности в том состоянии, в котором они есть на данный момент сохранение

Обсчет против Сохранения • События при сохранении применяются для: • применения изменений к внешним Обсчет против Сохранения • События при сохранении применяются для: • применения изменений к внешним по отношению к заказу сущностям (например, к каталогу товаров или внешней базе покупателей) • изменение алгоритма сохранения заказа (например, отмена сохранения) • События на обсчет заказа применяются: • во всех остальных случаях При нарушении этих правил следует учитывать, что: • если изменить внешние данные на обсчете заказа, то они окажутся некорректны, если после обсчета не было сохранения заказа • если изменять параметры заказа на сохранении, то при обсчете они все еще будут старыми (потенциально некорректными)

Обсчет: изменение значения поля • On. Before<имя>Set. Field в самом начале, можно отменить изменения Обсчет: изменение значения поля • On. Before<имя>Set. Field в самом начале, можно отменить изменения • On<имя>Set. Field перед изменением, если оно реально началось Параметры • ENTITY – объект, чье поле • NAME – название поля • VALUE – значение поля для любого наследника BitrixSaleInternalsEntity • Sale. Order • Sale. Shipment. Item • Sale. Shipment • Sale. Basket. Item • Sale. Payment • Sale. Property. Value

Обсчет: завершение пересчета • On. Before. Sale. Order. Final. Action перед расчетом скидок и Обсчет: завершение пересчета • On. Before. Sale. Order. Final. Action перед расчетом скидок и налогов, если у заказа есть корзина • On. After. Sale. Order. Final. Action в самом конце обсчета Параметры • ENTITY – объект заказа

Сохранение: заказ • On. Sale. Order. Before. Saved если вернуть Event. Result: : ERROR, Сохранение: заказ • On. Sale. Order. Before. Saved если вернуть Event. Result: : ERROR, то сохранение отменится • On. Sale. Order. Saved Параметры • ENTITY – объект заказа • VALUES – старые значения полей заказа • IS_NEW – новый заказ (только для On. Sale. Order. Saved)

Сохранение: сущности • On<имя>Entity. Saved после сохранения сущности Параметры • ENTITY – сохраняемый объект Сохранение: сущности • On<имя>Entity. Saved после сохранения сущности Параметры • ENTITY – сохраняемый объект • VALUES – старые значения полей для любого наследника BitrixSaleInternalsEntity • Sale. Order • Sale. Shipment. Item • Sale. Shipment • Sale. Basket. Item • Sale. Payment • Sale. Property. Value

Сохранение: особые события Инициируются при обсчете, но вызываются при сохранении • On. Sale. Order. Сохранение: особые события Инициируются при обсчете, но вызываются при сохранении • On. Sale. Order. Canceled - сохраняемый заказ был отменен • On. Sale. Status. Order. Change – статус заказа был изменен • On. Sale. Order. Paid – оплаченность заказа была изменена • On. Shipment. Tracking. Number. Change – был изменен идентификатор отправления • On. Shipment. Allow. Delivery – был изменен флаг разрешения отгрузки • On. Shipment. Deducted – был изменен флаг отгрузки Параметры • ENTITY – соответствующий объект (заказ, оплата или отгрузка)

Сохранение: корзина Если корзина не привязана к заказу • On. Sale. Basket. Before. Saved Сохранение: корзина Если корзина не привязана к заказу • On. Sale. Basket. Before. Saved если вернуть Event. Result: : ERROR, то сохранение отменится • On. Sale. Basket. Saved Параметры • ENTITY – объект корзины

Новая e. Commerce платформа D 7 • Применяйте новые паттерны разработки • • Занимайтесь Новая e. Commerce платформа D 7 • Применяйте новые паттерны разработки • • Занимайтесь творчеством, а не рутиной • Расширяйте свои сферы влияния на новых рынках Используйте решения которые делают вас лидером

Спасибо за внимание! Вопросы? Спасибо за внимание! Вопросы?