Работа с в Битрикс: кастомизация
Работа с sale.order.ajax в Битрикс: кастомизация
Практически никого из моих клиентов не устраивает внешний вид sale.order.ajax. Здесь я опишу большую часть приемов, которыми пользуюсь сам при кастомизации данного непростого компонента.
В файле template.php блоки заказа отмечены комментариями:
Чтобы все блоки были активны, а не только первый комментируем вторую строчку в данном блоке
Если доставки выдают ошибку ошибку вычислений, то блоки с доставкой скрываются. Отключить это можно закомментировав следующий код:
Убираем сокрытие блоков при авторизации (при выключенной в настройках опции «регистрировать вместе с оформлением заказа»).
Открыть все блоки и убрать лишнее
Чтобы раскрыть все скрытые блоки можно воспользоваться следующими методами (лично использовал на версиях до 20):
Ищем строку var active = section.id == this.activeSectionId и меняем ее на
Далее отключаем реагирование на клик по заголовку блока
Чтобы всегда были открыты Регион и Пользователь
Чтобы убрать кнопки Далее/Назад
Чтобы убрать ссылки «изменить» у всех блоков в editOrder (
Чтобы скрыть уведомление о том, что данный заполнены автоматически добавляем в конец файла style.css
Определение местоположения пользователя в автоматическом режиме
А вот такая модификация позволяет определить местоположение только по названию города:
Скрыть какое-то свойство
Если необходимо скрыть какое-то свойство, например, свойство индекс — задать значение по умолчанию и не показывать пользователям это поле, то можно внести корректировку в JS. В функции getPropertyRowNode после switch (propertyType) добавляем скрытие данного свойства:
Скрываем сообщение «Вы заказывали в нашем интернет-магазине, поэтому мы заполнили все данные автоматически»
Идем в функцию checkNotifications на
750 стр и находим код
И обрамляем данный код доп. проверкой
Скрываем сообщение «Выберите свой город в списке. Если вы не нашли свой город, выберите «другое местоположение», а город впишите в поле «Город»
Идем в функцию getDeliveryLocationInput и комментируем код:
Или с помощью стилей скрываем класс bx-soa-reference
Исключить из показа нулевой цены за доставку
В функции getDeliveryPriceNodes: function(delivery) в блоке «else» заменяем. Вместо:
Так мы спрячем нулевую цену из свернутого блока с выбранной доставкой.
Дальше нужно скрыть нули в списке служб доставки. Для этого в функции createDeliveryItem: function(item) делаем строгую проверку на ноль. Вместо:
И последним нужно скрыть нулевую доставку из итоговых сумм. Для этого в функции editTotalBlock: function() также ставим строгую проверку на ноль. Вместо
В результате нулевая доставка не будет показана пользователю.
Убираем поле «Адрес доставки» из вывода блока «Пользователь»
Описанные у моих коллег способы в моем случае не сработали. Решил пойти некрасивым, но действенным способом
Идем в функцию editPropsItems и находим код:
Перенос поля «Индекс» в блок пользовательских свойств в sale.order.ajax
В базовом стандартном шаблоне поле индекс достаточно легко перенести. Давайте перенесем поле Индекс из блока местоположений в блок пользовательских свойств
Находим функцию getDeliveryLocationInput (
4451 стр.) и комментируем код this.getZipLocationInput(node);
Идем в функцию editPropsItems (
6728 стр.) и перед propsNode.appendChild(propsItemsContainer) добавляем код this.getZipLocationInput(propsItemsContainer); .
По идее этого должно хватить. Но если все равно не получается, то перейдите по адресу /bitrix/admin/sale_order_props.php?lang=ru и в поле Индекс переведите его а группу свойств Личные данные
Вывод поля «Адрес доставки» в блоке «Доставка»
Идем в функцию editDeliveryInfo и в самый конец добавляем код:
Переносим поле «Адрес доставки» в отдельный новый(!) блок
Данная необходимость возникает, например, в шаблонах Аспро, где поле «Адрес доставки» в блоке с выбором доставок выглядит чужеродно и некрасиво
В шаблоне template.php компонента sale.order.ajax добавляем новый блок в наиболее удобное нам место
Идем в файл order_ajax.js и в функции init на
77 стр добавляем вызов вновь добавленного блока
Скрываем вывод поля «Адрес доставки» как показано выше
Реализуем вывод нового поля в дополнительном блоке. В стандартном случае придется учесть, что поле «Адрес доставки» генерируется отдельно для каждого из типов плательщиков, имеет разный id свойства, а сам наш блок надо скрывать, если выбраны оплаты и доставки при которых поле «Адрес доставки» не выводится. Поэтому код будет таким.
Идем в функцию editDeliveryInfo (любую аналогичную или свою) и после строки deliveryNode.appendChild(deliveryInfoContainer) или в конце функции добавляем:
Код не самый красивый и правильный, но работает
Переносим поле «Комментарии к заказу» в конец формы
Идем в функцию editActivePropsBlock и комментируем строчку:
Для вывода поля ищем в шаблоне функцию последнего блока. В моем случае это вывод состава заказа. Ищем функцию editBasketItems и в самый конец дописываем:
Переносим поле «Местоположения» в блок пользовательских свойств
По умолчанию данное поле искуственно исключено из блока пользовательских свойств. Чтобы его вернуть на место идем в функцию editPropsItems и удаляем код:
Запрет Битриксу выбирать доставку по умолчанию
В случае, если у пользователя есть сохраненный профиль, ему автоматически выберется последняя выбранная им доставка, но битрикс ничего не знает о том, что у нас там еще и обязательные поля. Поэтому убираем дефолтный выбор доставки в обработчике OnSaleComponentOrderJsDataHandler. Он у нас уже есть, дописываем в него:
В данном случае блок с доставками всегда будет открыт, и пользователь сразу обратит внимание на необходимость заполнения полей. Но! Если пользователь в кабинете удаляет профиль, поле с местоположением будет у него незаполнено, и после его заполнения блок с доставками автоматически закроется без возможности его отредактировать (пропадет кнопка «Изменить»). Это очень трудно пофиксить, чтобы не посыпалось всё остальное, поэтому мы приняли решение убрать возможность редактирования профилей в кабинете пользователя (делается снятием галочки в настройках компонента личного кабинета)
На данный момент у меня всё. Конечно, этот код был написан для конкретного проекта и с определенными допущениями. Но надеюсь, что данная заметка оказалась вам полезной и наведет вас на путь истинный при решении вашей задачи. Ибо документации по методам класса OrderAjaxComponent нет и не будет. Если Вам есть что добавить или поправить — буду рада комментариям.
order_ajax_ext.js
Создаём файл order_ajax_ext.js в папке с шаблоном компонента sale.order.ajax (там же, где лежит файл order_ajax.js) с содержимым:
В отдельных переменных определяем функции-методы родительского BX.Sale.OrderAjaxComponent , чтобы их можно было вызвать в дочерних функциях и не получить ошибку Maximum call stack size exceeded.
Копируем ссылку с BX.Sale.OrderAjaxComponent в BX.Sale.OrderAjaxComponentExt .
В методе BX.Sale.OrderAjaxComponentExt.init вызываем родительский init, следом прибиваем ссылки «изменить» у всех блоков. Они нам не нужны.
В методе BX.Sale.OrderAjaxComponentExt.getBlockFooter прибиваем кнопки «Назад» и «Вперед» у блоков. Они нам тоже не понадобятся — все блоки у нас развёрнуты.
В методе BX.Sale.OrderAjaxComponentExt.editOrder ненужным блокам-секциям добавляем css-класс bx-soa-section-hide. По нему мы и будем скрывать ненужные блоки. А так же в этом методе раскрываем только нужные нам блоки: «Покупатель» и «Товары в заказе».
Метод BX.Sale.OrderAjaxComponentExt.initFirstSection оставляем просто пустым. Если этого не сделать, то у анонимов при попытке оформления будет вываливаться эксепшен, по поводу отсутствия необходимых обязательных полей.
В файле template.php нашего шаблона нового оформления добавляем подключение нашего скрипта order_ajax_ext.js
А так же в файле template.php меняем все вызовы BX.Sale.OrderAjaxComponent на BX.Sale.OrderAjaxComponentExt
Ну и не забываем добавить в файл стилей, чтобы ненужные блоки скрылись
Краткое описание функций sale.order.ajax
showValidationResult: function(inputs, errors) — функция в которой полям с ошибкой добавляется класс hasError, который помечает ошибкой(в стандартном варианте добавляет обводку красным).
showErrorTooltip: function(tooltipId, targetNode, text) — функция в которой добавляются тултипы для полей с ошибкой.
showError: function(node, msg, border) — функция в которой выводятся ошибки в «групповой контейнер»
refreshOrder: function(result) — функция в которой происходит разбор ошибок, которые приходят от сервера. Там есть ветка result.error
Первые 3 функции отвечают за валидацию на форме без перезагрузки, а четвёртая за обработку результатов от сервера.
Выполнение кода после перезагрузки страницы
Бывает, что нужно регулярно выполнить код после перезагрузки страницы (изменения опций заказа). Например, требуется перерисовать селект. Это просто. Откройте файл order_ajax.js и в самый конец допишите:
Штатный ajax возвращает данные во фрейм-контейнер. Соответственно, весь js, уже загруженный на странице, находится на уровень выше. Соотв, чтобы обратиться к нему из html, загруженном через ajax, необходимо это указать (top.имя_функции или top.имя_переменной). Спасибо Евгению Жукову
Для стилизации селектов, которые по умолчанию выглядят ужасно лучше всего использовать замечательную библиотеку ikSelect
Программная смена города в sale.order.ajax на javascript
Часто, по техническому заданию, требуется программная смена города на javascript с ajax перезагрузкой страницы и перерасчетом формы. Покажу как сделать это.
Будем считать, что у вас уже есть code локации из местоположений Битрикс. Тогда в части кода где необходимо произвести смену локации пишем:
Здесь мы заполнили скрытый input нужным нам кодом и записали его в переменную, которой воспользуемся при перестроении формы. Идем в функцию prepareLocations (
1557 стр.).Находим код:
И выше него пишем:
В итоге у меня получилось так:
Расчет стоимости доставки для всех служб доставки
Будем полагать, что компонент sale.order.ajax вынесен у вас в отдельную папку
Тогда идем в файл /local/components/YOUR_NAMESPACE/sale.order.ajax/class.php и находим функцию protected function calculateDeliveries(Order $order) (
Находим условие if ((int)$shipment->getDeliveryId() === $deliveryId) и в области else сразу после кода:
Теперь после обращения к серверу в наш order_ajax.js приходят службы доставки с рассчитанными стоимостями. Остается их только обработать и вывести.
В скрипте находим функцию createDeliveryItem: function(item) и работаем с параметром item.PRICE или item.PRICE_FORMATED и выводим его куда нужно.
Получение стоимости доставки для продукта после применения скидок, правил корзины и …
Делаем бесплатную доставку по России с условием
Допустим у нас есть задача сделать доставку по России бесплатной, если стоимость товаров в корзине превышает определенную сумму.
В моем случае в свойствах заказа есть отдельное поле «Страна», поэтому задача упрощается и весь код можно свести к паре проверок
Не забываем, что код нужно разместить в init.php
Если вы знаете более изящные способы, то буду рад если вы ими поделитесь.
Полезные переменные order_ajax.js
Массив соответствия международных двухбуквенных кодов стран
Альтернативные (кастомные) sale.order.ajax
Интересный кастомный sale.order.ajax предложил alorian в компоненте Opensource Bitrix Order
Ошибка в Битрикс при оформлении заказа window.__jsonp_ymaps_map is not a function
Скорей всего вы используете несколько служб доставки, таких как СДЭК или Boxberry. Зайдите в настройки этих служб и в одной из них отключите использование Яндекс карт. Для работы будет достаточно одного подключения API Яндекс
Баг при автозаполнении телефона. После любого действия начальная цифра (7) дублируется, стирая актуальную цифру телефона
С проблемой столкнулся на одном из шаблонов Аспро Оптимус. Решил обходным путем.
Идем в функцию alterProperty и отключаем штатный механизм маскирования закомментировав данные строки:
Урок 6. Вывод каталога товаров в Битрикс через компонент Новости (bitrix:news)
Приветствую! Продолжаем разрабатывать наш собственный интернет-магазин на Битрикс с нуля и изучать при этом Битрикс. В прошлом уроке мы познакомились с ключевой сущностью Битрикса Инфоблоками и импортировали каталог с учебными данными. Пришло время воспользоваться всем этим и вывести каталог на сайт. В этом уроке мы выведем каталог товаров на страницу /catalog/ и подробно познакомимся с работой компонентов Битрикс. В частности с комплексным компонентом bitrix:news.
Вот, что у нас должно будет получится в итоге.
Без меню разделов пока, его мы выведем чуть позже.
Вывод каталога товаров через компонент bitrix:news
В Уроке 4 — Вывод меню Битрикс мы уже познакомились с компонентами и я показал, как их выводить на страницу, копировать и изменять шаблон. Там все более подробно со скриншотами описано.
Начнем. Откроем сайт и перейдем в раздел Каталог, через главное меню, которое уже должно работать на вашем сайте. Убедимся, что мы находимся в разделе каталог — в адресной строке должен быть адрес заканчивающийся на /catalog/. Далее в панели администрирования нажимаем кнопку Изменить страницу и открываем страницу на изменение. В разделе компонентов Контент — Новости выбираем компонент Новости (комплексные компоненты выделены зеленым цветом).
Что такое простые и комплексные компоненты я покажу чуть позже не примере кода, сразу станет понятно отличия.
Сразу настроем параметры компонента. Нас будут интересовать сейчас только основные параметры. Здесь для всех компонентов, которые работают с инфоблоками основными параметрами является Тип инфоблока и сам Инфоблок их нужно выбрать.
И еще необходимо указать свойства, которые нужно выводить в карточках товара. Мы будем выводить пока только цену.
Так же цену нужно включить и на странице детального просмотра в параметрах компонента. Другие параметры нам не важны. А если вы будите выводить новости типовым компонентом, то нужно пройтись по всем параметрам и настроить все, что вам будет необходимо. Мы же выводим товары и полностью поменяем шаблон вывода. А сейчас если нажать сохранить будут выведены данные инфоблока изображения и названия. Далее начнем кастомизацию типового компонента.
Кастомизация компонента bitrix:news
Прежде всего нужно скопировать типовой шаблон компонента в наш шаблон сайта, чтобы можно было его изменять и не потерять изменения при очередном обновлении Битрикс. Включим режим редактирования и скопируем шаблон компонента.
Новый шаблон назовем catalog и скопируем в наш шаблон startshop.
Теперь нужно найти файлы нового шаблона. Перейдем по пути wwwlocaltemplatesstartshopcomponentsbitrixnewscatalog и увидим файлы комплексного компонента.
Особенность комплексного компонента в том, что он в себе содержит простые компоненты. Это видно по тому, что внутри комплексного компонента содержится папка bitrix, в которой будут расположены шаблоны простых компонентов.
И вот именно простые компоненты уже выводят информацию на страницу. Из этого списка прежде всего нам будут интересовать папки (компоненты) news.list и news.detail для страницы списка и детальной страницы товара соответственно.
news.list
Начнем мы со списка новостей. За вывод новости отвечает файл wwwlocaltemplatesstartshopcomponentsbitrixnewscatalogbitrixnews.list.defaulttemplate.php . Все остальное давайте удалим, чтобы нам не мешались.
Обращу внимание на файл style.css . В нем можно располагать CSS стили верстки компонента. Особенность в том, что они подключаются только при вызове компонента. Т.е. это несколько сокращает объем погрузки стилей. Но мы им пользоваться не будем все наши стили лежат в template_styles.css . Вобщем без страха удаляем все лишнее и открываем в редакторе файл template.php . В котором сразу заменяем имеющийся код на следующий:
Код:
<?if(!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();
/** @var array $arParams */
/** @var array $arResult */
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponentTemplate $this */
/** @var string $templateName */
/** @var string $templateFile */
/** @var string $templateFolder */
/** @var string $componentPath */
/** @var CBitrixComponent $component */
$this->setFrameMode(true);
?>
<?foreach($arResult[«ITEMS»] as $item):?>
<?//Включает возможность изменять элемент из публички
$this->AddEditAction($item[‘ID’], $item[‘EDIT_LINK’], CIBlock::GetArrayByID($item[«IBLOCK_ID»], «ELEMENT_EDIT»));
$this->AddDeleteAction($item[‘ID’], $item[‘DELETE_LINK’], CIBlock::GetArrayByID($item[«IBLOCK_ID»], «ELEMENT_DELETE»), array(«CONFIRM» => GetMessage(‘Подтверждаете удаление?’)));
?>
Битрикс24: Сделки. Что это и как с ними работать
Сделки помогают упорядочивать заказы и управлять ими в воронке продаж, а также анализировать результаты. Разбираем один из важнейших элементов Битрикс24.
Что такое сделки в Битрикс24
В Битрикс24 сделками называют карточки, в которых хранятся данные о добавленных в систему заказах. Как только потенциальный клиент заказывает услугу или товар, менеджер создает соответствующую сделку. При определенных настройках Битрикс может добавлять такие карточки автоматически.
Список сделок отображается в разделе CRM на вкладке с говорящим названием — «Сделки». Это главный экран воронки продаж. Здесь все карточки имеют компактный вид и показывают только базовую информацию о заказах: название, стоимость, дату и так далее.
Каждую карточку можно развернуть на весь экран, чтобы увидеть остальные детали заказа. Прежде всего это имя, фамилия, контакты и прочие данные о клиенте. Кроме того, в карточке отображается вся информация об услуге или товаре, прикрепленные к заказу файлы и задачи, история взаимодействия менеджеров со сделкой, а также их комментарии.
Работа со сделками в Битрикс24
Рассмотрим основные операции, которые можно выполнять со сделками в Битрикс24.
Добавление
К добавлению сделок можно приступать, как только завершена начальная настройка Битрикс. Чтобы добавить новый элемент, нужно открыть раздел CRM, перейти на вкладку «Сделки» и нажать на кнопку «Добавить сделку» в верхнем правом углу.
Затем остается заполнить карточку сделки. В результате она свернется и появится в воронке продаж.
Кроме того, сделку можно создавать из лидов — конечно, если вы добавляете их в Битрикс24. Для этого нужно открыть раздел CRM, перейти на вкладку «Лиды», развернуть карточку нужного лида и нажать на кнопку «Сделку».
В этом случае, как и в предыдущем, карточка появится на вкладке «Сделки».
Редактирование
При необходимости данные сделки можно в любой момент изменить или дополнить. Нужно только развернуть ее карточку двойным щелчком и отредактировать содержимое. Как мы уже писали выше, Битрикс24 позволяет добавлять в сделку контакты и другие данные о клиенте, а также указывать сроки, стоимость, товары и прочую информацию о самом заказе.
Кроме того, часть информации, связанной со сделкой, система добавляет в карточку автоматически. К примеру, это могут быть записи о звонках и переписках с клиентом, а также действиях менеджеров с карточкой: прикрепление задачи, добавление товара и так далее.
К слову, сделки без прикрепленных задач, а также с просроченными задачами требуют особого внимания. Первыми, скорее всего, менеджеры еще не занимались — эти заказы простаивают. Вторые обрабатываются с опозданием. Чтобы те и другие сделки были на виду, Битрикс24 показывает счетчик с их общим количеством рядом с названием вкладки. Над колонками можно увидеть, сколько дел первого и второго типа нашла система.
Вдобавок, если к сделке прикреплены просроченные дела, их количество будет отображаться на ее свернутой карточке.
Изменение стадии
По мере работы менеджеров в Битрикс24 сделка проходит через несколько стадий воронки продаж: от добавления в систему до закрытия заказа. Каждая из этих стадий представлена в виде отдельной колонки.
Как только сделка готова перейти на новую стадию работы, менеджер должен переместить ее в подходящую колонку. Для этого достаточно перетащить карточку.
Такой подход позволяет с легкостью отслеживать как состояние текущей сделки, так и общий прогресс отдела продаж.
По умолчанию в CRM доступны следующие стадии: «Новая», «Подготовка документов», «Счет на предоплату», «В работе», «Финальный счет», «Сделка провалена», «Анализ причины провала», «Сделка успешна». Но вы можете добавлять новые колонки с помощью плюса и редактировать названия уже созданных через иконку в виде карандаша.
Таким образом, система позволяет каждой компании настраивать воронку продаж под специфику своего бизнеса.
Выставление счета
При необходимости менеджер может создать для сделки счет. Он появится на вкладке «Счета» в отдельной карточке, предназначенной для удобной работы с платежными реквизитами и контроля оплаты. Карточки сделки и счета будут привязаны к общему клиенту.
Чтобы выставить счет, нужно развернуть карточку сделки, нажать на кнопку «Счет» и заполнить новую карточку.
Анализ
Битрикс24 автоматически формирует аналитические отчеты на основе добавленных в CRM данных и действий менеджеров со сделками. По умолчанию система показывает эффективность каждого сотрудника, конверсию на всех стадиях сделок, общий заработок, число сделок в работе и прочие показатели. Данные отображаются в виде наглядных диаграмм.
Такая аналитика помогает выявлять слабые места в работе отдела продаж, оптимизировать ее и планировать объемы продаж.
Увидеть отчеты по сделкам можно в разделе CRM — «Аналитика» — «Мои отчеты» — «Сделки». При необходимости вы можете настроить каждый отчет для анализа тех данных, которые вам необходимы.
Настройка отображения
Система позволяет переключаться между несколькими режимами отображения сделок. Это можно сделать с помощью кнопок в верхнем правом углу на вкладке «Сделки».
Канбан. Режим, включенный по умолчанию. Сделки отображаются как компактные карточки в колонках, характеризующих разные стадии обработки.
Список. В этом режиме названия сделок и их основные данные выводятся в таблице. Вы можете сортировать сделки по дате создания, сумме, статусу оплаты, клиенту и прочим параметрам.
Календарь. Режим, который отображает сделки в соответствии с датой их создания или завершения либо другими временными параметрами на календаре. Вы можете настраивать видимый диапазон, переключаясь между месяцем, неделей и днем.
Импорт сделок в Битрикс24 из файла CSV
Как вы уже знаете, сделки можно добавлять по одной с помощью соответствующей кнопки. Это просто и быстро. Но такой способ подходит, только когда нужно добавить небольшое количество сделок.
В остальных же ситуациях стоит использовать один из двух способов импорта. Первый из них позволяет быстро загружать в аккаунт Битрикс (личный кабинет) все сделки из таблицы в формате CSV. Для этого нужно открыть раздел CRM — «Сделки», кликнуть по шестеренке, выбрать «Импорт сделок» и воспользоваться дальнейшими подсказками системы.
Такая функция может пригодиться, к примеру, чтобы импортировать в Битрикс сделки из другой CRM. Только сначала надо будет выгрузить данные из внешней системы в CSV-файл, а затем уже скопировать их через таблицу в Битрикс24.
Импорт сделок в Битрикс24 из внешних сервисов
Теперь о втором способе. Он позволяет автоматически импортировать заказы, оставленные клиентами через сайты, мессенджеры, телефонию и прочие сервисы, в виде сделок в Битрикс24.
Чтобы настроить автоматизацию, не нужно быть программистом. Достаточно установить необходимые приложения из Маркета — встроенного в Битрикс24 магазина. Эти программы позволяют быстро подключать различные сервисы к CRM и настраивать передачу данных.
Например, вы хотите, чтобы полученные через магазин на платформе Tilda заказы попадали в Битрикс24 в виде сделок. Значит нужна интеграция Битрикс с Tilda. В таком случае ищите в Маркете приложение, которое интегрирует эти системы и обеспечит передачу данных.
Если программы для подключения нужного вам сервиса не найдется, установите приложение онлайн-коннектора ApiX-Drive. Оно позволяет настраивать импорт сделок в Битрикс24 не из какой-нибудь одной, а из множества самых разных внешних систем. Перечислим некоторые из них.
- Социальные сети: «ВКонтакте» и Facebook.
- CMS: Tilda, Wix, Opencart, Horoshop, WooCommerce, PrestaShop, Contact Form 7, InSales, CS-Cart.
- Конструкторы квизов: Marquiz, Typeform, Carrot quest, Moclients, Конверсус, Enquiz, LeadForms и QuizGO.
- Конструкторы ботов: ManyChat, BotHelp, Leeloo, Active Chat, Aimylogic, Botmother, ChatForma, Chatfuel, Pact, Puzzlebot, SaleBot, Smart Sender, Smartloop, SnatchBot и TextBack.
- Gmail.
После установки приложения настройка автоматизации проходит на сайте ApiX-Drive и занимает всего несколько минут. Достаточно подключить нужные сервисы к Bitrix24 API с помощью встроенных в интерфейс подсказок.
После этого коннектор начнет передачу данных. Она будет работать следующим образом. Как только через Facebook, Marquiz, Gmail или другой подключенный сервис делают заказ, он автоматически добавляется в виде новой сделки в Битрикс24.
Типы товаров, создание Наборов и Комплектов — 1С-Битрикс Управление Сайтом
В новом релизе 1С-Битрикс: Управление Сайтом появились типы товаров: простой товар, товар с торговым предложением, набор, комплект. Раньше вы могли создавать два типа товаров, причём это никак не разделялось и велось все в общем пространстве, что создавало массу недопонимания и нагружало экран лишними вкладками.
Вначале немного отвлечёмся: в 12-ой версии в разделе Магазин появился раздел с каталогами магазина, но многие недоумевали, почему в разделах не показывается сам товар и не пользовались новшествами:
Сделано это было с позиции производительности: быстрый показ разделов каталога, их создание и управление, без вывода товаров. Товары выводились выше – на странице Список товаров общим списком, без разделения по разделам.
В 14-ой версии мы решили сделать вывод товаров в разделах магазина опциональным, чтобы те, кому удобней видеть товар, смогли его всё-таки видеть и не переходить в Контент для управления каталогом магазина в привычном для себя виде:
Опция находится в настройках модуля Информационные блоки и называется Совместный просмотр разделов и элементов. Включаем ее и видим товары в разделах:
Примечание: по умолчанию после установки обновления данная опция включается автоматически. Если же вам нужно убрать вывод товаров, вам нужно будет её выключить.
Товары включены, теперь давайте обратим внимание на новые кнопки, которые добавились в разделах для создания элементов:
Кроме привычной кнопки Добавить товар появилась кнопка с выпадающим списком Создать другие типы товаров.
Добавить товар — добавляется самый обычный простой товар, без каких-либо дополнительных возможностей. Это тот тип товара, который наиболее употребим, и используется в данный момент повсеместно.
Здесь минимум вкладок и только нужный минимум полей.
Нажатие по кнопке Создать другие типы товаров открывает список со всеми типами товаров, которые возможно создать:
Кнопка Создать товар с торговыми предложениями создает второй тип товара, который был в системе, но он претерпел небольшие косметические изменения, которые путали клиентов:
У этого типа товара появляется вкладка Торговые предложения и исчезла вкладка Торговый каталог.
Данный товар (как товар хранящий список предложений) не имеет остатков, не имеет цены и других атрибутов, которые есть у обычного товара.
Этот товар не является товаром. По сути, он содержит список «торговых предложений», которые и являются товарами (предложениями). Они же в зависимости от свойств показываются клиенту на сайте ( это мы подробно разберём в следующих статьях):
Переходим на вкладку Торговые предложения и видим привычную схему, а именно: можем по кнопке Добавить добавлять любое количество торговых предложений. Вот у них уже есть вкладка Торговый каталог и есть остатки, и все атрибуты товара:
Создать комплект, Создать набор позволяют создать два новых типа товаров. Давайте сначала разберём, чем они отличаются.
Набор – это предложенный магазином список (рекомендованный список) до трёх товаров, которые отображаются в публичной части магазина, к основному товару для которого набор и создаётся. Плюс этот список может содержать любое разумное количество товаров, из которого можно выбрать замену для предложенного товара, но не будем детально останавливаться, об этом мы ещё напишем подробно.
Комплект – это список товаров, которые содержатся внутри комплекта и будут списаны с вашего склада при покупке. Сам комплект не имеет физического остатка, его остаток зависит от товаров, которые входят в этот комплект. Удобно применять, например мебельщикам. Для нас, как для клиента интернет-магазина, стол — это товар законченный и целый, а для них — это 4 ножки, столешница, болтики и т.д. Вы покупаете стол, а со склада списываются необходимые комплектующие, из которых состоит этот стол. Примеров применения комплектов можно найти массу.
Давайте создадим комплект – нажимаем Создать комплект:
alt=»10.jpg» width=»800″ height=»532″ />
Появляется вкладка Состав комплекта. На ней выбираются те товары, которые входят в состав комплекта. Можно установить необходимое количество каждого товара (например, если вам нужно 15 болтов для сборки стола, то так и вписываем).
На столбце Процент скидки остановимся подробней. По умолчанию его можно не заполнять данными, но так как «комплект» — это обычный товар, а в магазине могут быть назначены скидки на него, то, если поля не заполнены, скидка распределится пропорционально стоимости входящих в комплект товаров и будет как бы «размазана» внутри комплекта.
А вот устанавливая параметры, вы можете регламентировать, какой процент от скидки получит входящий в комплект конкретный товар. Если на один из товаров входящих в комплект, вы не можете установить высокую скидку, вы можете снизить это значение. Опция будет использоваться нечасто, но позволит гибко регулировать скидку внутри комплекта.
Сортировка не имеет особого значения, а влияет на отображение в административном разделе, когда покупается комплект.
Мы создали комплект, в который входит: двое плавок и лиф с пантолетами. По кнопке Ещё вы можете добавлять новые строчки, если комплект состоит из более, чем трёх товаров.
Специальных ограничений по количеству товаров входящих в «Комплект» нет.
Давайте создадим набор – нажимаем Создать набор:
alt=»12.jpg» width=»800″ height=»537″ />
Набор — это физический товар с привязанными товарами, которые компания хочет рекомендовать купить с основным товаром.
Это, например, мобильный телефон, к которому рекомендуют: чехол, дополнительную флэш- карту памяти, стартовый набор сим-карту и т.п.
Выбираете товар, ставите сортировку: от неё будет зависеть, как товар выведется клиентам в публичном разделе. Первыми показываются те товары, которые имеют наименьшую сортировку.
По умолчанию вы можете показать в публичной части не более трёх рекомендованных товаров, но внутри, список может быть разумно большим:
В публичной части сайта клиент вот так увидит набор: есть базовый товар платье и к нему рекомендуется три товара, но зайдя по ссылке Составить свой набор:
Клиент сможет собрать из компонентов свой собственный набор, который можно добавить в корзину.
Набор может быть создан (и в основном будет создаваться) не как отдельный товар, а как некая сущность, которая добавляется к уже существующему товару. Для этого нужно войти в товар и нажать Добавить набор:
Набор может быть создан к любому типу товаров. На скриншоте ниже показано добавление набора для товара с торговыми предложениями:
Вы можете добавлять наборы к любому ранее созданному товару в вашем каталоге и использовать эту возможность в новых компонентах публичной части.
Мы разобрали, как создавать новые типы товаров. Чтобы отличать такие товары в списке товаров, появился столбец Тип товара:
Мы видим, что у нас есть: «простой товар», «простой набор», «комплект», «торговые предложения» и есть товар, у которого добавлен набор: это «предложения, набор». То есть мы добавили набор к товару, который уже существовал и был товаром с торговыми предложениями.
Повторим: набор может быть добавлен к любому типу товаров!
Обновление находятся в стабильном виде, и вы можете его установить.
Импорт каталога, массовые наценки и другие лайфхаки для «1С-Битрикс»
Как всякий высокотехнологичный инструмент, платформа «1С-Битрикс» обрастает лайфхаками. 12 000 тематических статей на Хабрахабре, 950 полезных советов в блогах на сайте «1С-Битрикс», 4944 решения в маркетплейсе. Разработчики выискивают проблемы, превращают их в задачи, создают виджеты и гаджеты, интеграторы и агрегаторы, парсеры, редакторы и машапы.
Например, актуализация каталога – узкое «бутылочное горлышко» продаж интернет-магазина. Допустим, средний магазин готовится к «черной пятнице». Ручная правка 10 000 карточек потребует не менее 100 человеко/дней. И от 50 000 рублей, если привлекать фрилансеров.. Несуразно дорого для малого бизнеса и нереально долго для любой акции! Поэтому сушествует множество готовых решений для пакетного редактирования каталога. Рассмотрим примеры.
Пользователи «1С-Битрикс» 16.5.3 и выше могут изменять цены непосредственно в списке разделов и элементов каталога. Выделив нужные разделы, надо вызвать меню «Действия», выбрать пункт «Изменить цены» и нажать кнопку «Применить».
Появившаяся следом форма позволит настроить операцию изменения цен. Так, можно рассчитать новую цену на основании другой цены. Выбрать тип цены (оптовая или розничная), увеличение или уменьшение, указать точное значение и валюту. Доступны 3 варианта округления: в пользу клиента, в пользу предприятия и по арифметическим правилам с параметром округления.
После нажатия кнопки «Сохранить» цены будут пересчитаны.
Владельцам ранних версий помогут модули из «1С-Битрикс». Приведем 2 примера:
Модуль «Массовое изменение цен и параметров товаров (элементов инфоблока)» от «Дальвебстрой» позволяет изменять цены на фиксированную сумму или процентную долю, округлять цены до и после запятой, менять и конвертировать валюты. Дополнительно можно управлять количеством остатков, весом, габаритными размерами, менять единицы измерения и НДС. Есть режим изменения параметров по расписанию. Цена решения – 3 800 рублей.
Антирутин от Webdebug позволяет управлять наценками и скидками, автоматически генерировать символьные коды для ЧПУ, деактивировать товары с нулевыми ценами и удалять нулевые остатки. Кроме того, модуль масштабирует и редактирует иллюстрации в карточках, создает наборы и комплекты, копирует свойства товаров. Например, может в массовом порядке присваивать по образцу габариты, цены, иллюстрации или переносить цены из оптовых в розничные. Цена решения – 3 120 рублей.
По данным Supl.Biz, интернет-магазинам доступны электронные прайсы 750 000 оптовых поставщиков. Выбор есть! Но нельзя просто взять и закачать файл-прайс-листа в админку магазина. Потому что импорт – процедура сложная, с множеством обязательных требований. Зачастую владельцы интернет-магазина хотят получать:
- Добавление категорий. Если в прайсе появилась новая категория, она должна быть создана и в каталоге магазина.
- Добавление товаров. Если в прайс-листе есть товары, которых в магазине нет, то они должны появиться в карточках, нужной категории каталога, разделе «Новинки». С заполненными описаниями, характеристиками, иллюстрациями.
- Отключение товаров. Если товары есть в каталоге, а в прайсе их больше нет, они должны быть деактивированы.
- Обновление цен и наличия. Для совпадающих товаров следует перенести остатки из прайса в интернет-магазин, привести в соответствие цены.
И это не все. Импортированные товары должны автоматически распределяться по соответствующим категориям, получать «красивые» ЧПУ. Причем импорт не должен изменять или деактивировать самостоятельно внесенные товары, не должен «портить» SEO-описания.
Как видим, простой загрузкой таблицы с произвольной структурой эти задачи не решить. Какие инструменты могут помочь, каковы их достоинства и недостатки?
В платформе «1С-Битрикс» предусмотрены инструменты импорта в торговые каталоги. Если установлен модуль интернет-магазина, настройки находятся по адресу Магазин > Настройки > Импорт данных. Если в редакции нет модуля магазина, настроить импорт можно по адресу Магазин > Торговый каталог > Импорт данных. Скрипты импорта по умолчанию расположены здесь:
Скрипты могут обрабатывать файлы в форматах XML («1С» CommerceML) и CSV. Первый формат создан для обмена данными с разработками с «1С» и естественно формируется при выгрузке каталога из «1С-Управление торговлей». Другие способы конвертации прайса в CommerceML, мягко говоря, неудобны.
Формат CSV для одноуровневого каталога просто получить, сохраняя прайс из Excel с разделителем «;» и заполненными столбцами ID и Название. Однако с древовидным каталогом уже сложнее: Для каждого уровня вложенности надо создавать в файле отдельную колонку, и разносить по ним позиции в соответствии со структурой каталога интернет-магазина. И других ограничений немало: названия столбцов должны точно совпадать с именами разделов, десятичные разделители в файле импорта должны быть точками, и каждому значению множественного поля в файле должна соответствовать отдельная строка. Если у товара несколько иллюстраций, то под каждую отводится 2 отдельные строки для иконки и полноразмерного изображения (IE_PREVIEW_PICTURE и IE_DETAIL_PICTURE). С размерами и цветами та же картина.
«На стадии загрузки невозможно штатными средствами задать привязки элементов. Поэтому после загрузки элементов придется вручную проходить весь каталог и производить привязку элементов. Опытные разработчики применяют следующий метод. Сначала в MS Excel создается специальный файл, в котором менеджер вручную задает привязки между элементами». Учебный курс для администраторов «1С-Битрикс», редакция «Бизнес».
Импорт из «1С» на сайт прост и удобен, если совпадает структура каталога, номенклатура и ассортимент товаров. В «1С-Управление торговлей» предусмотрен механизм регистрации (загрузки) цен поставщика их файла произвольного формата.
Для этого учетная программа должна быть обновлена до версии 8.1, и дополнена модулем обмена версий 4 – 6. Обмен товарами и заказами может производиться вручную, по расписанию или в режиме реального времени (каждые 40 секунд).
А в «1С-Битрикс: Управление сайтом» встроен механизм интеграции с «1С-Предприятие». На стороне интернет-магазина настройки импорта выполняются по адресу Магазин > Настройки > Интеграция с 1С.
Но если представление каталога и товаров на сайте заметно отличаются от записей в системе учета, автоматический обмен усложняется. Возникает необходимость доработки вручную или при помощи обработчиков и модулей на стороне «1С-Битрикс». Из «1С: Предприятие» в этом случае выгружаются название, артикул, цена, детальное описание.
В API «1С-Битрикс» есть класс CPrice, предназначенный специально для работы с ценами каталога. Например, метод Add этого класса добавляет новую цену, а метод ReCalculate пересчитывает заданные цены. Используя эти инструменты, можно корректировать ощибки импорта при помощи обработчиков в файле
Допустим, при выгрузке из «1С:Управление предприятием» цены надо устанавливать дополнительно, потому что они определены в торговых предложениях на сайте. Решить эту задачу поможет обработчик следующего вида:
AddEventHandler(«iblock», «OnAfterIBlockElementAdd», «OnBeforeIBlockElementAddHandler»);
AddEventHandler(«iblock», «OnAfterIBlockElementUpdate», «OnBeforeIBlockElementAddHandler»);
// создаем обработчик события «OnBeforeIBlockElementUpdate и OnAfterIBlockElementAdd» для установки цены торгового предложения на сам товар
$arSelect = Array(«ID», «NAME», «PROPERTY_CML2_LINK», «CATALOG_GROUP_1» );
$res = CIBlockElement::GetList(Array(), Array(«ID»=>$arFields[‘WF_PARENT_ELEMENT_ID’]), false, Array(«nPageSize»=>50), $arSelect);