Содержание

bitrix24 - KPI-Drive

Описание модуля

Назначение модуля: синхронизация задач между KpiDrive и Bitrix24.
Синхронизация работает в направлении: из Bitrix24 в KpiDrive. В обратном направлении синхронизации не предусмотрено.

Установка и настройка модуля



Настройки модуля

В административном разделе выберете: Сервисы->KPI Drive->Настройки модуля


Назначение полей:
URL приложения - http://ВАШДОМЕН.demo.kpi-drive.ru
API Key - API ключ
Текст для факта по-умолчанию - Текст, который будет в комментарии Факта KpiDrive при учете времени для задачи Битрикс24. ТЕКСТ ОБЯЗАТЕЛЕН!
Пользователь KPI Drive по-умолчанию - идентификатор пользователя в системе KPI Drive, которому будут добавляться задачи, если такого пользователя не существует в Битрикс24 или указанный пользователь Битрикс24 (Ответственный или Постановщик задачи) или не привязан к пользователю Kpi Drive.

ВНИМАНИЕ! Сначала укажите URL приложения и API Key после чего нажмите кнопку Сохранить, обновите страницу. В случае успеха в поле Пользователь KPI Drive по-умолчанию вы сможете выбрать пользователя по-умолчанию, нажмите Сохранить еще раз.

Сопоставление пользователей

Сопоставление пользователей.


Перед началом работы необходимо выполнить сопоставление пользователей KPI Drive и Битрикс24. Для этого В административном разделе выберете: Сервисы->KPI Drive->Сопоставление пользователей.
Начните вводить первые буквы Фамилии, Имени или E-Mail. Выбирите из предложенного списка нужного пользователя Bitrix (с левого поля ввода) и соответствующего ему пользователя Kpi Drive. Нажмите кнопку Выбрать Список выбранных для добавления пользователей появится ниже овторите операцию необходимое число раз. Если вы ошиблись, вы всегда можете удалить сопоставление, нажав ссылку Убрать.

shot2.png

После того, как вы добавили пользователей в список, проверьте еще раз правильность сопоставления. До того момента, пока вы не нажали кнопку “Сопоставить выбранных пользователей”, данные не сохраняются! Чтобы сохранить изменения, кнопку “Сопоставить выбранных пользователей”. Вы увидите сообщение: Пользователи сопоставлены

Сопоставленные пользователи.


Вы всегда можете просмотреть список уже сопоставленных пользователей. Для этого перейдите на закладку Сопоставленные пользователи. Чтобы удалить сопоставление, нажмите на ссылку Удалить на нужной строке таблицы. При этом система запросит подтверждение действия. Нажмите OK для удаления связи.

Работа с модулем

Работа с модулем достаточно проста для пользователя. Чтобы задачу передать и в KpiDrive просто добавьте к задаче тег, который вы указали в настройках модуля в поле Название тега для задачи KPI Drive. Тег может быть добавлен как к новой, так и к уже существующей задаче. При этом, теги регистронезависимые, поэтому для системы тег “KPI Drive” и “kpi drive” - это одно и то же.

После сохранения изменений задача появится в Kpi Drive.

Если необходимо учитывать время тогда обязательно ставим галочку “Учет времени”, указываем кол-во часов и минут на задачу. Если стоит галочка, система фиксирует время выполнения задачи и сохраняет эту информацию в Фактах KPI drive.

shot3.png

Так же в KPI Drive передаются данные полей “Крайний срок” (если указан), “Дата начала задачи” (если не указана, то считается дата создания задачи), “Крайний срок”,  “Ответственный”, и “Постановщик”.

Вопросы и ответы

Вопросы и ответы.


Q: Если модуль не работает:

A: Проверьте настройки модуля. Убедитесь, что URL приложения без пробелов в начале и конце. ВНИМАНИЕ! В поле URL нельзя использовать символ _ (нижнее подчеркивание) и другие запрещенные для доменных имен символы!

Убедитесь, что правильно указан пользователь по-умолчанию, также учтите, что это поле обязательно для заполнения!


Q: Не добавляется Факт в Kpi Drive:

A: Проверьте настройки модуля. Убедитесь, что поле Текст для факта по-умолчанию заполнено!

bitrix24 - График учета рабочего времени PRO

Модуль работает только в Bitrix24 в коробке

Модуль предназначен для планирования и учета графика работы сотрудников компании.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

\Bitrix\Main\Loader::includeModule("askaron.workingtimechartpro");

Описание модуля

Модуль предназначен для планирования и учета графика работы сотрудников компании.

Модуль работает только в Битрикс24 в коробке.

Демо-версия полностью функциональная, срок демо-периода 30 дней.

Администратор и руководители заполняют дни и время, когда подчиненные работают, когда отгул, прогул, выходной, больничный или командировка. А модуль строит график с учетом отмеченного сотрудниками фактического рабочего времени.

Решает следующие задачи:
  • Планирование графика работы и отдыха сотрудников
  • Оперативное сравнение  часов и рабочих дней запланированных и фактически отработанных
  • Сведение инструментов портала "рабочее время" и "график отсутствий" в одно окно
  • Возможность вывести график на печать.

Дополнительные возможности:
  •  Два  режима просмотра графика 1) для сотрудника: начало и конец смены 2) для руководителя:  план/факт часы для каждой смены
  • Массовое добавление графиков, можно выбрать несколько сотрудников или отделов и проставить одинаковый график на несколько дней вперед.
  • Массовое редактирование фактических графиков сотрудников.
  • Модуль интегрирован с учетом рабочего времени.
  • Синхронизация с графиком отсутствий.
  • Для работы с модулем не обязательно пользоваться учетом рабочего времени. Фактические данные могут быть заполнены руководителем сотрудника или администратором продукта.
  • Проверка IP адреса с которого начинается и заканчивается рабочий день.
  • Отчет по количеству недоработанных часов.
  • Раздельная форма планирования и редактирования смен.
  • У руководителей и администраторов есть возможность добавить комментарий к смене сотрудника.
  • Просмотр данных по актуальным сотрудникам и уволенным, совместный просмотр для составления табеля.

Новые возможности:
  • В планировщике реализована возможность выбрать не только сотрудника, но и отдел в целом.
  • Добавлена групповая форму редактирования графиков
  • Добавлена синхронизация с графиком отсутствий
  • Добавлен контроль IP адресов
  • Добавлен отчет по количеству плановых и фактических часов.

График

grafik_1


Настройки модуля

grafik2


Редактирование графика

grafik3




Старая версия «График учёта рабочего времени»

Старый модуль «График учёта рабочего времени» (askaron.workingtimechart) объявлен устаревшим, используйте новый модуль «График учета рабочего времени PRO» (askaron.workingtimechartpro). 

Новый модуль имеет такой же функционал, но многие вещи были добавлены и улучшены. 

Для перехода со старой версии на новую необходимо старый модуль удалить, новый установить и заново настроить. Автоматический перенос данных не предусмотрен.




bitrix24 - График отпусков (askaron.vacationchartsimple)

Модуль «График отпусков (askaron.vacationchartsimple)» предназначен для отображения, у кого отпуск.

Работает на всех редакциях Битрикс24 в коробке.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

<?
if(\Bitrix\Main\Loader::includeModule("askaron.vacationchartsimple"))

  //здесь можно использовать функции и классы модуля

?>


Описание модуля

Модуль «График отпусков (askaron.vacationchartsimple)» предназначен для отображения, у кого отпуск.

Работает на всех редакциях Битрикс24 в коробке.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

<?
if(\Bitrix\Main\Loader::includeModule("askaron.vacationchartsimple"))

  //здесь можно использовать функции и классы модуля

?>

bitrix24 - Интеграция c 1С ЗУП. Импорт в уже существующих пользователей Битрикс24

Модуль работает в Bitrix24 в коробке.

Если модуля Интранет (Bitrix24) нет, то модуль может выгружать График отсутствий в обычный инфоблок. Но вам придётся самостоятельно сделать компоненты для работы с этим инфоблоком вместо стандартных.

Модуль предназначен для выгрузки сотрудников компании из 1С на Битрикс24 с их графиками отсутствий.

Копия стандартного обмена с 1С с выгрузкой сотрудников из ЗУП в Битрикс24 в коробке. Выгрузка пользователей существенно отличается от стандартной.


Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

\Bitrix\Main\Loader::includeModule("askaron.zup1c");


Описание модуля

Модуль работает только в Bitrix24 в коробке

Модуль предназначен для выгрузки сотрудников компании из 1С на Битрикс24 с их графиками отсутствий. Причём, сотрудники выгружаются в действующих пользователей портала, не создаются новые сотрудники, не создаются подразделения из 1С, не выгружается история состояний. Но зато выгружаются графики отсутствий к пользователям портала. Несколько 1С могут одновременно выгружать сотрудников.

Модуль представляет собой копию функционала для выгрузки пользователей из «1С: Зарплата и управление персоналом» с существенными исправлениями и дополнениями.

Страница модуля в Маркетплейсе
https://marketplace.1c-bitrix.ru/solutions/askaron.zup1c/

Модуль содержит свои страницы обмена, функционал которых отличается от стандартной.

Сравнение функционала
https://ВАШ_САЙТ/bitrix/admin/1c_intranet.php
и
https://ВАШ_САЙТ/bitrix/admin/aa01_askaron_zup1c_intranet.php


  стандартная выгрузка  1c_intranet.php  модуль обмена 
aa**_askaron_zup1c_intranet.php
выгрузка пользователей создание новых пользователей, заполнение всех полей из настроек модуля Интранет. для существующих пользователей: заполнение внешнего кода, флажка пользователь из 1С, запись дополнительного пользовательского поля с логином 
выгрузка структуры компании выгружает  не выгружает
выгрузка привязки пользователя к структуре компании выгружает  не выгружает 
выгрузка истории состояний (принят на работу, переведён, уволен) выгружает  не выгружает
выгрузка Графика отсутствий выгружает как есть  выгружает с дополнительными опциями. Можно записать пользователя если он не сотрудник, можно деактивировать состояние "Работает". Состояние "Работает" не всегда нужно видеть в графике отсутствий
параллельная выгрузка из разных 1С нет. Обмены надо делать в разное время  есть. Выгрузки можно запускать параллельно.




Установка и настройка модуля

Для правильной работы модуля необходим модуль Интранет (есть во всех Bitrix24 в коробке).

Если модуля Интранет (Bitrix24) нет, то модуль может выгружать График отсутствий в обычный инфоблок. Но вам придётся самостоятельно сделать компоненты для работы с этим инфоблоком вместо стандартных.


1. Модуль «Интеграция c 1С ЗУП. Импорт в уже существующих пользователей Битрикс24» устанавливается из Маркетплейса и никаких вопросов не задаёт.

Страница модуля в Маркетплейсе
https://marketplace.1c-bitrix.ru/solutions/askaron.zup1c/

2. В 1С необходимо установить бесплатное дополнение «Выгрузка кадровой информации и просмотр расчетных листков»

Учебный курс по установке и настройке модуля для 1С

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=48&CHAPTER_ID=06623&LESSON_PATH=3918.6829.6623


3. При настройке модуля в 1С необходимо указать путь для выгрузки. Логин и пароль пользователя настраиваются также, как для стандартной выгрузки.

вместо
https://ВАШ_САЙТ/bitrix/admin/1c_intranet.php


укажите путь
https://ВАШ_САЙТ/bitrix/admin/aa01_askaron_zup1c_intranet.php

При параллельных выгрузках из разных 1С указывайте разные пути:

https://ВАШ_САЙТ/bitrix/admin/aa01_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa02_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa03_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa04_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa05_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa06_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa07_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa08_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa09_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa10_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa11_askaron_zup1c_intranet.php
https://ВАШ_САЙТ/bitrix/admin/aa12_askaron_zup1c_intranet.php


Пользователь для выгрузки должен состоять в группе пользователей, указанной в настройках модуля. По-умолчанию Администраторы.

Советуем сделать группу Интеграция с 1С, разрешить группе  "Интеграция с 1С" раздел /bitrix/admin на Чтение


4. В 1С необходимо создать дополнительный пользовательский реквизит Строка для справочника Сотрудники.
Например Для сайта: логин на портале

Все, у кого заполнен логин в 1С в будущем будут по нему, сопоставлены модулем обмена на сайте. В поле "Внешний код" будет записан ГУИД из 1С, если пользователь с логином найден.

Внимание: если у вас сотрудники с одинаковым логином выгружается из разных 1С, то выгружаться будет всегда последний выгруженный. Внешний код будет постоянно меняться то из одной 1С, то из другой. Дополнительный реквизит Для сайта: логин на портале должен быть заполнен для сотрудника только в одной 1С. Выгружайте сотрудников так, чтобы сотрудник выгружался только из одной 1С, или хотя бы у него был заполнен логин только в одной 1С.

5. Сделайте пробную выгрузку с одним пользователем. Пользователь с логином не будет обновлён, потому что сайт не знает в каком дополнительном реквизите выгружен логин.

Найдите у пользователя Дополнительные пользовательские поля. Должно быть новое поле "Для сайта: логин на портале". Возьмите внешний код свойства и скопируйте в настройки модуля.

Внешний код пользовательского поля с логином.

Аналогично внешний код можно найти в XML-файле выгрузки

Узнать внешний код поля. Настройка интеграции 1С ЗУП


В настройках модуля можно указать несколько свойств для Логина, из разных 1С будут выгружаться разные пользовательские поля с Логином.. Интеграция проходит по первому заполненному Логину в файле выгрузки.

Внешний код свойства в настройках. Интеграция с ЗУП 1С


6. Сделайте пробную выгрузку. Сайт найдёт пользователя по Логину, и запишет в него поля:
- Строка Внешний код
- Флажок Пользователь из 1С
- Строка Пользовательское поле с логином.
- В инфоблок График отсутствий запишется график отсутствий из 1С.



Настройки модуля

Основные настройки.

Комментарий администратора - напишите об особенностях настройки обмена и кто настраивал.

Внешние коды пользовательских полей - для того, чтобы модуль мог по логину определить в какого пользователя записывать (работает в первый раз, а потом по XML_ID)

Настройки полей Интеграция с 1С ЗУП

Настройки импорта файла.

Проверить целостность структуры - создание свойств у инфоблока график отсутствий, если их нет.

Интервал одного шага в секундах.

Размер части файла

Использовать сжатие ZIP

Группы, пользователям которых разрешена выгрузка.


Настройка прав выгрузки. Интеграция с 1С ЗУП


Дополнительные настройки выгрузки графика отсутствий.


Настройка выгрузки графика отсутствий. Интегрция с 1С ЗУП.

bitrix24 - Поздравления в живой ленте

Описание модуля «Поздравления в живой ленте»

Настройки модуля

Настройки модуля “Поздравления в живой ленте” Производятся в административной части корпоративного портала: Настройки  —  настройки продукта —  настройки модулей  — модуль поздравления в живой ленте.


Задать разные тексты для мужчин, женщин и сотрудников у которых пол не указан в настройках профиля.


В тексте можно использовать переменные  

##POSITION##  — должность

##FIO## — Фио.


Добавление открытки

Для загрузки открыток можно перейти по ссылке в настройках модуля “Хайлоад блок с поздравительными открытками”


Или перейти в Контент — Highload-блоки — Для модуля поздравлений с днём рождения

При добавлении открытки, достаточно только добавить изображение (jpg, png) и указать пол.

Поле сортировка не влияет на отображение открыток. Его можно не заполнять. 

Поле название также не участвует в публикации. Название можно указать любое.  


Модуль каждый день в 7:50 по локальному времени проверяет есть ли сотрудники у которых сегодня день рождения. Если такие сотрудники есть, то случайным образом выбирает изображение соответствующее полу.


bitrix24 - Продвинутый импорт и обработка сделок CRM

Модуль «Продвинутый импорт и обработка сделок в CRM» — комплексное решение, позволяющее не просто организовать удобный импорт данных в сделки Битрикс24 (коробочная версия), а создать по-настоящему эффективную связку Битрикс24 и систем учёта. Вы сможете наполнить вашу CRM данными о продажах и клиентах, автоматизировать их обработку, следить за уровнем продаж, формировать отчеты, просматривать информацию по сделкам и многое другое. А интуитивно понятный интерфейс и гибкость настройки позволяет использовать в качестве источника данных не только 1С даже с высокой степенью кастомизации, но и любую другую систему учёта, способную выгружать данные в формате XML.



Описание модуля

Продвинутый импорт и обработка сделок CRM 

Модуль предназначен для импорта данных из XML файла в сделки Битрикс24 (коробочная версия).

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.deals/ 

Работает на: 
«Битрикс24 из коробки» - любые редакции.


Модуль  поможет наполнить вашу CRM систему данными о продажах и клиентах. 
Ведя учет в 1С или другой системе учета (в системе должна быть возможность выгрузки данных в xml установленного формата), вы сможете переносить информацию из 1С в Битрикс24. Поддерживается как единовременная загрузка данных, так и импорт по расписанию.

Согласно настройкам модуля во время импорта на стороне Битрикс24 происходит обработка данных: запуск роботов и бизнес процессов.

Благодаря модулю можно записывать в CRM:
  • Стандартные поля Битрикс (сделки, контакты, компании)
  • Пользовательские поля
  • Поля типа “привязка к пользователю” (настраиваются соответствия пользователей Битрикс24 значениям в xml файле)
  • Направления сделок



Для установки и настройки модуля не требуются навыки программирования!

Для использования модуля необходимо:
Сформировать XML файл в формате CommerceML 2, при необходимости периодического обмена организовать загрузку и обновление файла в заданной папке на портале.

Подготовка XML файла

Структура файла для импорта сделок совпадает с той которая используется в стандартном обмене 1С с сайтом. Структура расширена для импорта контактов и сделок. Пример xml-файла:
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация xmlns="urn:1C.ru:commerceml_2" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ВерсияСхемы="2.09" ДатаФормирования="2017-04-14T15:30:41" Ид="1">
    <Документ>
        <ПометкаУдаления>false</ПометкаУдаления>
        <Номер1С>ФОЦБ-003024</Номер1С><!--уникальный номер сделки для обмена - единый для всех документов-->
        <Дата>2017-04-08</Дата><!--дата последнего измения(создания) документа в 1С-->
        <Время>10:08:32</Время> <!--время последнего измения(создания) документа в 1С-->
        <Контрагенты>
            <Контрагент><!--в битрикс это будет компания-->
                <Ид>03aeabf2-1c22-11e7-80c5-be0cf4e8da57</Ид><!--ГУиД покупателя из 1С-->
                <ПометкаУдаления>false</ПометкаУдаления>
                <Наименование>Андрей Анатольевич(Санкт-Петербург)</Наименование>
                <ПолноеНаименование>Андрей Анатольевич</ПолноеНаименование>
                <ИНН/>
                <КПП/>
                <КодПоОКПО/>
                <Контакты>
                    <Контакт>
                        <Тип>Телефон рабочий</Тип>
                        <Значение>+79216525302</Значение>
                    </Контакт>
                </Контакты>
            </Контрагент>
        </Контрагенты>
        <КонтактныеЛица>
            <КонтактноеЛицо><!--в битрикс это будет контакт-->
                <Ид>03aeabf2-1c22-77c5-11e7-8da99be0cf4e</Ид> <!--ГУиД контакного Лица из 1С-->
                <ИдКонтрагента>03aeabf2-1c22-11e7-80c5-be0cf4e8da57</ИдКонтрагента>
                <ПометкаУдаления>false</ПометкаУдаления>
                <Наименование>Андрей Анатольевич(Санкт-Петербург)</Наименование>
                <Контакты>
                    <Контакт>
                        <Тип>Телефон рабочий</Тип>
                        <Значение>+79216525302</Значение>
                    </Контакт>
                </Контакты>
            </КонтактноеЛицо>
        </КонтактныеЛица>
        <Валюта>RUB</Валюта>
        <Курс>1.0000</Курс>
        <Сумма>14356</Сумма><!--сумма сделки-->
        <Комментарий>текст комментария</Комментарий>
        <ЗначенияРеквизитов><!--дополнительная информация в сделке, как пример, указан адрес магазина -->
            <ЗначениеРеквизита>
                <Наименование>Адрес магазина</Наименование>
                <Значение>Санкт Петербург. Улица Бестужевская дом 79, корпус 2, квартира 61.</Значение>
            </ЗначениеРеквизита>
            <ЗначениеРеквизита>
                <Наименование>Дата создания заявки</Наименование><!--нужны все даты событий по которым требуются уведомления: дата и время закрытия заявки, дата начала согласования заявки, планируемая дата поставки, дата резервирования товара,дата приезда клиента -->
                <Значение>2017-04-14 15:30:41</Значение>
            </ЗначениеРеквизита>
                <ЗначениеРеквизита>
                <Наименование>Стадия сделки</Наименование><!--Параметр будет совпадать с стадиями сделок в CRM. Пример создана заявка -status1, утверждена заявка status3 и т.д. Сейчас в 1Сэтого реквизита нет, насколько я понимаю он будет существовать только в xml, статусы будут присваиваться по алгоритмам из 1С-->
                <Значение>status1</Значение>
            </ЗначениеРеквизита>
        </ЗначенияРеквизитов>
        <Товары>
            <Товар>
                <Ид>beffa5b9-04f3-11e7-80c4-b1d80fa7db7c</Ид>
                <Наименование>245/55R19 TRIANGLE TR257 103V  </Наименование>
                <СтавкиНалогов>
                    <СтавкаНалога>
                        <Наименование>НДС</Наименование>
                        <Ставка>18</Ставка>
                    </СтавкаНалога>
                </СтавкиНалогов>
                <ЗначенияРеквизитов>
                    <ЗначениеРеквизита>
                        <Наименование>ВидНоменклатуры</Наименование>
                        <Значение>Шины</Значение>
                    </ЗначениеРеквизита>
                    <ЗначениеРеквизита>
                        <Наименование>ТипНоменклатуры</Наименование>
                        <Значение>Товар</Значение>
                    </ЗначениеРеквизита>
                </ЗначенияРеквизитов>
                <Единица>
                    <Ид>796 </Ид>
                    <НаименованиеКраткое>шт</НаименованиеКраткое>
                    <Код>796</Код>
                    <НаименованиеПолное>Штука</НаименованиеПолное>
                </Единица>
<Скидка>
<Сумма>203</Сумма><!--Размер скидки на 1 товар-->
<Процент>15</Процент><!--Размер скидки в процентах-->
</Скидка>
                <Количество>4</Количество>
                <Цена>3589</Цена><!--Цена со скидкой-->
                <Сумма>14356</Сумма><!--Сумма со скидкой со скидкой-->
            </Товар>
        </Товары>
    </Документ>
</КоммерческаяИнформация>

Установка и настройка модуля

Общие настройки

Страницу с общими настройками можно условно разделить на 4 блока. 

Справочная информация

Агент в списке агентов — ссылка на список агентов, дата последнего запуска и дата из файла last_update.txt

Лог файл —  ссылка на лог файл

Папка с файлами обмена — ссылка на файлы  last_update и orders.xml

Screenshot_2_1.png

Второй блок отвечает за основные настройки модуля

Агент обмена выполняется — Запускает агента, отвечающего за периодический обмен, отмечать нужно в случае настрйоки периодического обмена.

Записывать отладочную информацию в лог — записывает данные в лог, чтобы не раздувать файл с логом, следует использовать только для отладки.

Папка для обмена — Можно указать любую другую папку для хранения файлов orders.xml и last_update.txt

Период чтения файла — Интервал с которым портал будет просматривать файл и сверять с датой указанной в файле last_update.txt. От этого параметра зависит, как часто будет происходить обмен. Рекомендуется установить большой интервал перед первой загрузкой. Проверить какое примерно время в среднем занимает обмен, исходя из этих данных устанавливать значение этого поля. Для корректной работы модуля важно, чтобы предыдущий импорт был завершен до начала следующего.

Загружать контакты — позволят разрешить/запретить создание контактов в CRM 

Загружать компании — позволят разрешить/запретить создание компаний в CRM

Загружать сделки — позволят разрешить/запретить создание сделки в CRM

Поле для записи даты изменения сделки — Может быть использовано для записи даты изменения документа 1С в Битрикс. Может быть использовано для проверки кто последний изменял документ, модуль или пользователь

Третий блок — настройки соответствий

В третьем блоке настраивается соответствие полей сделки, контакта, компании. Также выделены настройки статусов сделки. В левой колонке указывается наименование из 1С В правой символьный код нужного поля в CRM (подробнее в главе Таблица используемых полей CRM)
Если у вас закончились доступные поля, сохраните настройки. Появится набор дополнительных полей.

Четвертый блок — Настройки автоматизации

Screenshot_3-1.png

Бизнес процессы запускаемые для сделок — В списке можно отметить бизнес процессы, которые требуется запускать для импортированных сделок.

Запускать роботов для сделок — Активирует всех роботов CRM настроенных для сделок.

Ответственный для создания новых сделок — поле для установки ответственного за новые сделки. Можно использовать, если в файле не передаются данные о сотрудниках.

Пользователь для обмена—   Должен обладать достаточными правами для создания и обновления сделок. Обязательное поле. В CRM будет отображаться как создатель сделки. 

Приоритет выбора ответственного за сделку:

  1. ASSIGNED_BY_ID, полученный из полей, если сопоставление будет удачным
  2. Ответственный для создания новых сделок (заполняется в настройках)
  3. Пользователь для обмена

Кнопка сохранить в файл позволит сохранить конфигурацию настроек в файл.

Пользователи

Пользователи
Страница "Пользователи" состоит из двух колонок
Значение в 1С и пользователь в Битрикс.

Одному значению в 1С может соответствовать только 1 пользователь в битрикс
Одному пользователю в Битрикс может соответствовать несколько значений.

Как работает сопоставление?

Если у вас в файле есть значение реквизита - пользователь из системы учета, его можно сопоставить с сотрудником в Битиркс24
Для этого нужно:
На странице настроек, в блоке соответствие полей, в левой колонке указать наименование реквизита хранящего в себе имя сотрудника. в правой колонке указать код поля из Битрикс (смотри урок "Таблица используемых полей")
Это поле обязательно  должно иметь тип "Привязка к пользователю"

Пример №1:
В файле нам приходит

<ЗначениеРеквизита> 
                <Наименование>Менеджер</Наименование> 
                <Значение>Иванов Иван</Значение> 

У нас есть Иванов Иван в CRM и мы хотим, чтобы его продажи из системы учета привязывались к нему в Битрикс24.

На странице общие настройки заполняем соответсвтие
Screenshot_3-1.png

Где, ASSIGNED_BY_ID  - стандартное поле Битрикс обозначающее ответственного (привязка к пользователю)

При чтении файла, модуль увидит, что значению реквизита "Менеджер"  сопоставлено поле с типом "Привязка к пользователю" и найдет в таблице "пользователи" соответствие.

Если не найдет, ответственным будет установлен "Ответственный для создания новых сделок" (см курс "Общие настройки"). Если бы мы использовали не стандартное полеASSIGNED_BY_ID, а пользовательское  с нужным типом и в таблице "пользователи" не нашлось бы соответствия, поле осталось бы пустым. 

Пример №2:
К нам в файле приходят Иванов Иван и Петр Петров, которых нет в Битрикс24, зато есть их руководитель Евгений Бондаренко

В таблице соответствия мы пишем

Screenshot_4.png
Все сделки по которым в системе учета были Иван и Петр попадут в Битрикс, ответственным будет Бондаренко Евгений.

Пример N3:
В системе учета есть общие аккаунты, менеджер1, продавец2, кассир3 и т.д.

Можно  назначать их на выделенного сотрудника, который будет заниматься этими сделками или распределит по другим сотрудникам.

Screenshot_5.png






Направления сделок


Направления сделок задаются схожим образом с пользователями.

В основных настройках выбирается поле из XML файла и сопоставляется со значением CATEGORY_ID (стандартное значение Битрикс)
В свою очередь CATEGORY_ID имеет значения 1, 2,3 и т.д. (подробно в уроке Таблица используемых полей CRM)

Остается на странице "Направления сделок" сопоставить значениям из XML  порядковый номер направления сделок.
Одному направлению может соответствовать несколько значений из XML
Если в XML попадется значение не указанное в этой таблице будет выбрано значение "0" по умолчанию. Это "общее" направление сделок

Screenshot_6.png

Стадии для всех направлений задаются в общих настройках.

Даже если названия стадий для разных направлениях совпадают, для них предусмотрен уникальный код (подробно в уроке Таблица используемых полей CRM).

Пример настройки стадий (в примере названия стадий сделок в разных направлениях одинаковые)

Screenshot_7.png

Импорт из файла

Инструмент для ручной загрузки данных.

Screenshot_8.png

Инструмент подходит для любой загрузки данных

Важно!

Стоит учитывать, что большая часть отчетов Битрикс24 строится на дате создания  и закрытия, полях, которые автоматически проставляются системой.

Загружая данные о продажах подобным способом искажается статистика, т.к все сделки выгружаются одним днем.

Подходит для загрузки контрагентов, нужно убрать птичку "загружать сделки" (см урок "Общие настройки")

Ограничения по объему файлов

Максимальный объем зависит от настроек сервера и хостинга.

Мы тестировали загрузку на сервере со стандартными настройками (4 CORE CPU 4 ГБ RAM) импорт корректно работает с файлами 150 000 строк (7Мб).

Таблица используемых полей CRM



Стандартные поля сделок

TITLE - Название
OPPORTUNITY - Сумма
CURRENCY_ID - Валюта
OPPORTUNITY_ACCOUNT - Сумма в валюте учета
ACCOUNT_CURRENCY_ID - Валюта учета
PROBABILITY - Вероятность,%
ASSIGNED_BY_ID - Ответственный
ASSIGNED_BY_EMAIL - Ответственный (e-mail)
CATEGORY_ID - Направление
STAGE_ID - Стадия сделки
COMMENTS - Комментарий
CLOSEDATE - Предполагаемая дата закрытия
CONTACT_ID - Контакт
CONTACT_IDS - Контакты
COMPANY_ID - Компания


Стандартные поля контактов

NAME - Имя
LAST_NAME - Фамилия
SECOND_NAME - Отчество
BIRTHDATE - Дата рождения
EMAIL - E-mail
PHONE - Телефон
WEB - Сайт
POST - Должность
FULL_ADDRESS - Адрес
ADDRESS - Улица
ADDRESS_2 - Квартира
ADDRESS_CITY - Город
ADDRESS_POSTAL_CODE - Индекс
ADDRESS_REGION - Район
ADDRESS_PROVINCE - Область
ADDRESS_COUNTRY - Страна
COMMENTS - Комментарий
TYPE_ID - Тип контакта
ASSIGNED_BY_ID - Ответственный
SOURCE_ID - Источник
SOURCE_DESCRIPTION - Описание
COMPANY_ID - Компания
LEAD_ID - Лид
PHONE_WORK - Рабочий телефон
PHONE_MOBILE - Мобильный телефон
PHONE_FAX - Номер факса
PHONE_HOME - Домашний телефон
PHONE_OTHER - Другой телефон
WEB_WORK - Корпоративный сайт
WEB_HOME - Личная страница
WEB_FACEBOOK - Страница Facebook
WEB_VK - Страница ВКонтакте
WEB_LIVEJOURNAL - Страница LiveJournal
WEB_TWITTER - Микроблог Twitter
WEB_OTHER - Другой сайт
EMAIL_WORK - Рабочий e-mail
EMAIL_HOME - Частный e-mail
EMAIL_OTHER - Другой e-mail

Стандартные поля компании

TITLE - Название компании
COMPANY_TYPE - Тип компании
INDUSTRY - Сфера деятельности
EMPLOYEES - Кол-во сотрудников
REVENUE - Годовой оборот
CURRENCY_ID - Валюта
ASSIGNED_BY_ID - Ответственный
COMMENTS - Комментарий
EMAIL - E-mail
PHONE - Телефон
WEB - Сайт
IM - Мессенджер
ADDRESS - Фактический адрес
ADDRESS_LEGAL - Юридический адрес
BANKING_DETAILS - Банковские реквизиты
OPENED - Доступна для всех
LEAD_ID - Лид
PHONE_WORK - Рабочий телефон
PHONE_MOBILE - Мобильный телефон
PHONE_FAX - Номер факса
PHONE_HOME - Домашний телефон
PHONE_PAGER - Номер пейджера
PHONE_OTHER - Другой телефон
WEB_WORK - Корпоративный сайт
WEB_HOME - Личная страница
WEB_FACEBOOK - Страница Facebook
WEB_VK - Страница ВКонтакте
WEB_LIVEJOURNAL - Страница LiveJournal
WEB_TWITTER - Микроблог Twitter
WEB_OTHER - Другой сайт
EMAIL_WORK - Рабочий e-mail
EMAIL_HOME - Частный e-mail
EMAIL_OTHER - Другой e-mail

Предустановленные поля для сделок
OPPORTUNITY - сумма из поля "сумма". Важно что эт не сумма товаров, а именно то что пришло в поле "сумма"
CURRENCY_ID - Валюта. Из поля заказа "валюта"

Добавление пользовательских полей

Для того, чтобы получить идентификатор пользовательского поля, нужно :
Зайти в настройки уже созданного пользовательского поля (CRM > Настройки > Настройки форм и отчетов >  Пользовательские поля >  ... )
Идентификатор содержится в адресе страницы после слова edit/
Screenshot_9.png

Используется идентификатор без "/" (в текущем примере только UF_CRM_1498742751)

Типы полей
1) строка
2) число
3) дата/время 
4) да/нет

Для полей типа булево (да/нет) модуль реагирует на значения в файле импорта (false, true) 

Идентификаторы направления сделок

CRM > Настройки > С чего начать > направления сделок.
Идентификатор совпадает с ID направления.

Screenshot_10.png
Общее - направление по умолчанию. Туда будут попадать все не распределенные сделки. 

Настройка соответствия стадий сделок

Стадии сделок следует искать в административной части Настройки > Производительность > таблицы таблица называется b_crm_status

В этой таблице нужно вынести в фильтр поле ENTITY_ID в фильтре указать значение ?DEAL_STAGE

Так же можно перейти по ссылке Адрес_вашего_портала/bitrix/admin/perfmon_table.php?PAGEN_1=1&SIZEN_1=50&lang=ru&set_filter=Y&adm_filter_applied=0&table_name=b_crm_status&find_type=ID&find_ENTITY_ID=%3FDEAL_STAGE&by=SORT&order=asc

Screenshot_11.png

Из этой таблицы будет видно  
  • ENTITY_ID —  направление сделок. Без цифры —  общее, с цифрой соответствует своему направлению.
  • STATUS_ID —  идентификатор статуса
  • NAME — Ваше название стадии сделки.





Концепция использования

Сделки в CRM — миф или реальность? — Объективная действительность!

Повышаем эффективность связки Битрикс24 и систем учёта

Описание


   Модуль «Продвинутый импорт и обработка сделок в CRM» — комплексное решение, позволяющее не просто организовать удобный импорт данных в сделки Битрикс24 (коробочная версия), а создать по-настоящему эффективную связку Битрикс24 и систем учёта. Вы сможете наполнить вашу CRM данными о продажах и клиентах, автоматизировать их обработку, следить за уровнем продаж, формировать отчеты, просматривать информацию по сделкам и многое другое. А интуитивно понятный интерфейс и гибкость настройки позволяет использовать в качестве источника данных не только 1С даже с высокой степенью кастомизации, но и любую другую систему учёта, способную выгружать данные в формате XML.

   Уникальная особенность нашего решения — возможность запуска роботов CRM и бизнес-процессов Битрикс24 для импортированных из системы учёта данных.

   Автоматизировать обработку полученных данных можно по-разному. Вы можете держать всех заинтересованных лиц в курсе изменений по сделкам с помощью уведомлений; автоматически формировать задачи или запускать бизнес-процесс согласования при переходе сделки в определенный статус; отправлять письма или смс клиентам (при использовании соответствующих модулей); использовать все возможности роботов CRM.

   Модуль поддерживает как единовременную загрузку данных, так и импорт по расписанию. Таким образом, вы сможете не только настроить автоматическое отслеживание всех изменений по сделкам в вашей системе учёта, но и при необходимости загрузить в CRM и проанализировать историю сделок.

   Решение предназначено, в первую очередь, для руководителей, начальников отдела, специалистов контроля качества. Динамически подгружаемая информация позволит следить за уровнем продаж, формировать отчеты, просматривать информацию по сделкам и клиентам, а гибкость Битрикс24 даст возможность получить практически любую информацию, необходимую для аналитики. При этом включаемые бизнес-процессы и роботы, позволят эффективно взаимодействовать с ответственными сотрудниками, проанализировать их успехи или неудачи.

Взаимодействие с 1С

   Разрабатывая «Продвинутый импорт и обработка сделок в CRM», мы хотели создать мощный инструмент взаимодействия 1С и Битрикс24, способный органично дополнить и расширить существующий функционал, слабая сторона которого — удобство и эффективность эксплуатации в рамках CRM.

   1С-трекер — стандартный механизм, наиболее близкий по смыслу к работе нашего модуля. «Трекер» позволяет выгружать из 1С: контрагентов, их контакты и контактную информацию, а также организации (в раздел «Компании» Битрикс24); контактные лица контрагентов (в раздел «Контакты»). Также в раздел «Мои дела» можно выгружать необходимые документы (при этом у них должны быть реквизиты «Контрагент» и «Сумма документа», а сами документы должны быть в составе плана обмена).

   В теории этот функционал позволяет связать офлайн-продажи с онлайн-CRM в режиме реального времени. По факту же связка 1С и Битрикс24 через «трекер» сможет принести результат, только в том случае, если работа отдела продаж не связана с просмотром остатков, резервированием, формированием полного пакета документов, необходимых для реализации товара или услуги.

   Почему так получается? Самый тривиальный пример: почти вся важная информация о клиентах, за счёт которой можно организовать их автоматический отбор и сегментацию, «трекер» оставляет в 1С. В CRM попадает только контактная информация.

   Другой пример: стандартная выгрузка документов, если речь идёт о любой специфической информации, по сути бесполезна. На выходе вы получаете огромный список дел с шаблонными названиями, по которому можно реально оценить только факт наличия документа. За прочими деталями необходимо уже лезть в дела с реализацией, например через веб-сервер 1С.

   Вот и выходит на практике, что в большинстве случаев сотрудникам компании (особенно отделу продаж), действительно проще работать в режиме одного окна в 1С, чем использовать интеграцию Битрикс24 и 1С через «трекер».
И подобная тенденция прослеживается в целом ряде компаний, с которыми нам приходилось работать. Битрикс24 используется в основном не для работы с документами, а для внутренних коммуникаций, уведомлений, совершения звонков клиентам,работы с задачами и сбора статистики.

   При этом стандартные инструменты взаимодействия Битрикс24 с 1С и другими системами учёта, зачастую, не могут дать CRM необходимый объём данных для анализа.
Модуль «Продвинутый импорт и обработка сделок в CRM» призван восполнить этот пробел и позволит Битрикс24 получить практически любую информацию необходимую для аналитики, даст возможность контроля сделок в реальном времени и обеспечит должный уровень автоматизации этого процесса. 



Screenshot_289.png


Канбан — возможность контролировать сделки в реальном времени

Как это работает? 

Механизм импорта 

Наш модуль, использует механизм импорта данных из файла XML в CRM Битрикс24. 

Преимущества:

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

Описание задачи
Опишем работу модуля на примере того, как он вписывается в бизнес процессы условной компании. 

Предполагаемая сделка с клиентом разбита на несколько этапов и документов: 

  1. составление-обработка-согласование заявки
  2. составление заказа покупателя
  3. составление заказа поставщику-резервирование товара
  4. реализация
В системе 1С, это 3 разных документа, которыми занимаются разные отделы. 

CRM используется для: 


  • получения статистической информации;
  • отображения в реальном времени результатов;
  • информирования клиентов о движении сделки по стадиям;
  • информирования соответствующих сотрудников о движении сделки по стадиям;
  • контроля производительности сотрудников;
  • выявления проблемных заявок и заказов, например, не обработанных за определенное время.

Импорт данных 

На стороне 1С формируется XML-файл по указанному нами шаблону. Он включает в себя даты, связанные с документом; фамилии; контактные данные и прочую информацию по всей цепочке документов системы учёта. 

В настройках нашего модуля данные из файла сопоставляются с полями и сущностями Битрикс24. 

После того, как все предварительные работы проведены, начинается импорт. 

Автоматизация

Важной составляющей модуля является возможность запуска роботов CRM и бизнес-процессов для сущностей из импортированных файлов.
Данная опция включается или выключается на ваше усмотрение, т.к может повлиять на работоспособность самого портала при больших объемах импортируемых данных. 


Screenshot_305.png


Автоматизировать обработку полученных данных с помощью нашего модуля можно по-разному:

  • С помощью уведомлений держать в курсе всех заинтересованных лиц об изменениях или задержках в сделке.
  • При переходе в определенный статус Битрикс может создавать сопутствующие документы или запускать бизнес-процесс согласования.
  • Отправлять письма или СМС клиентам (при использовании соответствующих модулей)
  • Использовать все возможности роботов CRM

Screenshot_290.png



В результате, кроме уведомлений мы получаем полную картину продаж за нужный период. 


Строим отчеты по по эффективности менеджеров: 


Screenshot_294.png
Круговая диаграмма показывает доход по менеджерам. Нижняя — соотношение успешных сделок (зеленым) и проваленных (красным)

Screenshot_295.png 


В приведённой таблице указаны менеджеры, общее количество сделок, процентное соотношение проваленных и выигранных, полученная сумма. 


Конкретно по этому отчету мы уже можем сделать вывод, что количество обработанных и даже выигранных сделок не всегда самый эффективный показатель оценки труда.

Screenshot_296.png

Доходность по компаниям — такая аналитика подойдет для работы с повторными продажами


Screenshot_297.png  Screenshot_298.png

Поскольку, в нашем случае основную работу менеджеры выполняют в 1С, а Битрикс24 является, в первую очередь, инструментом онлайн мониторинга, менеджеры не пользуются делами и звонками. Но по графику видна загрузка менеджеров — по спадам легко определить выходные дни.

Таким образом с использованием данных, загруженных в CRM при помощи нашего модуля каждый руководитель сможет сформировать для себя отчеты по количественным и качественным показателям.









Pozvonim.com — сервис удержания клиентов, callback, обратный звонок

Модуль для интеграции с сервисом Pozvonim.com.

Модуль бесплатный,

базовый функционал сервиса Pozvonim.com (телефонная трубка на вашем сайте) — бесплатно

оплачиваются только телефонные соединения.




Внешний вид виджета на сайте Кнопка обращения к сервисуВиджет на сайте

Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

if(CModule::IncludeModule("askaron.pozvonim"))
{
   //здесь можно использовать функции и классы модуля
}

Описание модуля

Модуль для интеграции с сервисом Pozvonim.com.

Настройки показа виджета.

Страница настроек модуля

1) Общие настройки для всех сайтов

Отображать callback-сервис для всех пользователей, кроме пользователей из отмеченных групп

Позволяет ограничить показ сервиса для пользователей из определённых групп (например, администраторы и контент-менеджеры). По умолчанию группы не выбраны, т.е. отображать всем.

Отображать callback-сервис в режиме правки

Позволяет скрывать виджет при включённом режиме правки. По умолчанию опция не отмечена, т.е. не отображать.


2) Настройки для сайта

Данная группа настроек отображается отдельно для каждого сайта.

Отображать callback-сервис

Выбрать, будет ли отображаться виджет на данном сайте. По умолчанию включено.


Ограничивать показ сервиса в зависимости от текущего раздела, Не выводить callback-сервис в следующих разделах (каждый раздел с новой строки)

Позволяет выбрать разделы, в которых callback-сервис отображаться не будет. По умолчанию опция отключена (будет отображаться во всех разделах), по умолчанию указаны разделы /ajax/ и /frames/.

Если виджет необходимо не отображать на каких-то отдельных страницах сайта, на этих страницах можно определить константу

define ("ASKARON_POZVONIM_DISABLED",true);


Код для вставки на сайте

На каждом сайте можно выводить отдельный виджет для callback-сервиса. Подробная инструкция по получению кода.

Как получить код для вставки на сайте

Модуль для интеграции с сервисом Pozvonim.com.

Инструкция по получению кода для вставки на сайте

1) Пройти регистрацию на сайте Pozvonim.com.

Регистрация на сайте

2) В личном кабинете на начальной странице, либо в разделе «Ваши проекты», добавьте ваш сайт и операторов.

Добавление сайта

3) Вы получили код для вставки, скопируйте его и вставьте в настройках модуля в поле «Код для вставки на сайте». Заново получить код можно в разделе «Ваши проекты», нажав «HTML Коды» в строке с вашим сайтом.

Код для вставки

Sitemap.xml- автогенерация карты сайта на кроне. Ускорение Битрикс

Быстрая генерация карты на кроне не мешает пользователям и обмену с 1С. Карта сайта всегда актуальная.

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.sitemap/


Работает на: 
- «1С-Битрикс: Управление сайтом» - любые редакции, кроме редакции «Первый сайт» 
- «Битрикс24 в коробке» - любые редакции. 

 

Разработчикам: 
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

if(\Bitrix\Main\Loader::includeModule("askaron.sitemap"))

  //здесь можно использовать функции и классы модуля 


Описание модуля

Модуль предназначен для автоматической генерации карты сайта по расписанию на кроне. 

Это лучше, чем перегенерировать карту каждый раз при изменении элемента. Особенно ускоряется обмен с 1С на больших каталогах. 

После установки перейдите на страницу настроек модуля Настройки->Настройки продукта->Настройки модулей->Автогенерация карты сайта на кроне. либо Сервисы->Автогенерация карты сайта на кроне->Настройки модуля.

Новые настройки

Если у вас используется многосайтовость, то настройки будут для каждого сайта в отдельности. Установите галочку для включения автоматической генерации карты сайта. Установите периодичность, с которой она будет производиться (не стоит делать её слишком часто). Если на сайте используется доступ по протоколу https, установите соответствующую галочку.

Настоятельно рекомендуем для быстрой работы сайта перевести агенты на крон. Это можно сделать модулем «Агенты на кроне». Или по инструкции Битрикса, если перенести на крон хотя бы только непериодические агенты.
Может потребоваться настройка программы cron на сервере. Мы этим не занимаемся, вам надо обратиться к техподдержке хостинга или к документации хостинга.

Агенты на крон можно не переносить, если генерация sitemap в модуле поиска занимает несколько секунд и не мешает пользователю.

google sitemap

Генерация карты сайта на основе модуля поиска — это старый способ в Битриксе, но надежный и простой. И не связан с модулем «Поисковая оптимизация».

Настройки модуля поиска

Укажите в настройках модуля поиска страницы, которые не надо индексировать поиском. Проверьте в настройках каждого инфоблока, включены ли флажки «Индексировать элементы для модуля поиска» и «Индексировать разделы для модуля поиска». Проверьте URL в настройках каждого индексируемого инфоблока. 

Генерацию карты сайта модулем «Поисковая оптимизация» надо отключить. Ссылку на карту сайта над будет прописать в robots.txt.

Авторизация по звонку Voice Password

Модуль авторизации по звонку Voice Password предназначен для интеграции на вашем сайте формы авторизации и регистрации по номеру телефона.

Регистрация в сервисе Voice Password

Для работы модуля вам понадобится зарегистрироваться в сервисе Voice Password. Для этого перейдите по ссылке и пройдите простую процедуру регистрации.
Пополните баланс внутреннего счета, после чего можно приступить к настройкам модуля.

Авторизация

Для начала необходимо получить API ключ. Ключ берется из личного кабинета в разделе «Настройки» => «API»

Укажите ваш логин в сервисе Voice Password в соответствующем поле.
Скопируйте API Key, перейдите в настройки модуля и вставьте ключ в поле «API ключ», нажмите кнопку «Применить»
Если вы все сделали правильно, то увидите сообщение о том, что модуль готов к работе.

В ином случае вы увидите сообщение об ошибке, говорящее о том, что что-то пошло не так.

Устраните проблему и продолжите настройку модуля.

Основные настройки


После установки модуля, у вас появляется 2 варианта регистрации пользователей:
  • через стандартную форму регистрации;
  • через новую форму авторизации/регистрации. 
Если вы хотите сохранить старую форму регистрации, но подтверждать номер телефона по звонку выполните следующие действия.
Перейдите в настройки главного модуля во вкладку «Авторизация» и отметьте галочки напротив пунктов «Регистрировать пользователей по номеру телефона» и «Номер телефона является обязательным».



Если настройка «Регистрировать пользователей по email»(ниже на той же вкладке) включена - выключите ее и примените настройки.

Примените настройки и перейдите на той же странице во вкладку «Почта и СМС», где в пунктах «Служба отправки СМС по умолчанию» и «Номер отправителя по умолчанию» выберите из списка «Voicepassword»
Более подробную инструкцию по настройке регистрации по номеру телефона можете посмотреть в курсе администратора.

Если вы хотите использовать быструю регистрацию через подтверждение телефона в новой форме, то выполните следующие действия.
Перейдите в настройки модуля и включите опцию «Регистрировать пользователя, если он не существует (при входе через форму авторизации)». 
При этом, если вы на предыдущем шаге не отключили настройку «Регистрировать пользователей по email», то увидите соответствующее предупреждение. Быстрая регистрация в таком случае работать не будет.
 
Описание основных настроек:
    Подменять оригинальную форму авторизации – данная настройка создана для облегчения интеграции модуля и позволяет автоматически подменить форму авторизации на новую. Работает только со стандартным компонентом авторизации bitrix.system.auth. Если у вас самописная или сильно кастомизированная форма авторизации, интегрируйте компонент авторизации отдельно (смотрите в конце инструкции).

    Переводить старых пользователей на авторизации по телефону –Включите эту настройку, чтобы постепенно перевести пользователей на авторизации по звонку.

Работает это следующий образом:
При посещении личного раздела сайта (/personal/), пользователю будет предложено подтвердить номер телефона.
Далее, в зависимости от установленного Уровня принуждения к вводу телефона выполняется 2 сценария:
  • Если выбран уровень «Низкий», то пользователь сможет отказаться от подтверждения номера;
  • Если выбран уровень «Высокий», то пользователь не сможет перейти в личный раздел сайта не подтвердив номер;

   Регистрировать пользователя, если он не существует (при входе через форму авторизации) – если эта настройка включена, то при попытке авторизации по номеру телефона новые пользователь будет автоматически зарегистрирован и авторизован.

   Отключить вход по логину и паролю – данная настройка отключает возможность пользователю авторизоваться по логину и паролю.

Внимание! Если вы отключите возможность пользователям авторизоваться по логину и паролю, старые пользователи НЕ СМОГУТ АВТОРИЗОВАТЬСЯ у вас на сайте. Используйте эту настройку, если точно уверены, что не создадите проблем с авторизацией для ваших старых пользователей


Настройки внешнего вида


Основная цветовая схема – данная настройка определяет основной цвет формы (кнопки отправки звонка и подтверждения кода, а так же цвет контура поля ввода телефона). Нажмите на кнопку справа от поля ввода для вызова палитры цветов.

Второстепенная цветовая схема – данная настройка определяет акцентный цвет формы (цвет кнопок при наведении). Нажмите на кнопку справа от поля ввода для вызова палитры цветов.

Список стран для поля ввода номера телефона – данная настройка определяет, для каких стран выводить коды стран. Выберите из списка одну или несколько стран. Чтобы выбрать несколько стран из списка зажмите клавишу «ctrl» и выберите несколько пунктов списка. Для подтверждения выбора нажмите кнопку «Применить»

Страна по-умолчанию – данная настройка определяет, какая из выбранных выше стран будет использоваться в поле ввода номера телефона по-умолчанию

Повторный запроса звонка через – данная настройка определяет длительность таймера, по истечении которого, пользователь снова сможет запросить звонок.

Интеграция самостоятельного компонента авторизации

Итак, если по какой-либо причине, у вас не работает автозамена формы авторизации (нестандартный компонент авторизации или не вписался в верстку), то у вас есть возможность интегрировать форму авторизации во всплывающем окне.

Если вы не уверены в том, что делаете, то лучше обратитесь к специалисту. Вносимые изменения могут привести к ошибкам на сайте или "съехавшей" верстке.   

Для этого вам понадобится доступ к серверу ftp или ssh.
Подберите место в верстке, где будет располагаться кнопка авторизации, как правило для этого выбирается место в шапке сайта.
В выбранное место верстки вставьте следующий код:
<?=$APPLICATION->IncludeComponent('askaron:voicepassword.auth',array());?>
Чтобы изменить шаблон кнопки "Войти", вынесите шаблон компонента askaron:voicepassword.auth с именем .default (для этого скопируйте папку /bitrix/components/askaron/voicepassword.auth/templates/.default в /local/templates/.default/components/askaron/voicepassword.auth/.default).


И в шаблоне разметьте верстку таким образом, чтобы копка "Войти" имела атрибуты 
data-modal="#askaron-login-modal" data-askaron-modal-button-id="askaron-login-modal"

Использование API модуля(для разработчиков)

Модуль реализует интерфейс взаимодействия с сервисом Voice Password. Доступ к API реализован через класс ApiConnector: Чтобы использовать этот класс подключите модуль askaron.voicepassword
\Bitrix\Main\Loader::includeModule('askaron.voicepassword');
Далее инициализируйте экземпляр класса ApiConnector
$apiConnector = new \Askaron\Voicepassword\ApiConnector();
Вызовите метод $apiConnector->sendFlashCall($phone) для совершения вызова. Метод принимает 2 параметра :
  • «$phone»(обязательный) – номер телефона для совершения звонка
  • «$code»(необязательный) – четырехзначный код, который будет использован в конце номера. Рекомендуется НЕ УСТАНАВЛИВАТЬ этот параметр. Если оставить его пустым, то сервис сам сгенерирует код из доступного пулла номеров, что значительно ускоряет выполнение звонка.
После совершения звонка можете проверить отправленный четырехзначный код с помощью метода

\Askaron\Voicepassword\CodeHandler::readCode();

Пример отправки звонка

if(Loader::includeModule('askaron.voicepassword'){

    /**получаем объект запроса*/
    $request = Context::getCurrent()->getRequest();

      /**создаем экземпляр API коннектора*/
    $apiConnector = new ApiConnector();

      /**отправляем звонок на номер, переданный в запросе параметром phone*/
    $apiConnector->sendFlashCall($request->get('phone'));

  }

Описание услуг и прайс-лист сервиса Voice Password

Агенты на кроне

Модуль «Агенты на кроне» помогает ускорить выполнение страниц сайта за счет переноса агентов с посетителей сайта на крон.

Агенты — это служебные задачи в Битриксе, которые запускаются в определенное время по расписанию.

Cron — это программа на сервере, которая выполняет по расписанию ваши команды.

Модуль содержит всего один переключатель, и не требует навыков программирования.


Модуль бесплатный


Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

if(CModule::IncludeModule("askaron.agents"))
{
  //здесь можно использовать функции и классы модуля
}


Описание модуля

Модуль «Агенты на кроне» помогает ускорить выполнение страниц сайта за счет переноса выполнения агентов с посетителей сайта на крон.

Агенты — это служебные задачи в Битриксе, которые запускаются в определенное время по расписанию. По умолчанию выполняются, когда какой-нибудь пользователь зашел на сайт.

Cron — это программа на сервере, которая выполняет по расписанию ваши команды.

Модуль содержит всего один переключатель, и не требует навыков программирования. 
Страница решения в Маркетплейсе: 


Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.
«Битрикс24 из коробки» - любые редакции.


Установка модуля:

Модуль устанавливается, как любой модуль из маркетплейса, и никаких вопросов не задает.

Настройка модуля:

После установки модуля перейдите на страницу настроек:
Настройки → Настройки продукта → Настройки модулей → Агенты на кроне

Там всего один переключатель: запускать агенты на хитах или на кроне.

Настройка модуля

Внимательно прочитайте комментарии на странице настроек:

Подсказки по модулю 2 


На виртуальной машине Битрикса cron настраивать не нужно.

Но на другом хостинге нужно добавить команду вида:
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php

Где  /usr/bin/php путь к PHP, а /home/bitrix/www/bitrix/modules/main/tools/cron_events.php - полный путь к вашему файлу.

Как настраивать cron у вас на хостинге узнайте своего системного администратора или у техподдержки хостинга.


Замечание

В версии 2.0.0 добавлена дополнительная проверка, если путь к файлу крона содержит символические ссылки при многосайтовости.

Теперь достаточно, чтобы путь к вызываемому файлу заканчивался на /bitrix/modules/main/tools/cron_events.php, и неважно основной у вас сайт или дополнительный. Но мы всё-равно советуем настраивать вызов файла кроном на основной сайт без символических ссылок, так сделано в Виртуальной машине Битрикса.



Проверка:

Настройки -> Настройки продукта -> Агенты


После переключения агентов на крон через некоторое время:
— посмотрите по дате последнего запуска выполняются ли агенты кроном

Удаление модуля:

При удалении модуль может вас спросить хотите ли вы вернуть настройки, чтобы агенты, как раньше, работали на хитах.

Удаление модуля

Если не знаете, что выбрать, лучше соглашайтесь.




На каких сайтах нужно переность агенты на крон

Многие видели на странице проверки сайта замечание:
Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron⁠

Это плохо? Совсем нет. На абсолютном большинстве сайтов агенты почти никак не влияют на время выполнения страниц.

Для сайтов-визиток нет особой разницы, как работают агенты.

Но для Битрикс24 в коробке, где много контента обязательно. Например, пользовательские рейтинги пересчитываются раз в час.

Для интернет-магазинов перевод агентов на крон желателен.

Есть ещё некоторые модули в маркеплейсе, которые без перевода агентов на крон работать не могут. Авторы этих модулей предупреждают в описании к решению.

Модуль «Агенты на кроне» переключит выполнение агентов с хитов пользователей на крон. Хуже не будет, но замечание на странице проверки сайта пропадёт.



Настройка cron на timeweb

Timeweb — один из популярных хостингов под Битрикс. Некоторые пользователи сталкиваются с проблемами при настройке крона через панель.

Создайте задачу cron на странице:
https://cp2.timeweb.ru/crontab/

Укажите путь к файлу от домашней папки без слеша вначале:
public_html/bitrix/modules/main/tools/cron_events.php

timeweb

Путь может быть другим, если сайт расположен в другой папке.

Если указать путь со слешем в начале:
/public_html/bitrix/modules/main/tools/cron_events.php
то файл вызывается, но получается некорректный массив $_SERVER в PHP



Это странная особенность Таймвеба.

После настройки агентов на кроне откройте страницу с агентами, проверьте, выполняются ли они.

Настройки -> Настройки продукта -> Агенты

После переключения агентов на крон через некоторое время:
— посмотрите по дате последнего запуска выполняются ли агенты кроном.



Настройка cron на вашем хостинге никак не входит в обязанности разработчика модуля. В подобных ситуациях вам надо обращаться в техподдержку хостинга или к администратору сервера.



Проблемы с настройкой крона. Почему мы не занимаемся настройкой крона

Некоторые клиенты просят настроить крон на сервере.

Модуль бесплатный, и понятно, что мы отказываем.

Но есть клиенты, которые просят настроить им за деньги. И в этом случае мы тоже вынуждены отказать.

Если у вас не работает один агент — спрашивайте у разработчика сайта.
Если у вас вообще не запускаются агенты — спрашивайте техподдержку хостинга.

На профессиональных хостингах под Битрикс есть техподдержка. Мы считаем, что техподдержка должна такие вопросы уметь решать.

При запуске файла кроном не должно быть никаких ошибок PHP Fatal Error, из-за того что настройки PHP неверные.

К сожалению, большинство хостингов под Битрикс просто заявляют, что у них работают сайты на Битриксе. Заказчик выбирает хостинг наугад, в основном ориентируясь на цену.

При возникновении проблемы запуска файла кроном техподдержка обвиняет Битрикс, разработчика модуля, разработчика сайта, кого угодно, только не себя.



Чем отличается запуск страницы через сайт и кроном:

Существуют разные способы запуска PHP.

Если вы открываете страницу через сайт, то у вас может быть так:

- nginx перенаправляет вас на apache
- apache запускает свой модуль PHP

в этом случае PHP берет настройки из:
- php.ini
- httpd.conf - файл настроек апача
- .htaccess - в корне сайта файл апача

А если вы запускаете файл кроном то выполняется только PHP и файл настроек php.ini.

Чувствуете разницу? У крона - другие настройки для PHP!

Более того, на хостингах бывают разные версии PHP на выбор. Надо запускать кроном ту, на которой у вас пользователи открывают сайт.

Поэтому на 99% всё зависит от настроек хостинга.

Еще на 1% возможны ошибки разработчика сайта. Типа некорректных редиректов на поддомены, если разработчик забыл про крон..

Но тип ошибок никак не будет Fatal Error, или некорректная timezone. Ошибки разработчика, влияющие на исполнение страницы, крайне редки.


Про технологию Агентов на кроне 

Агенты на кроне — это обычная технология Битрикса.

Этой технологии, наверное, столько же лет, сколько Битриксу.

Наш модуль позволяет удобно включать и выключать агенты в админке. Раньше приходилось править вручную ужасные константы и опции.

Если вы воспользуетесь инструкцией Битрикса по переносу агентов на крон, вы получите те же ошибки.

Эта технология раньше считалась профессиональной, её было трудно настроить. С нашим модулем настраивать агенты на кроне стали дилетанты.

Мы советуем подумать, сильно ли нужно переносить агенты на крон: большинству сайтов агенты на кроне не нужны.

Мы советуем выбирать профессиональный хостинг для Битрикс, где нормально настроен крон.

В большинстве случаев легче перенести сайт на другой хостинг, чем разбираться с неадекватным окружением под Битрикс.


Про выделенные серверы и облачные виртуальные машины (VPS/VDS)

В этом случае вы заказывате себе сервер и сами его настраиваете. 

Техподдержка, как правило, отвечает, что они только предоставляют ресурсы, а настройки должны делать вы.

У вас должны быть навыки администрирования или свой системный администратор.

Мы сайты своих клиентов размещаем на виртуальных машинах и сами занимается настройкой окружения и администрированием.

Мы используем Виртуальную машину Битрикса.Там есть настройки, которые необходимо выполнять через консоль. Не всё просто, зато Битрикс работает замечательно. Тариф индивидуальный.

Если у вас свой выделенный сервер с панелью управления — это вовсе не означает, что агенты на кроне заработают, или это будет легко настроить.




Аскарон API

Аскарон API — служебный модуль веб-студии «Аскарон системс», в котором собраны наши наработки.

Модуль бесплатный 

Разработчикам: 

Модуль подключается сам в начале работы страницы. Специально подключать модуль нет необходимости.

Модуль работает на любых редакциях Битрикса.

Требуется версия главного модуля не ниже 14.0.0.

Однако, если в init.php до загрузки страницы вам понадобятся функции модуля, вы должны подключить его используя конструкцию:


if(\Bitrix\Main\Loader::includeModule("askaron.api"))

  //здесь можно использовать функции и классы модуля 

Описание модуля

Служебный модуль веб-студии Аскарон системс

Классы

\Askaron\Api\Func

Класс содержит функции, которые можно применять в свое проекте

getDefaultSiteId

public static function getDefaultSiteId()
с версии 1.2.0.

Функция возвращает ID активного сайта по умолчанию. Если активный сайт по умолчанию не найден, то возвращает первый активный сайт с наименьшим индексом сортировки.

Функция нужна для отправки писем или смс из административного раздела, если сайт явно не указан.

Примеры:

<?
$SITE_ID = \Askaron\Api\Func::getDefaultSiteId();
echo $SITE_ID; // Выведет s1
?>



getNoPhoto

array function getNoPhoto( int $width = false, int $height = false )

Фунция возвращает массив с уменьшенной картинкой «Нет фото». Картинка устанавливается в настройках модуля для каждого сайта.


Примеры:

<?// оригинальный размер, если без параметров?>
<?$arNoPhoto = \Askaron\Api\Func::getNoPhoto();?>
<img src="<?=$arNoPhoto["src"]?>" width="<?=$arNoPhoto["width"]?>"  height="<?=$arNoPhoto["height"]?>">

Array
(
    [src] => /upload/askaron.api/64e/no_photo_test.jpg
    [width] => 533
    [height] => 300
    [size] => 52896
)



<?// ресайз по ширине ?>
<?$arNoPhoto = \Askaron\Api\Func::getNoPhoto(100);?>
<img src="<?=$arNoPhoto["src"]?>" width="<?=$arNoPhoto["width"]?>"  height="<?=$arNoPhoto["height"]?>">

Array
(
    [src] => /upload/resize_cache/askaron.api/64e/100_100000_1/no_photo_test.jpg
    [width] => 100
    [height] => 56
    [size] => 4155
)



<?// ресайз по высоте ?>
<?$arNoPhoto = \Askaron\Api\Func::getNoPhoto(false, 100);?>
<img src="<?=$arNoPhoto["src"]?>" width="<?=$arNoPhoto["width"]?>"  height="<?=$arNoPhoto["height"]?>">

Array
(
    [src] => /upload/resize_cache/askaron.api/64e/100000_100_1/no_photo_test.jpg
    [width] => 177
    [height] => 100
    [size] => 10528
)



<?// ресайз по ширине и высоте ?>
<?$arNoPhoto = \Askaron\Api\Func::getNoPhoto(100, 100);?>
<img src="<?=$arNoPhoto["src"]?>" width="<?=$arNoPhoto["width"]?>"  height="<?=$arNoPhoto["height"]?>">

Array
(
    [src] => /upload/resize_cache/askaron.api/64e/100_100_1/no_photo_test.jpg
    [width] => 100
    [height] => 56
    [size] => 4155
)

getResize

mixed function getResize(
  mixed $file,
  int $width = false,
  int $height = false,
  bool $bConvertWebp = false,
  int $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL 
)

Функция возвращает массив с уменьшенной картинкой. В случае ошибки вернёт false

Функция является обёрткой над функцией \CFile::ResizeImageGet:

\CFile::ResizeImageGet( $file, array( "width"=>$width, "height"=>$height ), $resizeType, true );

Дополнительно функция умеет создавать копию маленькой картинки в формате webp. Картинка webp хранится на сайте в папке /upload/resize_cache/askaron.api/webp/. Ресайзенные картинки webp удаляются в случае удаления основной картинки с сайта.


Параметры функции:

mixed $file - Точно такой же, как для \CFile::ResizeImageGet.

Идентификатор файла из таблицы b_file или массив описания файла (Array(FILE_NAME, SUBDIR, WIDTH, HEIGHT, CONTENT_TYPE)), полученный методом GetFileArray.

width и height не обязательные. Если заданы, то картинка ресайзится. Если не заданы, то будет подставлено 100000

bool $bConvertWebp = false - если задан, то для картинок с расширениями jpg, jpeg, gif, png, bmp будет предпринята попытка сделать копию в webp.

В случае успешной конвертации в webp в ответе в поле "src" будет записан путь к картинке webp. Иначе останется пусть сделанный  \CFile::ResizeImageGet. 

int $resizeType = BX_RESIZE_IMAGE_PROPORTIONAL 

Тип масштабирования для функции \CFile::ResizeImageGet:
BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее;
BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.

Подробнее в документации по \CFile::ResizeImageGet


Ответ:

Функция возвращает массив с уменьшенной картинкой. В случае ошибки вернёт false.

Ответ аналогичен \CFile::ResizeImageGet, но в него добавлен параметр src_before_convert.

src_before_convert совпадает с src. Но если произошла конвертация в webp из другого формата, то src_before_convert и src не совпадают.



Примеры:

<?// ресайз только по ширине с сохранением пропоций?>
<?$arPhoto = \Askaron\Api\Func::getResize($photo, 100);?>
<img src="<?=$arPhoto["src"]?>" width="<?=$arPhoto["width"]?>" height="<?=$arPhoto["height"]?>" alt="">

Array
(
    [src] => /upload/resize_cache/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/100_100000_1/170221585813651289.jpg
    [width] => 100
    [height] => 79
    [size] => 8430
    [src_before_convert] => /upload/resize_cache/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/100_100000_1/170221585813651289.jpg
)



<?// ресайз только по высоте с сохранением пропоций?>
<?$arPhoto = \Askaron\Api\Func::getResize($photo, false, 100);?>
<img src="<?=$arPhoto["src"]?>" width="<?=$arPhoto["width"]?>" height="<?=$arPhoto["height"]?>" alt="">

Array
(
    [src] => /upload/resize_cache/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/100000_100_1/170221585813651289.jpg
    [width] => 127
    [height] => 100
    [size] => 11960
    [src_before_convert] => /upload/resize_cache/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/100000_100_1/170221585813651289.jpg
)




<?// ресайз по ширине и высоте с обрезанием и сохранением в webp ?>
<?$arPhoto = \Askaron\Api\Func::getResize($photo, 100, 100, true, BX_RESIZE_IMAGE_EXACT);?>
<img src="<?=$arPhoto["src"]?>" width="<?=$arPhoto["width"]?>" height="<?=$arPhoto["height"]?>" alt="">
или
<picture>
  <source type="image/webp"
    srcset="<?=$arPhoto["src"]?>"  width="<?=$arPhoto["width"]?>" height="<?=$arPhoto["height"]?>"
  >
  <img src="<?=$arPhoto["src_before_convert"]?>" width="<?=$arPhoto["width"]?>" height="<?=$arPhoto["height"]?>" alt="" >
</picture>

Array
(
    [src] => /upload/resize_cache/askaron.api/webp/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/jpg_100_100_2/170221585813651289.webp
    [width] => 100
    [height] => 100
    [size] => 9751
    [src_before_convert] => /upload/resize_cache/uf/9f3/xq4869x9wgik0ta5m047gsg2gsh4135m/100_100_2/170221585813651289.jpg
)




getYearsPeriod

string getYearsPeriod( int $first_year, string $dash = "&ndash;");

Функция возвращает период существования сайта в формате:

<$first_year><$dash><Текущий год>

Либо

<Текущий год>

Пример:

<?=\Askaron\Api\Func::getYearsPeriod(2013);?> // 2013–2015

<?=\Askaron\Api\Func::getYearsPeriod(2015);?> // 2015


getHiloadblockClassByTableName


Пример:

$className = \Askaron\Api\Func::getHiloadblockClassByTableName( 'eshop_color_reference' );
if ( strlen( $className ) > 0 )
{
  $res = $className::getList();
  while ( $arFields = $res->fetch() )
  {
    echo "<pre>"; print_r($arFields); echo "</pre>";
  }
}


getCounterTemplate

string getCounterTemplate(int $num, string $form1, string $form2, string $form5 )

Вычисляет окончания слова.

$num - число
$form1 - окончание для 1
$form2 - окончание для 2
$form5 - окончание для 5

Возвращает строку - одно из окончаний слова, в зависимости от $num.

Пример:

<?$arResult["COUNT"] = 10;?>

<?=$arResult["COUNT"]?> товар<?=\Askaron\Api\Func::getCounterTemplate( $arResult["COUNT"], "", "а", "ов");?>


getCatalogGroupIdByName

mixed function getCatalogGroupIdByName( string $name );

Функция возвращает ID типа цен по коду. Результат запоминает.

Возвращает false, если тип цен не найден.


Пример:

if( \Bitrix\Main\Loader::includeModule("catalog") )
{
  echo \Askaron\Api\Func::getCatalogGroupIdByName( "BASE" ); // вернет 1
}

showIf

void showIf( string $text, string $value1="", string $cond="==", string $value2 = "" );

Очень мощная функция, которая позволяет выводить одни свойства страниц в зависимости от других свойств страниц.

Параметры:

$text — текст который надо выводить. Может содержать названия свойств вида ##banner_html##

$value1 — первая строка, которая участвует в сравнении. Может содержать названия свойств вида ##easy_page##

$cond — строка оператор сравнения. Может принимать значения:

  • ==
  • !=
  • <=
  • >=
  • <
  • >

$value2 — вторая строка, которая участвует в сравнении. Может содержать названия свойств вида ##easy_page##


 
Функция задает отложенную функцию, которая выведет пользователю измененный $text, если выполнено условие.

В качестве шаблонов можно использовать:
  • ##код_свойства_страницы## — код свойства страницы
  • ##page.title## — заголовок страницы 
  • ##browser.title## — заголовок окна браузера (свойство title, если задано, иначе заголовок страницы)


Примеры:

Вывести заголовок страницы, при условии, что свойство страницы easy_page==Y

<?\Askaron\Api\Func::showIf( '<h1>##page.title##</h1>', '##easy_page##', "==", "Y" );?> 


Вывести свойство страницы ##banner_html## при условии, что оно не пустое.

<?\Askaron\Api\Func::showIf(
 '<div style="text-align: center;">##banner_html##</div>',
 '##banner_html##', "!=", ""
);?> 


mail

public static function mail( $to, $subject, $message, $SITE_ID = null )
с версии 1.2.1.

Функция вызывает внутри себя функцию CEvent::Send и работает аналогично. В вернет false или ID элемента таблицы b_event. Используется почтовое событие "ASKARON_API_FUNC_MAIL", которое создано при установке модуля askaron.api.

В случае если $SITE_ID не задан, то функция использует константу SITE_ID в публичной части сайта. В административном разделе для получения $SITE_ID используется метод \Askaron\Api\Func::getDefaultSiteId()

Примеры:

<?
\Askaron\Api\Func::mail( "test@askaron.ru", "Привет мир!", "Тестовое сообщение с сайта" );
?>

Работает аналогично (для публичной части сайта):

<?
$arEventFields = array(
    "EMAIL_TO" => $to,
    "SUBJECT" => $subject,
    "MESSAGE" => $message,
);
\CEvent::Send(
    "ASKARON_API_FUNC_MAIL",
     SITE_ID,
     $arEventFields
);
?>



objectToArray

mixed  function objectToArray( $ob );


Рекурсивно обходит переменную. Все объекты заменяет на массивы с такими же ключами как у объекта.


Пример:

$arJson = \Askaron\Api\Func::objectToArray( json_decode( '{"123":1234}' ) );


sortArrayByField

Сортировка по колонке

Пример

$arTable = array(
  0 => array( "ID" => 12, "NAME" => 'q100', ),
  1 => array( "ID" => 12, "NAME" => 'q300', ),
  2 => array( "ID" => 12, "NAME" => 'q90', )
);

$arTable = \Askaron\Api\Func::sortArrayByField($arTable, "NAME", SORT_ASC);


sortArrayByFieldNatCase

Сортировка по колонке. Натуральная сортировка позволяет отсортировать более по человечески, чем обычная сортировка.


Пример

$arTable = array(
  0 => array( "ID" => 12, "NAME" => 'q100', ),
  1 => array( "ID" => 12, "NAME" => 'q300', ),
  2 => array( "ID" => 12, "NAME" => 'q90', ) 
);

$arTable = \Askaron\Api\Func::sortArrayByFieldNatCase($arTable, "NAME", SORT_ASC);

//Сортировка сохраняет ключи массива 0, 1, 2

Array (
 [2] => Array ( [ID] => 12 [NAME] => q90 )
 [0] => Array ( [ID] => 12 [NAME] => q100 )
 [1] => Array ( [ID] => 12 [NAME] => q300 )
)


Компоненты

askaron.api.html_cache

HTML-кеширование произвольного кода

Компонент ничего не умеет делать, кроме вызова шаблона внутри блока StartResultCache

if($this->StartResultCache(false, array( ($arParams["CACHE_GROUPS"]==="N"? false: $USER->GetGroups()) ) ) )
{
  $this->IncludeComponentTemplate();
}


Компонент нужен, чтобы с помощью него писать свои упрощённые компоненты - использовать шаблон в качестве компонента.

Скопируйте шаблон компонента - исправляйте как вам нравится.
.parameters.php - параметры
result_modifier.php - логика и заполнение $arResult
template.php - шаблон
component_epilog.php - некешируемые действия.

Важные параметры:
CACHE_GROUPS Y/N - Разный кеш для разных групп пользователей.
CACHE_TIME - время кеша.

CACHE_TIME - ставится маленьким, если шаблон не использует тегированный кеш
CACHE_TIME - ставится большим, если шаблон использует тегированный кеш.

По-умолчанию API инфоблоков для инфоблока 7 добавляют тег iblock_id_7 в функциях CIblock::GetList()->Fetch(), CIblockElement::GetList()->Fetch(), CIblockSection::GetList()->Fetch() и других

В других случаях теги надо добавлять в шаблон самостоятельно, либо делать период кеширования маленьким.


Вызов компонента

<?$APPLICATION->IncludeComponent(
  "askaron:askaron.api.html_cache",
  "",
  Array(
    "CACHE_GROUPS" => "N",
    "CACHE_TIME" => "36000000",
    "CACHE_TYPE" => "A",
  )
);?>

askaron.api.html_cache

askaron.api.select

Выбор варианта (сортировка, вид, количество) "askaron:askaron.api.select"

Компонент рисует <select> с вариантами выбора.

Выбор варианта
Надписи можно редактировать в настройках компонента.
 
Возвращает значение выбранного варианта. Используется на странице списка товаров для выбора количества товаров, направления сортировки и внешнего вида.

Результат запоминается в сессии при переключении значения.

Компонент обязательно вернет значение выбранного элемента.

Если ничего не выбрано и нет значения по умолчанию, то вернет значение первого варианта.




Пример:

исправляем шаблон компонента catalog. Размещаем вызов компонента над списком товаров.




<?$sort_field = $APPLICATION->IncludeComponent(
  "askaron:askaron.api.select",
  ".default",
  array(
    "COMPONENT_TEMPLATE" => ".default",
    "NAME" => "Сортировать по",
    "CODE" => "sort_field",
    "NAMES" => array(
      0 => "Популярность",
      1 => "Цена по возрастанию",
      2 => "Цена по убыванию",
    ),
    "VALUES" => array(
      0 => "rating_desc",
      1 => "price_asc",
      2 => "price_desc",
    ),
    "DEFAULT_VALUE" => "rating_desc",
    "URL_CLEAR_PARAMS" => array(
      0 => "PAGEN_1",
      1 => "PAGEN_2",
      2 => "",
    )
  ),
  false,
  array('HIDE_ICONS' => 'Y')
);?>


<?$element_count = $APPLICATION->IncludeComponent(
  "askaron:askaron.api.select",
  ".default",
  array(
    "COMPONENT_TEMPLATE" => ".default",
    "NAME" => "Показывать по",
    "CODE" => "element_count",
    "NAMES" => array(
      0 => "12",
      1 => "24",
      2 => "36",
    ),
    "VALUES" => array(
      0 => "12",
      1 => "24",
      2 => "36",
    ),
    "DEFAULT_VALUE" => "24",
    "URL_CLEAR_PARAMS" => array(
      0 => "PAGEN_1",
      1 => "PAGEN_2",
      2 => "",
    )
  ),
  false,
  array('HIDE_ICONS' => 'Y')
);?>

<?$view = $APPLICATION->IncludeComponent(
  "askaron:askaron.api.select",
  ".default",
  array(
    "COMPONENT_TEMPLATE" => ".default",
    "NAME" => "Вид",
    "CODE" => "view",
    "NAMES" => array(
      0 => "Вид плитка",
      1 => "Вид список",
    ),
    "VALUES" => array(
      0 => "tile",
      1 => "list",
    ),
    "DEFAULT_VALUE" => "list",
    "URL_CLEAR_PARAMS" => array(
      0 => "PAGEN_1",
      1 => "PAGEN_2",
      2 => "",
    )
  ),
  false,
  array('HIDE_ICONS' => 'Y')
);?>

<?
$arFieldsMap = array(
  "rating_desc" => array( "FIELD" => "PROPERTY_rating", "ORDER" => "desc,nulls" ),
  "price_asc" =>   array( "FIELD" => "CATALOG_PRICE_1", "ORDER" => "asc,nulls" ),
  "price_desc" =>   array( "FIELD" => "CATALOG_PRICE_1", "ORDER" => "desc,nulls" ),
);

$section_template = $view;
$arParams["ELEMENT_SORT_FIELD"] = $arFieldsMap[ $sort_field ]["FIELD"];
$arParams["ELEMENT_SORT_ORDER"] = $arFieldsMap[ $sort_field ]["ORDER"];
$arParams["PAGE_ELEMENT_COUNT"] = $element_count;


// выводим список товаров с установленными переменными

?>
<?$intSectionID = $APPLICATION->IncludeComponent(
  "bitrix:catalog.section",
  $section_template,
  array(
    //....
  ) 
)
?>




Быстрая авторизация

Модуль «Быстрая авторизация» добавляет на сайт сочетание клавиш Ctrl+F10, чтобы быстрее войти. Полезное решение для контент-менеджера и разработчика.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Модуль «Быстрая авторизация» добавляет на сайт сочетание клавиш Ctrl+F10, чтобы быстрее войти. Полезное решение для контент-менеджера и разработчика.

Сочетание Ctrl+F10 экономит два перехода.

Использование:
  • установите модуль,
  • выйдите,
  • откройте любую страницу сайта,
  • нажмите Ctrl+F10,
  • появится форма авторизации,
  • войдите,
  • вы вернетесь на страницу сайта сразу в режиме правки.
 
Страница решения в Маркетплейсе: 

Включаемый код

Модуль «Включаемый код» предназначен для подстановки любого PHP-кода в любое место на сайте.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

<?
if(CModule::IncludeModule("askaron.include"))

  //здесь можно использовать функции и классы модуля

?>


Описание модуля

Модуль «Включаемый код» предназначен для подстановки любого PHP-кода в любое место на сайте. 

Модуль решает проблему подстановки какого-либо кода в шаблоны компонентов с включенным кэшированием.

Можно вставлять код прямо в текст элементов инфоблоков, сообщения блогов, уроков учебных курсов и т. д.

Страница решения в Маркетплейсе: 

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.
«1С-Битрикс: Корпоративный портал» - любые редакции.

Демо-версия полностью функциональная. Срок демо-периода 30 дней.

В составе решения есть готовые примеры:
- текущая дата,
- голосование за рейтинг,
- баннер,
- текущий опрос,
- голосование
- форма обратной связи.

Другие модули могут добавлять дополнительные примеры, например, «Честное голосование»:

Живой пример внутри текста! Это не картинка, а компонент, который вставлен с помощью модуля «Включаемый код»:

(Голосов: 291, Рейтинг: 3.7)


Принцип работы:

1. В папке /bitrix/php_interface/include/askaron.include/ создайте файл file_name.php с любым содержимым.

Допускается использовать папку local: /local/php_interface/include/askaron.include/

2. В любом месте сайта напишите специальный комментарий. Допускаются пробелы, знаки табуляции и переносы строк:

<!--askaron.include
file_name.php
-->


В конце работы страницы ваш текст <!--...--> заменится на результат работы включаемого файла.

3. Начиная с версии модуля 2.0.0 этот комментарий можно не писать. Рекомендуем вызвать функцию, которая напишет этот комментарий.

<?CAskaronInclude::IncludeFile("file_name.php");?>

Функция CAskaronInclude::IncludeFile похожа на $APPLICATION->IncludeFile, но работает отложенно и может использоваться в закешированных шаблонах.


4. Вы можете вызвать включаемый файл и передать в него параметры

<?CAskaronInclude::IncludeFile(       
   "file_name.php",  
   array(  
      "IBLOCK_ID" => "3",  
      "ELEMENT_ID" => "15",  
   )  
);?>


или

<!--askaron.include 
file_name.php
<PARAMS> 
     <IBLOCK_ID>3</IBLOCK_ID> 
     <ELEMENT_ID>15</ELEMENT_ID> 
</PARAMS> 
 --> 


5. Во включаемом файле можно, размещать компоненты, подключать css- и javascript-файлы, устанавливать заголовок и свойства страницы. 

6. Выполнение включаемых файлов и подстановка результата происходит автоматически в конце работы страницы. Однако, можно использовать функции CAskaronInclude::StartBuffer() и CAskaronInclude::PrintBuffer() и вызвать включаемый файл раньше. Это бывает нужно, когда включаемый компонент работает в режиме AJAX или использует интерфейс Эрмитаж.



Инструменты отладки:

При вызове включаемого файла можно легко себя проверить, нажав кнопку на панели наверху:

Отладка. Включаемый код

При включенной отладке вы увидите, рядом с вызовом включаемого файла свой специальный комментарий и параметры, которые передаем:

Результат отладки







Допускаются пробелы, знаки табуляции и переносы строк

Пример использования включаемого кода

Хороший пример размещения компонента отзывов внутри шаблона товара.

Быстрое создание включаемого файла на основе примера

Удобной возможностью модуля являются готовые примеры включаемых файлов.

В составе решения есть готовые примеры:
- текущая дата,
- голосование за рейтинг,
- баннер,
- текущий опрос,
- голосование
- форма обратной связи.

Создать свой файл на основе примера можно из административного интерфейса:

Создание включаемого файла на основе примера

Внутри файла содержится комментарий, что это файл делает и как его подключать. Нажмите "Просмотр файла":

Простмотр файла



Создание файла на основе примера подробно описано в статье про размещение компонента «Честное голосование».


Формат для подключения включаемых файлов

Комментарий для подстановки включаемого кода позволяет указать имя файла и параметры, которые ему передаются.

Начиная с версии модуля 2.0.0 мы рекомендуем вместо специального комментария писать вызов функции CAskaronInclude::IncludeFile:

<?CAskaronInclude::IncludeFile(
  "iblock.vote.php",
  array(
    "IBLOCK_ID" => 3,
    "ELEMENT_ID" => 15
  ),
);?>


Но бывают ситуации, когда включаемый файл надо вызвать прямо внутри текста новости или в описании товара. Для этого используйте специальный HTML-комментарий, на его месте будет вызван включаемый файл.


Простой пример:

<!--askaron.include
date.php
-->


Пример с параметрами:


<!--askaron.include
iblock.vote.php
<PARAMS>
    <IBLOCK_ID>3</IBLOCK_ID>
    <ELEMENT_ID>15</ELEMENT_ID>
    <VOTE_NAMES>
        <ITEM>ужасно</ITEM>
        <ITEM>плохо</ITEM>
        <ITEM>нормально</ITEM>
        <ITEM>хорошо</ITEM>
        <ITEM>отлично</ITEM>
    </VOTE_NAMES>
</PARAMS>
-->


Общий формат:

1. заголовок <!--askaron.include
2. один или более пробельных символов (пробелы, табы, переносы строк)
3. имя файла
4. один или более пробельных символов (пробелы, табы, переносы строк)
5. любое количество любых символов
6. окончание -->

В пункте 3 имя файла не должно содержать пробелов.

В пункте 5 может содержаться XML, с основным тэгом <PARAMS>, а может не быть ничего.


Формат XML <PARAMS>:

XML содержит список параметров, которые получит включаемый файл в массиве $arParams. Главный тэг должен быть <PARAMS>

Парсер обрабатывает XML-тэги только первого уровня ключ => значение:

В качестве значения может быть или текст, или тэги <ITEM>. Список тэгов ITEM приводится к массиву.

Внутри тэга <ITEM> может быть только текст. Вложенные тэги не допускаются.

Приведенный выше пример с параметрами соответствует коду:


$APPLICATION->IncludeFile(
  "/bitrix/php_interface/include/askaron.include/iblock.vote.php",
  array(
    "IBLOCK_ID" => "3",
    "ELEMENT_ID" => "15",
    "VOTE_NAMES" => array(
      0 => "ужасно",
      1 => "плохо",
      2 => "нормально",
      3 => "хорошо",
      4 => "отлично",
    )
  )
);


Спецсимволы:

В XML используется набор спецсимволов:

<    &lt;
>    &gt;
&    &amp;
"    &quot;
'    &apos;

Спецсимволы следует заменять, когда они попадают в XML, например для подстановки баннера вместе с HTML:

<!--askaron.include
showbanner.php
<PARAMS>
    <BANNER_TYPE>LEFT</BANNER_TYPE>
    <HTML_BEFORE>&lt;div style=&quot;text-align: center;&quot;&gt;</HTML_BEFORE>
    <HTML_AFTER>&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</HTML_AFTER>
</PARAMS>
-->

Приведенный пример соответствует коду:

$APPLICATION->IncludeFile(
  "/bitrix/php_interface/include/askaron.include/showbanner.php",
  array(
    "BANNER_TYPE" => 'LEFT',
    "HTML_BEFORE" => '<div style="text-align:center;">',
    "HTML_AFTER" => '<br></div><br>',
  )
);

Автоматически заменить все спецсимволы в строке можно функцией:

function specialchars_for_xml( $str )
{
    //htmlspecialchars с параметром можно с версии php 5.4, и тогда кавычка ' будет &apos;
    //htmlspecialchars("'", ENT_HTML5);

    // традиционный способ
    $arFrom = array( "&", "\"", "'", "<", ">"   );
    $arTo = array( "&amp;", "&quot;", "&apos;", "&lt;", "&gt;"  );
    return str_replace( $arFrom, $arTo, $str );
}


Классы и функции

Принцип работы модуля:

Вы создаете включаемый файл и размещаете где-нибудь на странице специальный комментарий:

<!--askaron.include
file_name.php
-->


Модуль найдет этот текст и вызовет включаемый и файл в конце выполнения страницы. Результат выполнения включаемого файла поставится вместо вашего комментария.



Класс CAskaronInclude

Функция 
void CAskaronInclude::IncludeFile( string $file, array $arParams = array() ) 

Функция пишет на странице специальный комментарий, вместо которого потом будет подключен включаемый файл.

Функция серьезно облегчает работу по размещению комментария в тексте сайта, чтобы не писать его вручную и не вспоминать формат:

<!--askaron.include
file_name.php
-->


Имя функции и параметры специально напоминают метод $APPLICATION->IncludeFile.

Когда файл подключится, в него точно так же передается массив $arParams.

Пример:

<?CAskaronInclude::IncludeFile(       
   "file_name.php",  
   array(  
      "IBLOCK_ID" => "3",  
      "ELEMENT_ID" => "15",  
   )  
);?>

напишет на странице аналог для подстановки:

<!--askaron.include 
file_name.php
<PARAMS> 
     <IBLOCK_ID>3</IBLOCK_ID> 
     <ELEMENT_ID>15</ELEMENT_ID> 
</PARAMS> 
 -->




Функция 
void CAskaronInclude::StartBuffer() 

Начинает буферизацию вывода. Работает вместе с функцией CAskaronInclude::PrintBuffer.



Функция 
void CAskaronInclude::PrintBuffer() 

Заканчивает буферизацию вывода. Выводит содержимое на экран. При этом содержимое разбирает и вызывает включаемые файлы в нужных местах (где был специальный комментарий или вызывалась CAskaronSettings::IncludeFile).

Функцию следует использовать, если надо сразу вывести включаемые файлы и не дожидаться событий окончания страницы.

События окончания страницы срабатывают всегда, но иногда происходят ошибки. Ошибки могут быть при подключении включаемых компонентов в режиме AJAX  ("AJAX_MODE" => "Y"), или при выводе кнопок интерфейса эрмитаж.

Если на странице сразу вызвать CAskaronInclude::StartBuffer() и CAskaronInclude::PrintBuffer() отложенные функции Битрикса сработают, как надо.



Безопасность

При проектировании модуля «Включаемый код» особенное внимание было уделено безопасности.


Описание проблемы

Принцип работы модуля прост. В конце работы страницы происходит замена специальных комментариев на содержимое включаемых файлов.

Необходимо было сделать так, чтобы пользователь сайта не мог написать подобный комментарий и выполнить код с произвольными параметрами.


Меры безопасности

1. Замена комментариев происходит только в публичной части сайта. На страницах в папке /bitrix/ не работает.

В версии 1.1.0 сделано исключение для двух папок: теперь в папках /bitrix/templates/ и /bitrix/components/ можно создавать странички, в которых будет подставляться включаемый код. Сделано так, потому что некоторые пользователи использовали ajax и файлы складывали в папки шаблонов.

2. Нельзя подключать произвольный файл "/путь/имя файла". Включаемый файл можно создавать только в определенной папке.

3. Вместо текста для подстановки вида #COMMENT# используется комментарий вида <!--askaron.include ... -->. Комментарии со спецсимволами < и > более надежны, пользователь не имеет возможности эти символы писать. При выводе страницы происходит замена &lt; и &gt;.

Замечание:
Стандартные компоненты заменяют спецсимволы при выводе любого текста (например, имя пользователя). Но неопытный разработчик сайта может такую уязвимость допустить, и кто-то сможет написать HTML-код.

4. Комментарий вида <!--askaron.include ... --> имеет еще одну очень важную особенность. Его не индексирует встроенный модуль поиска Битрикса. Было бы очень нехорошо, если на странице поиска выводились бы комментарии для включаемого кода.

5. При ошибках в разработке нет 100% гарантии что пользователь не сможет написать комментарий <!--askaron.include ... -->, поэтому было принято решение в целях безопасности вообще отказаться от предустановленных включаемых файлов.

Комментарий в простейшем случае выглядит так:
<--askaron.include
имя файла
-->

Разработчик каждого конкретного сайта сам создает включаемый файл и сам придумывает для него имя. Это дает 100% гарантию, что никто не может выполнить включаемый код в неположенном месте.

6. Вместо предустановленных включаемых файлов есть примеры включаемых файлов.

Дата - создать включаемый файл

При создании включаемого файла на основе примера генерируется случайное имя.

Дата - включаемый файл

Имя файла date__ff8jhttu.php получается не очень красивым, но абсолютно безопасным.

Дата - включаемый файл - код.png

В тексте включаемого файла автоматически заменяется текст для комментария.

<!--askaron.include
date__ff8jhttu.php
-->


Остается его скопировать и использовать на сайте.

Включаемый код и композит

Модуль «Включаемый код» хорошо работает на композитных сайтах.

Обычно, если во включаемом файле контент для разных пользователей одинаковый, то делать дополнительно ничего не надо. Но возникает вопрос, что делать, если во включаемом файле разный контент.



Модуль «Включаемый код» выводит результат включаемого файла в нужном месте страницы.

Но вызов включаемого файла происходит в конце работы страницы или если вы вручную делаете CAskaronInclude::PrintBuffer()
 
Поэтому методы создания динамичных областей для шаблонов компонентов не подойдут. Надо использовать методы для создания динамичных областей для шаблона сайта.

Правила композита для включаемого файла совершенно аналогичные, как в обычных включаемых файлах вызванных в шаблоне сайта.

<?
$frame = new \Bitrix\Main\Page\FrameHelper("my_hidden_text");
$frame->begin();
?>

<?global $USER?>
<?if ( $USER->IsAuthorized() ):?>

  текст для авторизованных

<?else:?>

  текст для неавторизованных

<?endif?>

<?
//$frame->setAnimation(true);
$frame->end();
?>



Пример: вставка включаемого кода с разграничением прав.


Вопросы и ответы

Работал месяц. Сейчас не отображается

Приобрели ваш модуль "Включаемый код", поставили на сайт.
Работал с месяц, сейчас не отображается на сайте.
Можете посмотреть что случилось?
Что для этого нужно?


Срок демо-периода 30 дней.

Если демо-период закончился, то на странице со списком включаемых файлов (ваш_сайт/bitrix/admin/askaron_include_file_admin.php?lang=ru) и на странице примеров включаемых файлов (ваш_сайт/bitrix/admin/askaron_include_file_sample_admin.php?lang=ru) наверху написано сообщение о том, что срок истек.

Возможно, вы приобрели ключ, но не ввели его. Ключ вводится на странице «Система обновлений сторонних решений» (ваш_сайт/bitrix/admin/update_system_partner.php?lang=ru) на вкладке «Активация купона».

Если ключ введен правильно и проблем с активацией нет, пришлите нам:
- адрес сайта,
- логин администратора
- пароль администратора
- страницу, где вы наблюдаете ошибку
- ваш номер телефона или скайп для быстрой связи с вами, если будут вопросы.

Мы посмотрим в чем проблема.

Вставка с разграничением прав доступа

Возможна ли вставка кода с разграничением прав доступа. Чтобы его содержание могли видеть авторизованные пользователи, а другим предлагалось бы войти на сайт?

Что делать, если сайт композитный?


Да, возможно. Очень просто.

Живой пример внутри текста! Это не картинка, а контент, который вставлен с помощью модуля «Включаемый код»:

— Как отпроситься с работы, если уже переболел всеми известными медицине болезнями?
— ...

Чтобы узнать ответ, авторизуйтесь.

Логин:
Пароль:
Регистрация
Забыли свой пароль?
Войти как пользователь:
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:

Создайте включаемый файл, например, hidden_text.php с таким содержимым:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?global $USER?>

<?if ( $USER->IsAuthorized() ):?>

    <p>&mdash; Как отпроситься с работы, если уже переболел всеми известными медицине болезнями?<br />
    &mdash; Женись. Получишь три дня выходных.</p>

<?else:?>

    <p>&mdash; Как отпроситься с работы, если уже переболел всеми известными медицине болезнями?<br />
    &mdash; ...</p>
   
    <p>Чтобы узнать ответ, авторизуйтесь.</p>
       
    <?$APPLICATION->IncludeComponent(
        "bitrix:system.auth.form",
        "",
        Array(
            "REGISTER_URL" => "",
            "FORGOT_PASSWORD_URL" => "/auth/",
            "PROFILE_URL" => "",
            "SHOW_ERRORS" => "N"
        )
    );?>

<?endif?>



Сохраните файл в папке включаемых файлов /bitrix/php_interface/include/askaron.include/ .

Напишите на странице

<?CAskaronInclude::IncludeFile("hidden_text.php");?>

или специальный комментарий в тексте новости:

<!--askaron.include
hidden_text.php
-->

В этом месте появится содержимое включаемого файла в зависимости от текущего пользователя.



Что делать если сайт композитный?

На композитных сайтах разработчик должен везде на сайте отметить динамичные области. Включаемый код - не исключение. Надо обозначить область:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$frame = new \Bitrix\Main\Page\FrameHelper("my_hidden_text");
$frame->begin();
?>

<?global $USER?>

<?if ( $USER->IsAuthorized() ):?>

    <p>&mdash; Как отпроситься с работы, если уже переболел всеми известными медицине болезнями?<br />
    &mdash; Женись. Получишь три дня выходных.</p>

<?else:?>

    <p>&mdash; Как отпроситься с работы, если уже переболел всеми известными медицине болезнями?<br />
    &mdash; ...</p>
 
    <p>Чтобы узнать ответ, авторизуйтесь.</p>
     
    <?$APPLICATION->IncludeComponent(
        "bitrix:system.auth.form",
        "",
        Array(
            "REGISTER_URL" => "",
            "FORGOT_PASSWORD_URL" => "/auth/",
            "PROFILE_URL" => "",
            "SHOW_ERRORS" => "N"
        )
    );?>

<?endif?>

<?
//$frame->setAnimation(true);
$frame->end();
?>



Стандартные примеры включаемых файлов

Текущая дата date.php

Простейший пример включаемого файла.

Файл показывает текущую дату в формате сайта, вызывается без параметров.

Голосование за рейтинг rating.vote.php

Пример включаемого файла, который показывает компонент голосования за рейтинг bitrix:rating.vote. 

Баннер showbanner.php

Пример включаемого файла, который показывает баннер.

Создайте на основе готового включаемого файла новый. Или напишите такой код в файле

/bitrix/php_interface/include/askaron.include/my_showbanner.php

Содержимое файла:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if(CModule::IncludeModule("advertising"))
{
    echo CAdvBanner::Show($arParams["BANNER_TYPE"], $arParams["HTML_BEFORE"], $arParams["HTML_AFTER"]);
}
?>


Наиболее простой способ подключить файл - вставьте в любое место сайта код:

CAskaronInclude::IncludeFile(
    "my_showbanner.php",
    array(
        "BANNER_TYPE" => "LEFT", // тип баннера
        "HTML_BEFORE" => '<div style="text-align:center;">', // перед баннером
        "HTML_AFTER" => '</div><br><br>', // после баннера
    )
);

Есть альтернативный способ, если вы вставляете баннер в текст новости.

<!--askaron.include
showbanner.php
<PARAMS>
    <BANNER_TYPE>LEFT</BANNER_TYPE>
    <HTML_BEFORE></HTML_BEFORE>
    <HTML_AFTER></HTML_AFTER>
</PARAMS>
-->


Если все-таки надо передать теги, то учитывайте, что надо экранировать спецсимволы XML:

Замена спец символов для XML
<       &lt;
>       &gt;
&       &amp;
"       &quot;
'       &apos;


<!--askaron.include
showbanner.php
<PARAMS>
    <BANNER_TYPE>LEFT</BANNER_TYPE>
    <HTML_BEFORE>&lt;div style=&quot;text-align: center;&quot;&gt;</HTML_BEFORE>
    <HTML_AFTER>&lt;/div&gt;&lt;br&gt;&lt;br&gt;</HTML_AFTER>
</PARAMS>
-->





Голосование (стандартное) iblock.vote.php

Пример включаемого файла, который показывает обычный компонент голосования на инфоблоках bitrix:iblock.vote.

Создайте свой включаемый файл на основе примера, и подключите его на странице.

Все шаги делаются аналогично, как для компонента «Честное голосование».

«Честное голосование» в отличие от обычного голосования умеет проверять пользователя по IP и ID. Защищает ваше голосование от накруток.

Текущий опрос voting.current.php

Пример включаемого файла, который выводит компонент «Текущий опрос» (bitrix:voting.current). Для работы этого примера требуется установленный модуль опросов (Редакция «Стандарт» и выше).

Форма обратной связи

Пример включаемого файла, который показывает компонент Форму обратной связи (bitrix:main.feedback).

Форму обратной связи можно вставить прямо в описание товара или в любой шаблон:

<!--askaron.include
main.feedback__rra1touf.php
-->

Создайте свой включаемый файл на основе примера:

Создание включаемого файла на основе примера. Форма обратной связи


Новый файл появится в папке включаемых файлов со случайным именем.

Новый включаемый файл. Форма обратной связи
Подключите новый файл на странице.

Напишите, где-нибудь на сайте такой текст:



Форма будет выводиться везде, где будет вставлен этот текст.





Дополнительные примеры включаемых файлов

Создание собственных примеров

Примеры позволяют быстро создавать однотипные включаемые файлы. Подсказки, которые находятся в тексте примера, помогают легко размещать включаемый код на странице.

Примеры может создавать администратор сайта или другие модули. Например, модуль «Честное голосование» создает свой пример, чтобы было удобно размещать компонент.

Чтобы сделать пример, необходимо создать файл с любым именем в папке /bitrix/php_interface/include/askaron.include/samples/.

Имена файлов у разных разработчиков не должны повторяться, поэтому если вы пишите модуль, то рекомендуется начинать имя файла с кода модуля. Например, для «Честного голосования» (askaron.ibvote) имя файла askaron.ibvote.iblock.vote.php.

В стандартных примерах включаемых файлов есть подробные комментарии. Примерное содержимое:
  • заголовок: <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
  • комментарий, в котором ссылка на документацию и подсказки с текстом для подстановки
  • код, который необходимо подставить.

Пример, файл date.php:


<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/*
Текущая дата

Документация http://askaron.ru/api_help/course1/lesson16/

Напишите этот код:

CAskaronInclude::IncludeFile( "date.php" );

Или разместите этот текст в любом месте сайта:

<!--askaron.include
date.php
-->

*/
?><?=ConvertTimeStamp();?>


Пример «Честное голосование» askaron.ibvote.iblock.vote.php

«Честное голосование» — это первый модуль, который интегрирован с модулем «Включаемый код».

При установке модуля «Честное голосование» в папке дополнительных примеров включаемых файлов /bitrix/php_interface/include/askaron.include/samples/ создается пример askaron.ibvote.iblock.vote.php.

Размещение компонента «Честное голосование» на основе примера подробно описано в документации по модулю «Честное голосование».

Город по IP, определение местоположения для доставки

Модуль «Город по IP, определение местоположения для доставки» находит город по IP и устанавливает местоположение на странице оформления заказа.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

<?
if(\Bitrix\Main\Loader::includeModule("askaron.geo"))

  //здесь можно использовать функции и классы модуля

?>


Описание модуля

Модуль «Город по IP, определение местоположения для доставки», определяет город по IP-адресу пользователя и устанавливает нужное местоположение в форме заказа.


Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.geo/

Работает на: 
«1С-Битрикс: Управление сайтом»:
— Малый Бизнес,
— Бизнес.
«Битрикс24 из коробки» - любые редакции.


Возможности:

- модуль устанавливается вместе с базой IP-адресов,
- модуль быстро узнает город, к сторонним сервисам не обращается, не замедляет работу сайта,
- используется производительная база Sypex Geo,
- модуль понимает IP-адрес с учетом прокси-серверов, корректно определяет адрес в случае Opera Turbo и Яндекс Турбо,
- отдельные настройки модуля для разных сайтов при многосайтовости,
- возможно указать город по умолчанию, если не удается определить,
- в форме заказа автоматически подставляется найденное по IP местоположение


Установка модуля: 

Модуль устанавливается из маркетплейса, как и любые другие модули. Никаких вопросов не задает.

Для работы решения необходим модуль "Интернет-магазин".

Для правильной работы модуля необходимы местоположения 2.0.

Местоположения в Битриксе должны быть. У городов должны быть заполнены названия на русском языке. Можете стандартным битриксовским мастером загрузки местоположений загрузить сразу все города России и СНГ или весь мир.


Настройка модуля: 

После установки модуля перейдите на страницу настроек: 
Настройки → Настройки продукта → Настройки модулей → Город по IP, определение местоположения для доставки


Настройки модуля

Настройки модуля:



Страница настроек


Проверка:

Нажмите «Получить местоположение» модуль найдет город и по городу определит местоположение.


Проверка



API

С помощью API вы можете повлиять на IP-адрес пользователя, узнать город и получить местоположение.

Основные методы:

array \Askaron\Geo\Location::getLocation( $site_id = SITE_ID );

Метод возвращает местоположение.

Для правильной работы нужны Местоположения 2.0! Доступны с версии Битрикса 14.5.

Местоположение запоминается в сессии и куках. Повторно к базе IP адресов не обращаемся. Можете вызывать getLocation() много раз.

Необязательный параметр ID сайта. По умолчанию текущий сайт.

Функция возвращает массив, описывающий местоположение.

Если местоположение не найдено, и в настройках модуля не указан город по умолчанию, то возвращает пустой массив.

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  $arLocation = \Askaron\Geo\Location::getLocation();
}


Результат:

Array
(
  [ID] => 218
  [CODE] => 0000073738
  [NAME_RU] => Москва

  [PARENT_ID] => 4
  [COUNTRY_ID] => 1
  [REGION_ID] => 3
)




bool \Askaron\Geo\Location::setLocationById( $id, $site_id = SITE_ID )

Метод устанавливает местоположение.

$id — ID местоположения
$site_id - необязательный параметр. По умолчанию текущий сайт.

Старайтесь устанавливать местоположение из списка разрешенных местоположений для сайта ( http://ваш_сайт/bitrix/admin/sale_location_zone_list.php?lang=ru )

Возвращает true, если такое местоположение найдено и установлено. Иначе false.

Пример:

Метод можно использовать при переключении города в списке городов в шапке сайта:

<?
if ( \Bitrix\Main\Loader::includeModule("askaron.geo") )
{
    if ( $_REQUEST["mycity"] > 0 )
    {
        \Askaron\Geo\Location::setLocationById( $_REQUEST["mycity"] );
    }

    $arLocation = \Askaron\Geo\Location::getLocation();

    echo "Ваш город ".$arLocation["NAME_RU"];
}
?>





string \Askaron\Geo\Info::getIp();

Возвращает текущий IP-адрес.

В абсолютном большинстве случаев адрес вычисляется корректно. Но из-за особенностей настроек хостинга в редких случаях вам может потребоваться функция setIp.


void \Askaron\Geo\Info::setIp( string $ip );

Используется для установки пользователю IP-адреса.

На редких хостингах администраторы прячут сайт за какими-то прокси серверами и определение адреса становится нестандартным.

Если у вас такой нестандартный случай можете попробовать установить IP в начале работы страницы.

Допустим, ваш системный администратор записывает адрес пользователя в переменную $_SERVER['HTTP_X_REAL_IP']

файл /bitrix/php_interface/init.php:

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
  \Askaron\Geo\Info::setIp( $_SERVER['HTTP_X_REAL_IP'] );
}


array \Askaron\Geo\Info::getSxGeoCityFull();
 
Получает город из базы Sypex Geo по IP. Результат запоминается в статическом кеше на хите. Можете вызывать getSxGeoCityFull() много раз на странице.

!!! Если надо вывести город или регион, то рекомендуем использовать \Askaron\Geo\Location::getLocation(). Это уже посчитанное готовое местоположение из сессии с учетом местоположения по умолчанию.

getSxGeoCityFull() возвращает массив описывающий город в базе по IP. В случае, если город не может быть найден, возвращает пустой массив.

if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
     $arCity = \Askaron\Geo\Info::getSxGeoCityFull();
}


Результат:

Array
(
    [city] => Array
        (
            [id] => 501175
            [lat] => 47.23135
            [lon] => 39.72328
            [name_ru] => Ростов-на-Дону
            [name_en] => Rostov-na-Donu
        )

    [region] => Array
        (
            [id] => 501165
            [name_ru] => Ростовская область
            [name_en] => Rostovskaya Oblast'
            [iso] => RU-ROS
        )

    [country] => Array
        (
            [id] => 185
            [iso] => RU
            [lat] => 60
            [lon] => 100
            [name_ru] => Россия
            [name_en] => Russia
        )

)






Как обновить базу городов

Обновление базы городов в нашем модуле не предусмотрено.

Время от времени мы обновляем свой модуль и обновляем в нём базу городов.

Пока авторы базы городов свой формат не меняют, можете смело обновлять города самостоятельно.



1. Переименуйте файл:

/bitrix/modules/askaron.geo/SxGeoCity.dat в /bitrix/modules/askaron.geo/old_SxGeoCity.dat

2. Скачайте базу городов Sypex Geo в кодировке 1251, распакуйте архив и замените файл /bitrix/modules/askaron.geo/SxGeoCity.dat


Sypex Geo - скачать городо по IP

Пример. Вывести данные в зависимости от города

Простой пример:

Код, который получает значение местоположения и выводит соответствующий телефон. Такой код можно разместить где угодно.

<?
$arLocation = array();
if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
    $arLocation = \Askaron\Geo\Location::getLocation();
}
?>

<?if ( $arLocation["NAME_RU"] == "Москва" ):?>

    8 (495) 111 11 11

<?elseif ( $arLocation["NAME_RU"] == "Санкт-Петербург" ):?>

    8 (812) 222 22 22

<?else:?>

    8 800 333 33 33

<?endif?>




Пример с включаемым файлом:

То же самое, только мы должны дать возможность пользователю редактировать телефоны, сделаем ему включаемую область:

1. Создать файл /include/telephone.php (такой файл уже существует в стандартном решении "Современный интернет-магазин")

2. Содержимое файла:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?
$arLocation = array();
if (\Bitrix\Main\Loader::includeModule("askaron.geo") )
{
    $arLocation = \Askaron\Geo\Location::getLocation();
}
?>

<?if ( $arLocation["NAME_RU"] == "Москва" ):?>

    8 (495) 111 11 11

<?elseif ( $arLocation["NAME_RU"] == "Санкт-Петербург" ):?>

    8 (812) 222 22 22

<?else:?>

    8 800 333 33 33

<?endif?>


3. Подключить файл в шаблоне:


<?
$APPLICATION->IncludeFile(
    SITE_DIR."include/telephone.php",
    array(),
    array( "MODE" => "php" )
);
?>


4. Проверить разные IP можно на странице проверки. Попробуйте написать там разные адреса. Свой и другие:

77.88.55.77 - IP Яндекса, установит нам город Москва.

Получить местоположение Яндекса




График отпусков

Дополнительные пользовательские поля. Аскарон

Модуль «Дополнительные пользовательские поля. Аскарон» добавляет новые пользовательские типы пользовательских полей.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.fields/

Статья
Бесплатный модуль «Дополнительные пользовательские поля. Аскарон»


Работает на:

- «1С-Битрикс: Управление сайтом» - любые редакции
- «1С-Битрикс: Битрикса 24 в  коробке» - любые редакции.


Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:


if(\Bitrix\Main\Loader::includeModule("askaron.fields"))
{
  //здесь можно использовать функции и классы модуля
}




Новые типы пользовательских полей

- Привязка к типу цен по ID (askaron.fields)
- Привязка к складу по ID (askaron.fields)
- Привязка к группе пользователей по ID (askaron.fields)
- Привязка к инфоблоку по ID (askaron.fields)

Дополнительные пользовательские типы полей работают на базе простого типа «Целое число».

Описание

Новые пользовательские поля

- Привязка к типу цен по ID (askaron.fields)
- Привязка к складу по ID (askaron.fields)
- Привязка к группе пользователей по ID (askaron.fields)
- Привязка к инфоблоку по ID (askaron.fields)

Дополнительные пользовательские поля работают на базе простого типа «Целое число».

Screenshot_3.jpg

Для правильной работы свойств привязки к типу цен и привязки к складу нужен модуль Торговый каталог.

Свойства удобно изменять в административной части.

Свойства красиво выглядят в фильтре:


Screenshot_1.jpg


  По [ID] можно сразу перейти по ссылке на интересующий нас объект:

Screenshot_2.jpg

Дополнительные свойства инфоблоков. Аскарон

Модуль «Дополнительные свойства инфоблоков. Аскарон» добавляет в инфоблоки новые пользовательские типы свойств.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.prop/

Статья
Бесплатный модуль «Дополнительные свойства инфоблока. Аскарон»



Работает на:

- «1С-Битрикс: Управление сайтом» - любые редакции
- «1С-Битрикс: Битрикса 24 в  коробке» - любые редакции.


Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:


if(\Bitrix\Main\Loader::includeModule("askaron.prop"))
{
  //здесь можно использовать функции и классы модуля
}

Описание



Новые пользовательские типы свойств инфоблоков:

- Привязка к типу цен по ID (askaron.prop)
- Привязка к складу по ID (askaron.prop)
- Привязка к группе пользователей по ID (askaron.prop)
- Привязка к инфоблоку по ID (askaron.prop)
- Привязка к свойству инфоблока по ID (askaron.prop)
- Привязка по ID к варианту значения для свойства типа список (askaron.prop)

Дополнительные свойства работают на базе простого типа «Число» ("N").






Свойства удобно изменять в административной части.





Свойства красиво выглядят в фильтре:



с версии 1.0.8 Доступны еще 2 свойства:
1. Привязка к группе пользователей по ID



2. Привязка к инфоблоку по ID






Журнал изменений товаров

Модуль позволяет вести учёт изменений элементов инфоблоков, параметров товаров, значений цен и остатков на складах.

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.productlog/ 

Статья:
Журнал изменений товаров — боремся с «воровством» на складе

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.
«Битрикс24 из коробки» - любые редакции.


Модуль работает с любыми инфоблоками.

Основное предназначение модуля — контроль за изменением товаров.

Очень частая задача — разобраться почему у товара сейчас такое количество товара. Журнал позволяет выяснить, какое количество установил обмен с 1С, какое количество устанавливают пользователи, как срабатывает резервирование, и, когда срабатывает отмена резерва.

Описание модуля

Модуль позволяет вести учёт изменений элементов инфоблоков, параметров товаров, значений цен и остатков на складах.

Модуль следит за созданием, изменением и удалением:
  • наименование 
  • краткое описание 
  • подробное описание 
  • символьный код 
  • активность 
  • доступное количество 
  • количество в резерве 
  • цены 
  • НДС 
  • закупочная цена 
  • остатки по складам
  • детальная картинка и картинка для анонса
  • разделы элемента
Модуль записывает кем и когда были произведены изменения.

Модуль записывает порядок вызовов функций для разработчиков, чтобы можно было понять какой именно код привёл к изменению товара.

Модуль позволяет из карточки товара быстро перейти к просмотру изменений.  

Модуль записывает только реальные изменения товара.

Модуль позволяет следить за сроком и размером хранимых изменений.

Модуль очень прост в использовании: после установки перейдите в настройки модуля Сервис->Журнал изменений товаров->Настройки модуля.

В настройках отметьте те инфоблоки за которыми вы хотели бы следить, а также параметры изменения которых нужно фиксировать

Настройки модуля

Просмотреть результат работы модуля можно прямо из карточки товара

Карточка товара

На вкладке "Журнал изменений" отображаются последний изменения товара. Количество выводимых изменений устанавливается в настройках модуля.
Если в настройках установлен 0 или изменений не было, то таблица выводиться не будет.
Здесь же расположена ссылка по которой можно перейти на просмотр полного журнала изменений.

Новая карточка товара

Также перейти к просмотру всех изменений по элементу можно из контекстного меню в списке элементов.

Контекстное меню

Либо из Сервисы->Журнал изменений товаров

Таблица

Результат можно отфильтровать по интересующему вас элементу либо по пользователю.


Завершение регистрации

Модуль «Завершение регистрации» выводит пользователю форму завершения регистрации в случае, если не все поля профиля заполнены корректно. Список полей гибко настраивается.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.finishreg/.

Статьи

Модуль «Завершение регистрации». Часть 1. Главная идея

Модуль «Завершение регистрации». Часть 2. Исправляем недостатки входа через социальные сервисы
 
Модуль «Завершение регистрации». Часть 3. Зачем нужен? Сценарии использования


Работает на: 
- «1С-Битрикс: Управление сайтом» - любые редакции, 
- «1С-Битрикс: Корпоративный портал» - любые редакции. 

Версия Главного модуля должна быть не ниже 12.0.0.


Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Теперь на вашем сайте у всех пользователей будут правильно заполнены поля: фамилия, имя, отчество, телефон, e-mail и т. д. Даже, если пользователи зашли через соцсервисы.

Например, пользователь может зайти через Живой Журнал, и у него не окажется имени, фамилии, телефона и адреса электронной почты.

Пользователь Живого Журнала

Такой пользователь может оставить комментарий на форуме, но не получит ответ по электронной почте. Его нельзя автоматически подписать на рассылку.

Модуль добавляет в корень сайта страницу завершения регистрации. По умолчанию finishreg.php. При установке модуля можно выбрать другое имя.

После авторизации пользователя, если у него что-то неправильно в профиле, он будет переключен  на страницу завершения регистрации.


Шаблон estore


На странице finishreg.php размещен компонент «Завершение регистрации» (askaron:askaron.finishreg).  

Настройки компонента

 
Список полей для завершения регистрации гибко настраивается в административном разделе.

Список полей

Строковые поля (Имя, Фамилия, Телефон и другие) могут проверяться на корректность регулярным выражением.

Для поля EMAIL можно потребовать подтверждение (в случае, если пользователь зашел через соцсервисы).



Установка модуля

Устанавливается также, как и другие партнерские модули.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.finishreg/.

Работает на:
- «1С-Битрикс: Управление сайтом» - любые редакции,
- «1С-Битрикс: Корпоративный портал» - любые редакции.

Версия Главного модуля не ниже 12.0.0.


Модуль добавляет в корень сайта страницу завершения регистрации. По умолчанию finishreg.php. Обычно при установке модуля можно просто нажать Далее.

Установка


Назначение опций:

Название Значение
Копировать файл публичной части сайта (страница «Завершение регистрации»)  Опция позволяет скопировать страницу, на которой размещён компонент «Завершение регистрации». Файл копируется в корень сайта с именем указанным в поле Страница «Завершение регистрации». На эту страницу будут перенаправляться пользователи, у которых имеются незаполненные поля.
Заменить файл если он уже существует» если файл Заменить страницу «Завершение регистрации» указанную в поле Страница «Завершение регистрации».
Страница «Завершение регистрации» Имя страницы «Завершение регистрации» в корне сайта.

В случае многосайтовости страница «Завершение регистрации» будет установлена во все сайты

Удаление модуля

При удалении модуля есть выбор сохранить настройки связанные с модулем или удалить:

Удаление

Опция Описание Значение по умолчанию
Удалить страницу «Завершение регистрации»: finishreg.php Удалить страницу  «Завершение регистрации». Удаляет страницу указанную в опция модуля.  Не задано
Удалить настройки Удаление файла настроек. Не задано
Удалить почтовые события Удаление почтовых событий и шаблонов предназначенных для отправки пользователю кода подтверждения E-Mail.  Не задано

Удаление пользовательских свойств пользователя которые создаются автоматически при установки модуля.

E-Mail пользователя подтвержден. 

E-Mail. 

Не задано

Поля для завершения регистрации

Сервисы -> Завершение регистрации -> Поля для завершения регистрации


Список правил для проверки полей профиля пользователя:

Список полей



Основные опции для полей всех типов:

Настройки для поля EMAIL


Опция Описание Значение по умолчанию
Сайт Сайт, для которого будет работать правило.

Выбирайте значение Для всех сайтов, если на лицензии 1С-Битрикс только один сайт, или для всех сайтов настройки одинаковые.             

Если для какого-то сайта настройки отличаются, то укажите правило для этого сайта.

Например, если созданы два правила, одно из которых Для всех сайтов, а другое для сайта s1, то на сайте s1 работать будет работать правило для сайта s1.
Для всех сайтов
Код поля Код поля в профиле пользователя, которое будет проверяться.  Код поля
Активность Активность правила.
Активно
Название Название поля, которое будет выводится на странице завершения регистрации    Название поля
Сортировка Сортировка. Порядок вывода поля на странице завершения регистрации.  100
Подсказка(HTML) Текст подсказки в формате HTML, который будет выводится рядом с полем.  Не задано
Обязательное Если данная опция выбрана, то от пользователя будет требоваться заполнение данного поля.

В случае если данная опция не выбрана, то данное поле будет выводится на странице завершения регистрации, однако её заполнение будет необязательным
Не задано
Проверять на странице профиля Проверять корректность заполнения данного поля на странице пользователя. Да
Запрашивать подтверждение по E-mail для пользователей зарегистрировавшихся через социальные сервисыТолько для E-Mail и только для пользователей зарегистрировавшихся через социальные сервисы .  В случае если выбрана данная опция, то после того как пользователь заполнил e-mail и все остальные требуемые поля ему будет выслано письмо с кодом подтверждения E-Mail .  Не задано



Дополнительные опции для поля EMAIL:

Настройки для поля EMAIL

ОпцияОписаниеЗначение по умолчанию
Запрашивать подтверждение по E-mail для пользователей зарегистрировавшихся через социальные сервисыЕсли выбрана данная опция, то после того как пользователь заполнил E-Mail и все остальные требуемые поля, ему будет выслано письмо с кодом подтверждения E-Mail. 

Работает только для пользователей, которые зашли через соцсервисы.
Не задано

Подтверждение Email



Дополнительные опции для строковых полей:

Фамилия, Имя, Отчество, Телефон, Город имеют одинаковые дополнительные опции:

Настройки для поля PERSONAL_PHONE


Опция Описание Значение по умолчанию
Регулярное выражение Регулярное выражение для проверки строки.
Не задано


Примечание:

Опции "Сайт" и "Код поля" задаются только один раз при создании правила для поля. Для одной пары "Сайт"-"Код поля" не может быть создано больше одного правила.  

Компонент «Завершение регистрации»

Настройки компонента

Опция Описание Значение по умолчанию
Шаблон компонента

Выбор шаблона компонента. Вместе с модулем идут два шаблона компонента:

.default - шаблон по умолчанию с прямоугольными полями.

eshop - шаблон для современного интернет-магазина со скругленными углами полей.

.default
Надпись на кнопке Надпись на кнопке отправки значений полей. Отправить
Устанавливать заголовок страницы Устанавливает заголовок страницы «Завершение регистрации»Устанавливать


Шаблон компонента .default

component_2.png



Шаблон компонента eshop

Шаблон estore

Настройка параметров модуля

Настройки:

Настройки->Настройка продукта->Настройка модулей->Завершение регистрации

Опции

Опция Описание Значение по умолчанию
Страница «Завершение регистрации» в корне сайта Страница, на которую будет перенаправлен пользователь в случае, если у него имеются некорректно заполненные поля. finishreg.php
Маска исключения Маска страниц, на которых не действует модуль «Завершение регистрации».

Список страниц через точку с запятой. Можно использовать символ *
/ajax/*;/frames/*;/bitrix/*


Клиент веб-сервиса 1С

Описание модуля

Контроль доступа по IP

Описание модуля

Модуль позволяет Разрешить авторизацию только с определенных IP. Можно сделать, чтобы ваши сотрудники могли заходить в Битрикс24 только из офиса, или 1С обменивалась только с одного адреса.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.accessip/


Работает на: 
- «1С-Битрикс: Управление сайтом» - любые редакции
- «Битрикс24 в коробке» - любые редакции. 


Смотрите обработчик authip - Разрешить авторизацию только с определенных IP




Разработчикам: 

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

if(\Bitrix\Main\Loader::includeModule("askaron.accessip"))

  //здесь можно использовать функции и классы модуля 


Модуль содержит набор обработчиков данных. Обработчики данных - это мини-модули.

Основной обработчик: authip - Разрешить авторизацию только с определенных IP




Обработчики данных

authip - Разрешить авторизацию только с определенных IP
demo1 - Демо. Демонстрационный обработчик для разработчиков

Сердце модуля - страница установленных обработчиков данных. Вы можете свободно устанавливать и удалять обработчики, которые вам нужны. Один и тот же обработчик данных можно установить несколько раз с разными параметрами.


Подробнее про обработчики данных

Обработчики данных представляют собой что-то вроде маленьких модулей для Битрикса.

Термина «Обработчик данных» в Битриксе нет. Мы его придумали специально для этого модуля.

В Битриксе есть обработчики событий, обработчики платёжных систем, обработчики служб доставки и т. п.

Обработчики данных содержат действия, которые надо выполнить при наступлении определенных событий Битрикса. Например, когда что-то выгружается из 1С и записывается на сайте.

У обработчиков данных есть свои страницы настроек.

Один обработчик данных может быть установлен в системе несколько раз с разными настройками.

Стандартные обработчики данных лежат в папке модуля.

Пользовательские обработчики данных могут лежать в папках

/bitrix/php_interface/include/askaron.accessip/ 
/local/php_interface/include/askaron.accessip/

С помощью модуля можно делать не только обработчики данных для обмена с 1С. Можно решать совершенно любые задачи, для которых применяются обработчики событий Битрикса. Модуль позволяет использовать ваши собственные обработчики событий в красивом интерфейсе.

В отличие от модулей Битрикса наши обработчики данных можно устанавливать несколько раз с разными параметрами.


Структура обработчика данных

Наши обработчики данных состоят из раздела, в котором 2 обязательных файла: .description.php и handler.php:

.description.php содержит массив с описанием модуля
handler.php содержит функции обработчиков событий.

Еще может быть один необязательный файл .parameters.php

.parameters.php аналогичен файлу .parameters.php для компонентов. Нужен для задания списка параметров на странице настроек обработчика данных.



authip - Разрешить авторизацию только с определенных IP

Обработчик позволяет ходить только с разрешённых адресов авторизованным пользователям. Запрет IP для ботов - это совсем другая задача. Для запрета IP от ботов есть стоп-лист в модуле «Проактивная защита».

Внимание! Данный обработчик запрещает просматривать сайт только авторизованным пользователям. Неавторизованные пользователи и боты могут свободно на сайт заходить. В Битрикс24 они будут видеть обычную форму авторизации.

Можно сделать, чтобы ваши сотрудники могли заходить в Битрикс24 только из офиса. Укажите IP-адреса и группы пользователей, на кого распространяются правила.

Можно сделать, чтобы 1С могла заходить на сайт с определенного адреса для безопасности.

Что если я заблокирую сам себя?

Себя заблокировать трудно. В обработчике есть исключения: настройки групп и пользователей, которым не надо блокировать доступ.

Но если вдруг так получилось, что вы заблокировали себя, то можно по FTP или SFTP переименовать файл /bitrix/tools/askaron_accessip_init.php

Без этого файла модуль не работает. Потом зайдите в настройки нужного вам обработчика и настройте правильно. Файл должен пересоздаться заново.



Установка обработчика:


accessip - Установка обработчика


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

accessip - Обработчик1



accessip - Обработчик2



accessip - Обработчик3



accessip - Обработчик4



demo1 - Демо. Демонстрационный обработчик для разработчиков

Демонстрационный обработчик данных, с его помощью можно научиться писать свои обработчики.



Контроль свободного места и бекапов

Описание модуля

Демо-версия полностью функциональная, срок демо-периода 30 дней.

Подарок:

Этот модуль (и ещё много других) вы можете получить от нас в подарок при покупке модуля «Продвинутый обмен с 1С»


Описание модуля «Контроль свободного места и бекапов»

Назначение модуля: отслеживать свободное место на жестком диске на сервере, где установлено решение.

Модуль:
  • Высылает уведомление на e-mail в случае, если на жестком диске осталось меньше места, чем указано в настройках модуля, а также в случае ошибки регулярного резервного копирования и в случае успеха создания резервной копии, если установлены соответствующие настройки модуля
  • Модуль работает только в случае регулярного резерного копирования, в случае ручного создания резервных копий модуль не отрабатывает!
  • Прерывает процесс резервного копирования, если осталось мало места (в случае установки соотвествующей опции)
  • Автоматически удаляет старые резервные копии в случае, если на жестком диске осталось меньше места, чем указано в настройках модуля (в случае установки соответствующей опции)
  • Высылает SMS уведомления на указанные номера в случае ошибки регулярного резервного копирования, а также в случае, если на жестком диске осталось меньше места, чем указано в настройках модуля. Данная возможность доступна только после установки только после установки модуля askaron.sms (бесплатный модуль для отправки SMS).

Настройки модуля

Установка:

Модуль «Контроль свободного места и бекапов» устанавливается, как любой модуль из Маркетплейса, и никаких вопросов не задает.

Настройка:

После установки модуля перейдите на страницу настроек:
Настройки -> Настройки продукта -> Настройки модулей->Контроль свободного места и бекапов

Назначение полей:

E-mail администратора -  адрес электронной почты, на которую будут высылаться уведомления. Можно указать несколько адресов через запятую. Если не заполнено, то будет использован E-mail администратора сайта из настроек главного модуля

Процент свободного места, когда места мало - Модуль следит, если свободного места окажется меньше, чем указано. Можно указать 0, и тогда модуль не будет никак следить за свободным местом.

Высылать уведомления на E-mail администратора, что места осталось мало - если опция отключена, уведомления о том что места осталось мало, не будет приходит на указанный выше e-mail.

Автоматически очищать папку резервных копий если оказалось, что места мало - удаляет файлы резервных копий, если места осталось мало. Оставляет файлы за первый и последний день, даже если нет свободного места. Если опция установлена, резервные копии будут удалены до того момента, пока не освободится достаточно места.

Запрещать бекап Битрикса, если места осталось мало - Резервное копирование не будет начато, будет отправлено уведомление администратору, что бекап не может идти, потому что места мало.

Высылать уведомления на E-mail администратора в случае ошибки резервного копирования  - выслать уведомление в случае возникновения какой-либо ошибки при резервном копировании.

Высылать уведомления на E-mail администратора в случае успешного завершения резервного копирования - выслать уведомление в случае, если создание резервное копии завершилось успешно.

Номер телефона для SMS оповещения - Можно указать один или несколько номеров (через запятую или пробел). В номерах телефона допускаются символы: +-() На указанные номера будет высылаться SMS оповещение в случае ошибки регулярного резервного копирования, а так же в случае, если на жестком диске осталось меньше места, чем указано в настройках модуля. Поле появляется в настройках только после установки модуля askaron.sms (бесплатный модуль для отправки SMS).

Также для отправки SMS оповещений необходимо установить и настроить один из четырех модулей:
SMS4B - СМС для бизнеса rarus.sms4b
SMSC.RU - SMS оповещения smsc.sms
bxmaker.smsnotice - SMS оповещения bxmaker.smsnotice
СМС Оповещения - bizsolutions.sms


Разные структуры разделов на сайте и в 1С

Модуль «Разные структуры разделов на сайте и в 1С» предназначен если в 1С и на сайте структура разделов отличается.

Для работы модуля не требуется дополнение Битрикса для 1С. Модуль работает с ним и без него.

Модуль не является специальной выгрузкой разделов. Модель только влияет на стандартный обмен, чтобы разделы выгружались по-другому.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.sections1c/.

Статья
Модуль «Разные структуры разделов на сайте и в 1С»



Работает на: 

- «1С-Битрикс: Управление сайтом» - Бизнес и Малый бизнес.

Модуль может работать на младшей редакции, если там используется свой самописыный обмен по протоколу 1С и 1С-Битрикс.
 

- «1С-Битрикс: Битрикса 24 в  коробке» - любые редакции. 


Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:


if(\Bitrix\Main\Loader::includeModule("askaron.sections1c"))

  //здесь можно использовать функции и классы модуля 

Описание модуля

Модуль «Разные структуры разделов на сайте и в 1С» — позволяет не выводить на сайте разделы, которые не нужны.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.sections1c/.

Статья
Модуль «Разные структуры разделов на сайте и в 1С»


Разрешить контент-менеджерам менять привязку к разделам на сайте:

Изменения привязки к разделам


Закрытые разделы:

Разделы, которые неактивны и всё их содержимое тоже неактивно.

Модуль следит, чтобы ничего в закрытых разделах не могло активироваться. Получается архив ненужных товаров.

Создайте в 1С закрытый раздел "Устаревшее" и переносите в него товары.

При выгрузке изменений на сайт устаревшие товары будут деактивироваться.

Закрытые разделы вместе


Пропущенные разделы:

Модуль позволяет не выводить верхние разделы, если они не нужны.

Отметьте разделы, и содержимое пропущенных разделов будет всегда выгружаться в корень инфоблока.

Пропущенные разделы вместе

Действие над разделом «Деактивировать, включая вложенные»:

Деактивировать, включая вложенные

Действие иногда бывает нужно контент-менеджеру, чтобы не только скрыть раздел, но и деактивировать все содержимое, чтобы ничего в поиске не появилось.

Действие над разделом не связано с опцией «Закрытые разделы». Действие добавлено в модуль для удобства.


Где работает модуль:

Решение работает при любых изменениях товаров и разделов на любых редакциях Битрикс.

Работает при выгрузке товаров из 1С, при выгрузке из Моего склада, при выгрузке из любых файлов и при редактировании товаров вручную.

Пропущенные разделы

Опция «Пропущенные разделы каталога» позволяет деактивировать некоторые верхние разделы, а их сожержимое автоматически  переносить в корень каталога.

Пример:


Пропущенные разделы - проблема.jpg

Установите опцию. Можно несколько через запятую:

Пропущенные разделы - опции

Теперь раздел деактивирован и содержимое в корне.

Пропущенные разделы - результат

МойСклад. Дополнительный импорт через API

Модуль «МойСклад. Дополнительный импорт через API» догружает с помощью API то, что не выгружается с помощью стандартного обмена с 1С-Битрикс. 

Разработчикам: перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

<?
if(\Bitrix\Main\Loader::includeModule("askaron.moysklad"))

  //здесь можно использовать функции и классы модуля

?>


Описание модуля

Модуль «МойСклад. Дополнительный импорт через API» дополняет стандартный обмен МоегоСклада с 1С-Битрикс.

Модуль позволяет догрузить к уже выгруженным товарам: картинку, код товара и гуид (внутренний ID моего склада)

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.moysklad/ 


Для работы модуля на сайте уже должен быть выгружен каталог товаров из МоегоСклада, встроенная выгрузка работает на: 

«1С-Битрикс: Управление сайтом» - Малый бизнес, Бизнес, Enterprise.
«Битрикс24 из коробки» - любые редакции.


Настройки модуля:


страница настроек


Требования к работе модуля:

  • МойСклад на платном тарифе, чтобы работало API,
  • каталог товаров на сайте должен быть выгружен из МоегоСклада встроенным обменом с 1С-Битрикс



Первоначальная настройка модуля:

  • установите модуль,
  • в настройках модуля укажите логин и пароль пользователя из МоегоСклада,
  • укажите в настройках модуля инфоблок из МоегоСклада
  • укажите какие данные хотите выгружать.


Тестирование модуля:

  • для тестирования включите «Импортировать только один товар для тестирования», 
  • найдите в каталоге какой-нибудь товара
  • укажите внешний код тестового товара в настройках модуля в опции «Внешний код товара, который импортировать для тестирования»,
  • при переходе из-под администратора по ссылке /bitrix/tools/askaron_moysklad_catalog_cron.php должен запуститься обмен,
  • в журнале событий будут записи о начале и окончании обмена, будут записи об ошибках обмена,
  • в товар будет дописана информация из МоегоСклада

тестовый товар


Включение модуля:

Отключите импорт одного товара в настройках модуля, чтобы выгружались все.

Настройке крон или обратитесь к техподдержке вашего хостинга, чтобы вам помогли настроить крон.

Важно. Техподдержка модуля не помогает настраивать крон.

Пример настроек крона в файле /etc/crontab для виртуальной машины Битрикса.

Вызов файла в 01:00 и 13:00 каждый день. В зависимости от настроек хостинга и пути к сайту строка может выглядеть по-другому.

0 1,13 * * * bitrix php -f /home/bitrix/www/bitrix/tools/askaron_moysklad_catalog_cron.php






Классы и функции

API модуля открыто и можно использовать методы.


\Askaron\Moysklad\Import::getDir()

Получение строки URL к МоемуСкладу с логином и паролем.

Пример:

$path = \Askaron\Moysklad\Import::getDir()."/api/remap/1.1/entity/product";

Результат:

https://testlogin:testpassword@online.moysklad.ru/api/remap/1.1/entity/product
    



\Askaron\Moysklad\Import::getListArray( $path, $arFilter = array(), $max_limit = 0 )

Метод возвращает список чего-либо из МоегоСклада. МойСклад возвращает не больше 100 элементов за один запрос. Метод делает несколько запросов, чтобы получить полный список элементов.

Пример. Получение списка товаров из МоегоСклада

$path = \Askaron\Moysklad\Import::getDir()."/api/remap/1.1/entity/product";
$arList =\Askaron\Moysklad\Import::getListArray( $path );


В результате в $arList будут описания всех товаров.



Событие после обновления товара модулем:


$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("askaron.moysklad", "onAfterElementUpdate", array('CMyClass', 'onAfterElementUpdate'));

class CMyClass {
  public static function onAfterElementUpdate( $event )
  {
    $arParameters = $event->getParameters();
    AddMessage2Log( $arParameters );
  }
}




Мультирегиональность и многодоменность

Описание модуля

Список регионов или доменов для вашего сайта. Переключение между регионами, вывод различной информации для разных регионов

Страница решения в Маркетплейсе: 
Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции (кроме Первый сайт).
«1С-Битрикс24 в коробке» - любые редакции.

Для работы модуля требуются модули: Инфоблоки, Highload-блоки и бесплатный «Дополнительные свойства инфоблоков. Аскарон»

Демо-версия полностью функциональная. Срок демо-периода 30 дней.

Минимальная версия главного модуля 1С-Битрикс 14.0.1, минимальная версия PHP 7.1

Класс \Askaron\Regions\Region

Модуль «Мультирегиональность и многодоменность» подключается сам на событии OnPageStart. Проверять установлен ли модуль функцией includeModule не обязательно.

Однако в init.php модуль ещё не подключен. Если он нужен в init.php, то подключайте так:

<?
if(\Bitrix\Main\Loader::includeModule("askaron.regions"))

  //здесь можно использовать функции и классы модуля

?>


Класс \Askaron\Regions\Region::
public static function getIblockId(): ?int
public static function getIdByXmlId( string $xml_id , ?string $site_id = null ): ?int
public static function getAllItems( ?string $site_id = null ): array
public static function setCurrent( ?int $id = null, ?string $site_id = null): void
public static function getCurrentId( ?string $site_id = null ): ?int
public static function getCurrentCode( ?string $site_id = null ): ?string
public static function getCurrentXmlId( ?string $site_id = null ): ?string
public static function getCurrentName( ?string $site_id = null ): ?string
public static function getCurrentPropDomain( ?string $site_id = null ): ?string
public static function getCurrentPropDomainMobile( ?string $site_id = null ): ?string
public static function getCurrentPropDomainsOtherKeys( ?string $site_id = null ): ?array
public static function getCurrentIsDefault( ?string $site_id = null ): ?bool
public static function getCurrentPropCountry( ?string $site_id = null ): ?string



Метод для получения ID инфоблока, где хранятся регионы
public static function getIblockId(): ?int

Метод возвращает ID инфоблока со списком регионов. В случае ошибки, если инфоблок не существует (ситуация: если кто-то изменил внешний код инфоблока регионов или удалил инфоблок), то вернёт null. Используйте метод для работы с инфоблоком регионов.

Примечание: при установке модуля создается инфоблок типа 2.0 (свойства в отдельной таблице).

Пример
$REGION_IBLOCK_ID = \Askaron\Regions\Region::getIblockId(); // Вернёт 21



Метод для получения ID региона по его XML_ID
public static function getIdByXmlId( string $xml_id , ?string $site_id = null ): ?int

Метод возвращает ID региона по его XML_ID или null, если регион не найден. Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Пример
$REGION_ID = \Askaron\Regions\Region::getIdByXmlId("all"); // Вернёт 1063



Метод для получения списка всех регионов
public static function getAllItems( ?string $site_id = null ): array

Метод возвращает массив всех регионов. Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Будут выбираться все регионы, если опция «Включить выбор регионов с учетом свойства Код сайта» выключена.

Фильтр по $site_id происходит только если включена опция «Включить выбор регионов с учетом свойства Код сайта». Перед включением опции, надо заполнить свойство "Код сайта"  у регионов. 
Пример
$arRegions = \Askaron\Regions\Region::getAllItems();
Вернёт

Array
(
    [1063] => Array
        (
            [ID] => 1063
            [NAME] => Весь мир
            [CODE] => all
            [XML_ID] => all
            [IS_DEFAULT] => (boolean) true
            [COUNTRY] => (empty string)
            [DOMAIN] => www.askaron.ru
            [DOMAIN_MOBILE] => m.askaron.ru
            [DOMAINS_OTHER_KEYS] => Array
            (
                 [askaron.ru] => (boolean) true
                 [amp.askaron.ru] => (boolean) true
            )
        )

    [1065] => Array
        (
            [ID] => 1065
            [NAME] => Астана
            [CODE] => astana
            [XML_ID] => astana
            [IS_DEFAULT] => (boolean) false
            [COUNTRY] => kz
            [DOMAIN] => astana.askaron.ru
            [DOMAIN_MOBILE] => m-astana.askaron.ru
[DOMAINS_OTHER_KEYS] => Array ( ) ) [1064] => Array ( [ID] => 1064 [NAME] => Минск [CODE] => minsk [XML_ID] => minsk [IS_DEFAULT] => (boolean) false [COUNTRY] => by [DOMAIN] => minsk.askaron.ru [DOMAIN_MOBILE] => m-minsk.askaron.ru [DOMAINS_OTHER_KEYS] => Array ( ) ) [1067] => Array ( [ID] => 1067 [NAME] => Москва и Подмосковье [CODE] => msk [XML_ID] => msk [IS_DEFAULT] => (boolean) false [COUNTRY] => ru [DOMAIN] => msk.askaron.ru [DOMAIN_MOBILE] => m-msk.askaron.ru [DOMAINS_OTHER_KEYS] => Array ( ) ) )
Важно: в названии обрезаются пробелы и символы подчеркивания. "__Весь мир" => "Весь мир". Это нужно, чтобы важнейшие регионы выводились в административном разделе в начале.
[NAME] => Весь мир
В случае, если многодоменность включена, то домен заполняется
[DOMAIN] => www.askaron.ru
[DOMAIN_MOBILE] => m.askaron.ru
В случае, если многодоменность выключена, то домен не заполняется

[DOMAIN] => "" 
[DOMAIN_MOBILE] => ""


Метод для установки текущего региона

public static function setCurrent( ?int $id = null, ?string $site_id = null): void

Метод используется для переключения текущего региона без многодоменности. С включенной многодоменностью метод вызывать для переключения не нужно, потому что Регион вычисляется  по домену. Достаточно сделать ссылку на другой домен.

Параметр $id — ID нового домена. Если $id не задан, то метод будет искать текущий домен по своему алгоритму. Метод без параметра $id не надо вызывать в шаблоне сайта, он вызывается внутри \Askaron\Regions\Region::getCurrentId и других подобных фунциях.

Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт.

Метод ничего не возвращает, а записывает к себе в статическую переменную данные о регионе.

Пример
\Askaron\Regions\Region::setCurrent(1001);
$REGION_ID = \Askaron\Regions\Region::getCurrentId();
// вернёт 1001, если такой регион существует
// далее можете сделать редирект или продолжить выполнение страницы с новым регионом


Статические методы для работы с текущим регионом, который вычислил модуль.
public static function getCurrentId( ?string $site_id = null ): ?int
public static function getCurrentCode( ?string $site_id = null ): ?string
public static function getCurrentXmlId( ?string $site_id = null ): ?string
public static function getCurrentName( ?string $site_id = null ): ?string
public static function getCurrentPropDomain( ?string $site_id = null ): ?string
public static function getCurrentPropDomainMobile( ?string $site_id = null ): ?string
public static function getCurrentPropDomainsOtherKeys( ?string $site_id = null ): ?array
public static function getCurrentIsDefault( ?string $site_id = null ): ?bool
public static function getCurrentPropCountry( ?string $site_id = null ): ?string

Возвращают null только в случае, если никакой регион для сайта не найден. Это почти невозможная ситуация, но может быть, если деактивировать все регионы. Или  регион ищем по сайту, где нет регионов, с опцией «Включить выбор регионов с учетом свойства Код сайта».

Параметр $site_id для фильтрации регионов по сайту в Битриксе срабатывает только, если в настройках модуля включена опция «Включить выбор регионов с учетом свойства Код сайта». Параметр $site_id задавать не обязательно, по умолчанию используется SITE_ID — текущий сайт (в публичном разделе). $site_id имеет смысл задавать в административном разделе.

Примеры

ID текущего элемента инфоблока Регионы
$REGION_ID = \Askaron\Regions\Region::getCurrentId();

Код текущего элемента инфоблока Регионы
$REGION_CODE = \Askaron\Regions\Region::getCurrentCode();

XML_ID текущего элемента инфоблока Регионы
$REGION_XML_ID = \Askaron\Regions\Region::getCurrentXmlId();

Название текущего элемента инфоблока Регионы. В названии удаляются символы подчёркивания и пробелы в начале и в конце. 
__Весь мир будет выводиться, как Весь мир. Это сделано, чтобы в админке такой регион был раньше для контент-менеджера при сортировке по алфавиту.
$REGION_NAME = \Askaron\Regions\Region::getCurrentName();

Свойство Домен текущего элемента инфоблока Регионы. Метод работает в случае, если включена Многодоменность (для основного домена) в настройках модуля
$REGION_PROP_DOMAIN = \Askaron\Regions\Region::getCurrentPropDomain();

Свойство Мобильный домен элемента инфоблока Регионы. Метод работает в случае, если включена Многодоменность для мобильного домена в настройках модуля
$REGION_PROP_DOMAIN_MOBILE = \Askaron\Regions\Region::getCurrentPropDomainMobile();

Свойство Другие домены для определения региона. Обычно не надо задавать это свойство.
Метод работает, если по домену или мобильному домену регион не определён.
Метод нужен в случае если есть два разнозначных домена с www и без www. Либо нужно создать служебный поддомен вроде amp.сайт.ру и amp-msk.сайт.ру
Возвращает  массив ключей из дополнительных доменов для определения региона, если заданы.
$REGION_DOMAINS_OTHER_KEYS = \Askaron\Regions\Region::getCurrentPropDomainsOtherKeys(); // array( "сайт.ru" => true, "amp.сайт.ru" => true ) 

Свойство Регион по-умолчанию. Метод вернёт true, если установлено в текущем регионе, иначе false
$REGION_IS_DEFAULT = \Askaron\Regions\Region::getCurrentIsDefault();

Свойство Страна для текущего элемента инфоблока Регионы. Вернет XML_ID связанного элемента хайлоадблока. В качестве примера ru, by, kz, ua. Но можно придумать свои «Страны». Например Европа, Азия, Африка. Это свойство сделано для удобной группировки регионов. Свойство может быть вообще не заполнено. Например для __Весь мир
$REGION_COUNTRY = \Askaron\Regions\Region::getCurrentPropCountry();







Настройки++

Модуль «Настройки++» создает страницу дополнительных настроек для вашего проекта.

Модуль бесплатный


Разработчикам:

— значение настройки можно легко получить, как обычную опцию, и модуль подключать не надо

<?echo COption::GetOptionString( "askaron.settings", "UF_PHONE" );?>

— записать настройку из собственного скрипта можно методом: CAskaronSettings::Update.

!!! Ни в коем случае не используйте COption::SetOptionString( "askaron.settings", "UF_PHONE" ).
Если вы случайно записали настройку с помощью COption::SetOptionString, то вам надо удалить ее из таблицы b_option и сбросить кеш.



— перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

<?
    if(CModule::IncludeModule("askaron.include"))
    {
        //здесь можно использовать функции и классы модуля
    }
?>

Описание модуля

Модуль «Настройки++» создает страницу дополнительных настроек для вашего проекта.

В отличие от других подобных модулей, все настройки хранятся в отдельной таблице и не ограничены длинной опции в 2000 символов.

Модуль основан на дополнительных пользовательских полях Битрикса. Уже есть самые разнообразные типы полей.

Получить настройку из кода сайта, можно как обычную опцию, и модуль подключать не нужно:

<?echo COption::GetOptionString( "askaron.settings", "UF_PHONE" );?>



Страница решения в Маркетплейсе:

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.«Битрикс24 из коробки» - любые редакции.


Установка модуля:

Модуль устанавливается, как любой модуль из маркетплейса, и никаких вопросов не задает.

Настройка модуля:

После установки модуля перейдите на страницу настроек:
Настройки → Настройки++ (в самом низу)

Страница настроек представляет собой обычную страницу редактирования дополнительных пользовательских полей.

Пользовательские поля — стандартный функционал Битрикса. Аналогичные пользовательские поля есть для пользователя, или для раздела инфоблока.

Теперь пользовательские поля есть для проекта:

Страница настроек 2.0

Настройки поля:

Настройка поля


Удаление модуля:

Модуль удаляется, как обычно, никаких вопросов не задает.


Классы и события

Чтение настройки 

Для того, чтобы просто получить значение настройки в своем коде, достаточно вызвать обычную функцию для получения опции. Модуль askaron.settings подключать не надо. 

<?echo \COption::GetOptionString( "askaron.settings", "UF_PHONE" );?>

Значение настройки будет извлечено не из таблицы опций, а из таблицы дополнительных пользовательских полей. 

Значения настроек кешируются. При повторном обращении к настройкам они будут извлекаться из кеша гораздо быстрее. 

Замечание по третьему параметру \COption::GetOptionString

Третий параметр функции не поддерживается и не используется:

<?echo \COption::GetOptionString( "askaron.settings", "UF_PHONE", "default value" );?>
всегда будет возвращаться default value



Ограничения 

Длина пользовательского поля ограничена колонкой таблицы базы данных, в которой это значение хранится. Для текстовых полей MySQL это тип TEXT на 64 килобайта. Ничто не мешает в случае чего сделать тип колонки LONG_TEXT на 4 гигабайта. 

Если у вас множественное поле, то общая его длина ограничена размером колонки типа TEXT (можно сделать LONG_TEXT). Но длина одного значения множественного поля всего 2000 символов. Обязательно учитывайте это обстоятельство при проектировании. Это ограничение системы Битрикс для множественных пользовательских полей. 


Класс CAskaronSettings

Функция
array CAskaronSettings::GetFields() 


Функция возвращает массив значений всех пользовательских настроек 

<?
if(CModule::IncludeModule("askaron.settings"))
{
    $arFields = CAskaronSettings::GetFields();
}
?>



Функция
void CAskaronSettings::ClearCache() 


Функция очищает кеш значений всех пользовательских настроек 

<?
if(CModule::IncludeModule("askaron.settings"))
{
    CAskaronSettings::ClearCache();
}
?>


Функция
boolean CAskaronSettings::Update( array $arFields ) 


Функция записывает значения пользовательских настроек.

Возвращает значение true, если всё хорошо, и false, если произошла ошибка.

<?
if ( CModule::IncludeModule("askaron.settings") )
{
    $arUpdateFields = array(
        "UF_PHONE" => "+7 (863) 292-41-62",
    );

    $obSettings = new CAskaronSettings;
    $res = $obSettings->Update( $arUpdateFields );
    if ( $res )
    {
        echo "Поля записаны успешно";
    }
    else
    {
        echo $obSettings->LAST_ERROR;
    }
}
?>



События OnBeforeSettingsUpdate и OnAfterSettingsUpdate 

События OnBeforeSettingsUpdate и OnAfterSettingsUpdate вызываются в методе CAskaronSettings::Update()

Функция-обработчик имеет параметр &$arFields.

Если функция-обработчик для события OnBeforeSettingsUpdate вернет false, то запись значений не произойдет.

Пример: 

<?
// в /bitrix/php_interface/dbconn.php
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log_65456.txt");

// в /bitrix/php_interface/init.php
AddEventHandler("askaron.settings", "OnBeforeSettingsUpdate", array( "CMyClass", "OnBeforeSettingsUpdateHandler" ) );
AddEventHandler("askaron.settings", "OnAfterSettingsUpdate", array( "CMyClass", "OnAfterSettingsUpdateHandler" ) );


class CMyClass
{
    public static function OnBeforeSettingsUpdateHandler( &$arFields )
    {
        if ( isset( $arFields["UF_PHONE"] ) && strlen( $arFields["UF_PHONE"] ) == 0 )
        {
            global $APPLICATION;
            $APPLICATION->throwException("Телефон не может быть пустым");
            return false;
        }
    }

    public static function OnAfterSettingsUpdateHandler( &$arFields )
    {
        // получить массив всех новых значений, которые записались
        $arFields = CAskaronSettings::GetFields();

        // записать массив значений в лог-файл
        AddMessage2Log( print_r($arFields, true) );
    }
}
?>  

Получения результата у полей типа список и файл

Для того, чтобы просто получить значение настройки в своем коде, достаточно вызвать обычную функцию для получения опции. Модуль askaron.settings подключать не надо. 

<?echo COption::GetOptionString( "askaron.settings", "UF_PHONE" );?>


С числами и строками проблемы нет. Однако возникают вопросы с полями типа список и типа файл. Метод возвращает только ID файла и ID элемента списка.

Вам придется дополнительно обработать результат в зависимости от того, что вам надо получить.


АПИ Битрикса для файла:

CFile::GetFileArray - получить всё по ID
https://dev.1c-bitrix.ru/api_help/main/reference/cfile/getfilearray.php

CFile::ResizeImageGet - получить картинку в нужном размере по ID
https://dev.1c-bitrix.ru/api_help/main/reference/cfile/resizeimageget.php

CFile::GetPath - получить путь к файлу по ID
https://dev.1c-bitrix.ru/api_help/main/reference/cfile/getpath.php



АПИ Битрикса для варианта списка

Получение вариантов значений
https://dev.1c-bitrix.ru/api_help/main/reference/cuserfieldenum/getlist.php



Округление скидок

Решение помогает преобразовать цену, после применения скидки.

Имеет следующие возможности:
- округление цен с возможностью выбора порядка и метода округления,
- психологическое округление,
- корректировка округления,
- динамический предпросмотр применения всех возможностей решения.

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.round/

Требуется наличие модуля «Торговый каталог».

Работает на: 
«1С-Битрикс: Управление сайтом» - малый бизнес и бизнес


Демо-версия полностью функциональная. Срок демо-периода 30 дней.


Пример работы модуля:

Цены до применения модуля:
Screenshot_2.png


Цены после применения модуля:

Screenshot_3.png

Округление цен:
Позволяет получить округленную цену, после применения скидки. В частности помогает избавится от копеек, которые появляются после применения скидки.

Психологическое округление:
позволяет получить "красивую" цену, например, преобразовать 2000 в 1999.

Корректировка округления:
позволяет ввести корректировку, чтобы не допустить слишком сильного снижения цены после округления.

Динамический предпросмотр:
показывает пример применения всех настроек к заданной цене.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Данный модуль позволяет управлять ценами, полученными в результате применения скидок.

По умолчанию мы округляем цены в меньшую сторону с точностью до 1.


Для более точной настройки необходимо перейти на страницу настройки модуля:
Магазин  - Скидки - Округление цен
либо
Настройки - Настройки продукта - Настройки модулей - Округление скидок


В процессе изменения настроек в разделе "Пример работы модуля с настройками заданными выше"  мы видим как будет изменятся заданная цена при текущих настройках.

Screenshot_7.png

Рассмотрим основные настройки:

Screenshot_4.png


Настройки округления позволяют непосредственно включить или выключить округление. А так же выбрать точность округления и его метод(в большую сторону, в меньшую сторону и по арифметическим правилам).


Screenshot_5.png

Настройки психологического округления позволяют включать психологическое округление, а так же выбирать множитель и частное.

Screenshot_6.png

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

Классы

CAskaronRound

Apply

Описание:



Округляет число по правилам, указанными в настройках модуля.

Параметры функции:


Параметры Описание
PRICE Исходная цена

Пример:
Применим все округления к заданной цене.


Использование:

Применяйте эту функцию, когда вам надо заранее показать, какую скидку пользователь может получить:

Цены со скидками









Cобытия

OnAfterApply

float функция-обработчик(  float $price, float $original_price );

Событие вызывается в конце функции  CAskaronRound::Apply после применения всех округлений и позволяет изменить конечный результат

Параметры:

$price - получившаяся после округления цена
$original_price - цена до всех округлений

Пример обработчика события, который для всех цен меньше 10 отменяет округление:

<?
// файл /bitrix/php_interface/init.php

AddEventHandler("askaron.round", "OnAfterApply", Array("CMyRound", "OnAfterApply"));

// возвращать цену без округления в случае, если исходная цена товара меньше 10
class CMyRound
{
  public static function OnAfterApply($price, $original_price)
  {
    $result = $price;

    if ( $original_price < 10 )
    {
      $result = $original_price;
    }

    return $result;
  }
}
?>



Пример округления цен с диапазонами


Вы можете с помощью элементарных арифметических операций самостоятельно рассчитать любую цену.

Допустим, обработчик работает по правилам:
  1. на товары с ценой после скидки до 1000 руб. – округление с точностью 10
  2. на товары с ценой после скидки более 1000 руб. – округление с точностью 100
  3. на товары с ценой после скидки более 10000 руб. – округление с точностью 1000
Разместить код обработчика удобнее всего в /bitrix/php_interface/init.php

Файл /bitrix/php_interface/init.php как раз предназначен для таких задач, при обновлении Битрикса не изменяется. Если такого файла нет, создайте его.

Внимание:
Настоятельно не рекомендуется редактировать файл через админку Битрикса.
Лучше всего редактировать файл через панель управления хостингом или по FTP.

<?
// Регистрируем обработчик события при округлении скидок.
AddEventHandler("askaron.round", "OnAfterApply", Array("CMyRound", "OnAfterApply"));

class CMyRound
{
    public static function OnAfterApply($price, $original_price)
    {
        $result = $original_price;

        // функция round округляет по арифметическим правилам.
        // можно округлять в меньшую сторону, если заменить round() на floor()
        // можно округлять в большую сторону, если заменить round() на ceil()

        // можно сделать психологически привлекательную цену, если после округления отнять 1
        // если цена уменьшилась сильно, можно добавить корректировку.

        if ( $original_price < 1000 )
        {
            $result = round( $original_price / 10 ) * 10;
            //$result = max(0, $result -1);

            // корректировка после округления имеет смысл только
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 10 )
            //{
            //     $result = $result + 10;
            //}
        }
        elseif ( $original_price >= 1000 && $original_price < 10000 )
        {
            $result = round( $original_price / 100 ) * 100;
            //$result = max(0, $result -1);
           
            // корректировка после округления имеет смысл только 
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 100 )
            //{
            //     $result = $result + 100;
            //}
        }
        else
        {
            $result = round( $original_price / 1000 ) * 1000;
            //$result = max(0, $result -1);


            // корректировка после округления имеет смысл только 
            // после округления в меньшую сторону (floor) и психологического округления
            //if ( $original_price - $result > 1000 )
            //{
            //     $result = $result + 1000;
            //}
        }
       
        return $result;
    }
}
?>

 


Онлайн-консультант Webconsult

Модуль «Онлайн-консультант Webconsult» размещает на сайте код онлайн-консультанта Webconsult. Можно указать, на каких страницах и для каких групп не выводить.

Модуль бесплатный, консультант имеет как платный, так и бесплатный тариф.

Тарифы

Тарифы

Примеры работы консультанта

Диалог
Оффлайн-сообщение

Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Модуль «Онлайн-консультант Webconsult» размещает на сайте код онлайн-консультанта Webconsult. Можно указать, на каких страницах и для каких групп не выводить.

Настройки показа консультанта.

Страница настроек модуля

1) Общие настройки для всех сайтов

Отображать Webconsult для всех пользователей, кроме пользователей из отмеченных групп

Позволяет ограничить показ консультанта для пользователей из определённых групп (например, администраторы и контент-менеджеры). По умолчанию группы не выбраны, т.е. отображать всем.


Отображать Webconsult в режиме правки

Позволяет скрывать панель консультанта при включённом режиме правки. По умолчанию опция не отмечена, т.е. не отображать.


2) Настройки для сайта

Данная группа настроек отображается отдельно для каждого сайта.

Отображать Webconsult

Выбрать, будет ли отображаться консультант на данном сайте. По умолчанию включено.


Ограничивать показ консультанта в зависимости от текущего раздела, Не выводить Webconsult в следующих разделах (каждый раздел с новой строки)


Позволяет выбрать разделы, в которых консультант отображаться не будет. По умолчанию опция отключена (будет отображаться во всех разделах), по умолчанию указаны разделы /ajax/ и /frames/.


Разработчикам:

Если консультант необходимо не отображать на каких-то отдельных страницах сайта, на этих страницах можно определить константу 

define ("ASKARON_WEBCONSULT_DISABLED",true);


Код для вставки на сайте

На каждом сайте можно выводить разный онлайн-консультант (уточните условия вашего тарифа на сайте онлайн-консультанта). Подробная инструкция по получению кода.

Как получить код для вставки на сайте

Модуль «Онлайн-консультант Webconsult» размещает на сайте код онлайн-консультанта Webconsult. Можно указать, на каких страницах и для каких групп не выводить.

Инструкция по получению кода для вставки на сайте

1) Пройти регистрацию на сайте Webconsult.

Регистрация на сайте

2) В панели управления, в разделе «Сайты», добавить адрес своего сайта.

Добавление сайта

3) Можно настроить внешний вид консультанта прямо сейчас, либо сделать это позднее в разделе «Сайты», нажав на кнопку «Дизайн» рядом с названием сайта.

Панель настройки дизайна

4) Вы получили код для вставки, скопируйте его и вставьте в настройках модуля в поле «Код для вставки на сайте». Заново получить код можно в разделе «Сайты», нажав на кнопку «Получить код» рядом с названием сайта.

Код для вставки

Оплата заказа по ссылке

Модуль отправляет покупателю ссылку на специальную страницу для оплаты заказа.

Пользователю не требуется в обязательном порядке авторизовываться на сайте для перехода к оплате по своему заказу.

Ссылки генерируются и группируются в настройках модуля индивидуально по каждой платежной системе и по каждой отдельной оплате в заказе покупателя.



Описание модуля

Описание модуля «Оплата заказа по ссылке»

Модуль отправляет покупателю ссылку на специальную страницу для оплаты заказа. 

Пользователю не требуется в обязательном порядке авторизовываться на сайте для перехода к оплате по своему заказу.

Ссылки генерируются и группируются в настройках модуля индивидуально по каждой платежной системе и по каждой отдельной оплате в заказе покупателя.

Возможные сценарии использования модуля:

1) Вставить ссылку на оплату заказа в почтовые шаблоны. Тогда пользователю не придётся заходить на сайт и искать свой заказ. Он сможет сразу перейти к оплате из любого письма: новый заказ, изменение статуса, напомниание об оплате и т.д. в зависимости от указанных в настройках модуля почтовых событий.


Почтовые шаблоны


Почтовый шаблон


Письмо о заказе



2) Отправить покупателю ссылку на оплату заказа в онлайн-чат, открытую линию Битрикс24, через мобильный мессенджер и иные средства коммуникации.


Ссылки на оплату


Заказ



  3) Выбирать порядок обработки ссылки на оплату: либо через обработчик соответствующей платежной системы, либо перенаправление на заданную ссылку, либо отображение заданного для данной платежной системы в настройках модуля текста (кода).


Показать текст об оплате




Оплата по номеру карты.jpg

Заказ найден, но пока на сайте не разрешено его оплачивать

Сообщение  «Заказ найден, но пока на сайте не разрешено его оплачивать» при переходе на оплату — это не ошибка.

Если вы видите такое сообщение, то на сайте включена опция «Статус, начиная с которого можно оплатить заказ»

Перейдите в настройки системы: «Настройки продукта - Настройки модулей - Интернет-магазин»

Опция «Статус, начиная с которого можно оплатить заказ».

1. Вы можете установить другой статус.

2. Иногда порядок статусов заказа нарушается в настройках магазина администраторами. Перейдите  «Магазин - Настройки - Статусы», убедитесь, что сортировка статусов установлена в правильном порядке.


Статус заказа, начиная с которого оплачивать


Если на вашем сайте используется какой-то статус, типа «Оплата разрешена», то в начальном статусе «Принят» не нужно отправлять ссылку на оплату.

Установка и настройка

Установка:

Модуль «Оплата заказа по ссылке» устанавливается как любой модуль из Маркетплейса.



Настройка:

После установки модуля перейдите на страницу управления модулем:

Магазин -> Оплата заказа по ссылке


Пример, чтобы покупателю приходило письмо с ссылкой об оплате:
- если наступило почтовое событие при "Новом заказе" и при "изменение заказа на Принят, ожидается оплата".
- если в заказе выбрана система "Банковские карты",



1. В общих настройках модуля отметить почтовые события, при наступлении которых надо добавить ссылку в письмо.

Например, Новый заказ [SALE_NEW_ORDER] и/или Изменение статуса заказа на  "Принят, ожидается оплата" [SALE_STATUS_CHANGED_N]

В тип почтового события следует подставлять #ORDER_REAL_ID# или #ORDER_ID# для старых Битриксов.

 
Почтовые шаблоны


2. По умолчанию ссылка на оплату вставляется в почтовый шаблон вместо  #ASKARON_URLPAY_HTML_LINK#. Добавьте  #ASKARON_URLPAY_HTML_LINK# в почтовые шаблоны к событиям SALE_NEW_ORDER и/или SALE_STATUS_CHANGED_N

В почтовые шаблоны можно добавить #ASKARON_URLPAY_HREF# и #ASKARON_URLPAY_HREF_SHORT# 

#ASKARON_URLPAY_HTML_LINK# - кнопка «оплата по ссылке»
#ASKARON_URLPAY_TEXT_LINK# - кнопка «оплата по ссылке» для почтовых шаблонов в text-формате.
#ASKARON_URLPAY_HREF#   - просто ссылка
#ASKARON_URLPAY_HREF_SHORT# - сокращённая ссылка, более удобная для шаблона СМС.

Почтовый шаблон


3. Перейдите в меню модуля к настройкам для платёжной системы, например Банковские карты [4]. Отметьте флажок Формировать ссылку для оплаты.

Включить формирование ссылки


4. Для проверки работы модуля сделайте заказ и выберите нужную систему оплаты. При наступлении нужного почтового события должна прийти ссылка на оплату.



5. Описание всех настроек на странице Настройки модуля.




Настройки модуля

Установка:

Модуль «Оплата заказа по ссылке» устанавливается как любой модуль из Маркетплейса и никаких вопросов не задаёт

С версии 3.2.3 модуль никаких файлов в папке сайта не создаёт. При необходимости оставлена опция, если пользователь хочет указать свою собственную страницу на оплату. По умолчанию страница на оплату будет /bitrix/tools/askaron_urlpay.php

До версии 3.2.3 при установке модуля потребуется выбрать папку сайта, где будет расположена служебная страница с компонентом для обработки ссылок на оплату.

Общие настройки модуля


После установки модуля перейдите на страницу управления модулем:

Магазин -> Оплата заказа по ссылке -> Общие настройки модуля

Настройки модуля 1


Настройки модуля 2



Назначение полей на заглавной странице настроек модуля (общие настройки):

Подставлять https вместо http — для ссылок на оплату

URL страницы, где расположен компонент модуля — указывается папка и имя файла относительно корня сайта.

Время жизни ссылок в днях — как долго будут действительны ссылки на оплату по заказам с момента создания.

Содержимое ссылки на оплату для вставки в письмо вместо поля #ASKARON_URLPAY_HTML_LINK# — содержимое ключа для подстановки в письма html-формата

Содержимое ссылки на оплату для вставки в письмо вместо поля #ASKARON_URLPAY_TEXT_LINK# — содержимое ключа для подстановки в письма text-формата



Удалённые опции:

Сайт (полный адрес сайта) Опция удалена с версии 4.0.0. Какой адрес сайта будет использоваться для формирования ссылок.

Название поля для вставки в шаблоны почтовых сообщений Опция удалена с версии 4.0.0 — можно задать наименование идентификатора, который будет использоваться в почтовых шаблонах для подстановки сниппета. Данный идентификатор должен быть вставлен в соответствующие почтовые шаблоны, которые предполагаются к использованию.

Шаблон для вставки в письма Опция переименована с версии 4.0.0. Содержимое ссылки на оплату для вставки в письмо

Перечень типов почтовых событий Опция перенесена на отдельную страницу Почтовые шаблоны.


Настройки для платёжной системы:

Магазин -> Оплата заказа по ссылке -> (например) Банковские карты


Включить формирование ссылки


Назначение полей на страницах систем оплаты:

Модуль автоматически создаёт страницу настроек для каждой присутствующей в Битриксе системы оплаты. На вкладке "Параметры" доступны следующие поля:

Сформировать ссылку для оплаты — включает или отключает формирование ссылок на оплату для данной платежной системы.

Авторизоровать пользователя при переходе по ссылке — важный параметр, который зависит от особенностей сайта и обработчика платежной системы. Используется, когда для перехода к оплате пользователь должен обязательно быть авторизован.

Способ перехода к оплате — если выбрано "Через обработчик платежной системы", то дальнейшее направление пользователя на соответствующий сайт для оплаты будет осуществляться по логике работы данного обработчика. Если выбрано "Прямая ссылка", то пользователь будет перенаправлен по указанному в поле "Прямая ссылка на оплату" адресу.

Включить авто-переход на страницу оплаты — управление автоматическим перенаправлением по заданной ссылке или по ссылке, формируемой обработчиком платежной системы.

Прямая ссылка на оплату — произвольная ссылка, куда должен быть направлен пользователь при указании соответствующих настроек.

Текст, который следует вывести, если нет перехода по ссылке — отображается на странице с компонентом, обрабатывающим ссылки на оплату.




Отзывы о товаре

Модуль «Отзывы о товаре» позволяет добавить на страницу товара отзывы с выставление оценки.

Демо-версия полностью функциональная, срок демо-периода 30 дней.


Разработчикам:

<?
    if(CModule::IncludeModule("askaron.reviews"))
    {
        //здесь можно использовать функции и классы модуля
    }
?>

Опиcание модуля

Модуль предназначен для организации отзывов к товарам на сайте.

Страница в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.reviews/

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редаксии. 
«1С-Битрикс: Битрикс24 в коробке» - любые редакции. 

Требуется: 
- наличие модуля инфоблоков, 
- тип базы данных MySQL,
- версия главного модуля не ниже 14.0.0 (используется ORM, ядро D7)

Примеры сайтов, где используется решение: 
http://askaron.ru/portfolio/solutions/askaron.reviews/#new-review - отзывы к модулю «Отзывы о товаре»

Модуль включает в себя следующие компоненты 2.0:

Название Код в пространстве имен askaron Описание
Список отзывов для товара askaron.reviews.for.element Список отзывов для элемента инфоблока. Можно включить обратную постраничную навигацию, стандартный режим AJAX Битрикса и отображение формы добавления отзыва.
Добавление нового отзыва askaron.reviews.new Форма добавления нового отзыва


Отзывы к товару компонент






Миграция отзывов форума

Мы заботимся, чтобы внедрение модуля было легким на старых сайтах, где уже есть отзывы на устаревших компонентах. 

На отдельной странице можно совершенно безопасно скопировать старые отзывы модуля форума в новые «Отзывы о товаре».

Если у вас раньше был компонент bitrix:forum.topic.reviews, то теперь можно скопировать в новый компонент.



Миграция отзывов форума


Свойства товаров

Модуль создает и заполняет свойства товаров:

Основные свойства:

ASKARON_REVIEWS_COUNT - Количество отзывов
ASKARON_REVIEWS_AVERAGE - Средняя оценка из отзывов
ASKARON_REVIEWS_RATING - Рейтинг из оценок отзывов

Используйте ASKARON_REVIEWS_COUNT для вывода количества отзывов.

Используйте ASKARON_REVIEWS_AVERAGE для вывода средней оценки.

Используйте  ASKARON_REVIEWS_RATING для сортировки товаров.

ASKARON_REVIEWS_RATING число, рассчитанное по хитрой формуле. Это не совсем среднее арифметическое. Но это число гораздо лучше позволяет отсортировать товары. Товар с 9 пятерками и 1 четверкой будет лучше, чем товар с одной оценкой «пять»!




Свойства товара для компонента "Голосование" или "Честное голосование":

Свойства, которые имею отношение к компоненту «Голосование» или «Честное голосование»:

vote_sum - сумма всех оценок
vote_count - количество оценок
rating - рейтинг

На большинстве сайтов, где таких компонентов нет, свойства пересчитывать не надо! Будут лишние свойства, которые нигде не используются.

На некоторых сайтах используется типовой компонент «Голосование» или «Честное голосование».

Компонент голосование




Голосование позволяет поставить оценку товару. С отзывами такой компонент никак не связан.

В настройках модуля есть опция «Прибавлять оценку из отзыва к рейтингу элемента и записывать в элемент», по умолчанию выключена.

Оценка отзыва прибавляется к оценке голосования, записывается в свойства:

vote_sum - сумма всех оценок
vote_count - количество оценок
rating - рейтинг число, рассчитанное по хитрой формуле.






Обновление счетчиков

Если по каким-то причинам свойства элемента инфоблока содержат неправильные значения количества отзывов или среднюю оценку, то вы всегда можете пересчитать нужные свойства:


Обновление счетчиков



Микроразметка schema.org

Модуль поддерживает микроразметку schema.org.

Микроразметка нужна, чтобы поисковики лучше индексировали сайт.

Валидаторы микроразметки:
https://developers.google.com/structured-data/testing-tool/
https://webmaster.yandex.ru/microtest.xml



Компонент список отзывов для товара  (askaron:askaron.reviews.for.element):

Микроразметка сделана универсально, и проходит валидацию.

Иногда нужно указать, что микроразметка отзывов вложена в микроразметку товара или другой сущности.

Для этого есть опция:

schema.org: добавить к отзыву аттрибут itemprop="review".

Аттрибут itemprop="review" говорит, что отзыв вложен во что-то еще.

После включения опции проверьте валидатором страницу.

schema.org - добавить аттрибут



Обратная постраничная навигация

Обратная постраничная навигация используется в компоненте список отзывов для элемента (askaron.reviews.for.element).

Обратная навигация встречается сравнительно редко. И может вызывать вопросы.



Вопрос:

Обнаружил, что неправильно отрабатывается разбиение списка отзывов на страницы.

Например, у меня всего 5 отзывов. Я ставлю выводить по 3 на страницу, а выводится все равно 5.

Если поставить по 2 на страницу, то выводится на первой странице 3 элемента, на второй 2, но по логике должно быть 3 страницы.


Ответ:

Это не ошибка. Это обратная постраничная навигация — очень крутая фишка Битрикса, которую редко применяют, но мы её сделали в нашем компоненте.

Обратная постраничная навигация нужна, чтобы контент не убегал при добавлении нового отзыва. Это нужно для поисковиков.

Обратную постраничную навигацию необходимо использовать везде, где элементы добавляются в начало: новости, отзывы, посты в блоге, сообщения на форуме. Пример http://idea.1c-bitrix.ru/

Если делать прямую навигацию то из 11 элементов будет:
- 3
- 3 PAGEN_1=2
- 3 PAGEN_1=3
- 2 PAGEN_1=4

При добавлении элемента все старые страницы сдвигаются и меняются. Это плохо для поисковиков - которые ведут на старую проиндексированнуюю страницу, а контент уже убежал.

В случае обратной постраничной навигации отзывы не сдвинутся и прошлые страницы для поисковика не изменятся.

- 5
- 3 PAGEN_1=2
- 3 PAGEN_1=1

В этом случае на последней странице всегда 3 элемента. А на первой не менее 3, но не более 5.


Все типовые шаблоны компонента навигации Битрикса поддерживают обратную постраничную навигацию.

Если у вас используется свой нетиповой шаблон компонента постраничной навигации, то убедитесь, что он поддерживает обратную навигацию.


Голосование за отзыв

В настоящее время выставление оценки отзыву (плюс/минус) не предусмотрено.

Но можно отредактировать шаблон компонента и вставить типовой компонент выставления рейтинга, чтобы авторизованные пользователи могли ставить рейтинг:

<?$APPLICATION->IncludeComponent(
    "bitrix:rating.vote",
    ".default", //templates: .default, like, like_graphic, standart, standart_text
    Array(
        "ENTITY_TYPE_ID" => "ASKARON_REVIEW", // Rating object type: USER, FORUM_TOPIC, FORUM_POST, BLOG_POST, BLOG_COMMENT, IBLOCK_ELEMENT
        "ENTITY_ID" => $arItem["ID"],// Element ID
        "OWNER_ID" => $arItem["AUTHOR_USER_ID"], // User Id
        "PATH_TO_USER_PROFILE" => "/club/user/#UID#/", // User profile URL
    ),
    false,
    array("HIDE_ICONS" => "Y")
);?>


Размещение компонента «Список отзывов для товара»

Размещение после компонента Элемент детально

Компонент «список отзывов для товара» обычно размещается на детальной странице после компонента Элемент детально (bitrix:catalog.element)


Редактирование компонента catalog



Примерно так

//Компонент bitrix:catalog.
//Изменить шаблон. В файле element.php после bitrix:catalog.element добавить компонент отзывов.

<?$ElementID=$APPLICATION->IncludeComponent(
    "bitrix:catalog.element",
    ".default",
    Array(
         ....
         ....
         ....
    ),
    $component
);?>

<?if ( $ElementID > 0 ):?>

        <?$APPLICATION->IncludeComponent(
            "askaron:askaron.reviews.for.element", 
            ".default", 
            array(
                "ELEMENT_ID" => $ElementID,
                "CACHE_TYPE" => "A",
                "CACHE_TIME" => "86400",
                "PAGE_ELEMENT_COUNT" => 10,
                "AJAX_MODE" => "Y",
                "AJAX_OPTION_JUMP" => "N",
                "AJAX_OPTION_STYLE" => "Y",
                "AJAX_OPTION_HISTORY" => "N",
                "PAGER_TEMPLATE" => "",
                "DISPLAY_BOTTOM_PAGER" => "Y",
                "COMPONENT_TEMPLATE" => ".default",
                "NEW_REVIEW_FORM" => "Y",
                "AJAX_OPTION_ADDITIONAL" => "undefined"
            ),
            false
        );?>
<?endif?>


Если надо разместить компонент отзывов внутри шаблона элемента детально, а не после него, рекомендуем делать это с помощью модуля «Включаемый код».


Как вариант, можете попробовать перенести шаблон внутрь другого шаблона с помощью Javascrtipt (библиотека jQuery):

// Компонент bitrix:catalog.
// Изменить шаблон. В файле element.php после bitrix:catalog.element 
// добавить компонент отзывов.

<?$ElementID=$APPLICATION->IncludeComponent(
    "bitrix:catalog.element",
    ".default",
    Array(
....
....
....
    ),
    $component
);?>

<?if ( $ElementID > 0 ):?>

    <div id="reviews">
        <?$APPLICATION->IncludeComponent(
            "askaron:askaron.reviews.for.element", 
            ".default", 
            array(
                "ELEMENT_ID" => $ElementID,
                "CACHE_TYPE" => "A",
                "CACHE_TIME" => "86400",
                "PAGE_ELEMENT_COUNT" => 10,
                "AJAX_MODE" => "Y",
                "AJAX_OPTION_JUMP" => "N",
                "AJAX_OPTION_STYLE" => "Y",
                "AJAX_OPTION_HISTORY" => "N",
                "PAGER_TEMPLATE" => "",
                "DISPLAY_BOTTOM_PAGER" => "Y",
                "COMPONENT_TEMPLATE" => ".default",
                "NEW_REVIEW_FORM" => "Y",
                "AJAX_OPTION_ADDITIONAL" => "undefined"
            ),
            false
        );?>
    </div>

    <?
        //Если мы хотим выводить отзывы не прямо здесь,
        //а внутри карточки товара, где есть элемент id="reviews_content" 
    ?>
    <script type="text/javascript">
        $('#reviews').prependTo('#reviews_content');
    </script>

<?endif?>





Размещение внутри компонента Элемент детально с помощью модуля «Включаемый код»

Типичная задача для модуля «Включамый код»:

- компонент catalog,
- в нём на странице element.php вызывается простой компонент catalog.element
- требуется на детальной странице товара вывести список отзывов (модуль Отзывы о товаре)

Для использования включаемого кода нужно выполнить два действия: 
  1. создать включаемый файл,
  2. подключить файл.
Включаемые файлы создаются в папке /bitrix/php_interface/include/askaron.include/ или /local/php_interface/include/askaron.include/ 


Создаем в папке /bitrix/php_interface/include/askaron.include/ файл reviews.php

Примерное содержимое:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?$APPLICATION->IncludeComponent(
  "askaron:askaron.reviews.for.element", 
  ".default", 
  array(
    "ELEMENT_ID" => $arParams["ELEMENT_ID"],
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "86400",
    "PAGE_ELEMENT_COUNT" => 10,
    "AJAX_MODE" => "Y",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "AJAX_OPTION_HISTORY" => "N",
    "PAGER_TEMPLATE" => "",
    "DISPLAY_BOTTOM_PAGER" => "Y",
    "COMPONENT_TEMPLATE" => ".default",
    "NEW_REVIEW_FORM" => "Y",
    "AJAX_OPTION_ADDITIONAL" => "undefined"
  ),
  false
);?>


Аналогичный включаемый файл можно легко создать из готового примера включаемого файла:

Создать файл на основе примера


Теперь надо вызвать включаемый файл и передать в него параметр ELEMENT_ID.

Редактируем файл template.php в компоненте catalog.element:

Редактирование шаблона компонента


Пишем где-нибудь:

<?CAskaronInclude::IncludeFile(       
   "reviews.php",  
   array(  
      "ELEMENT_ID" => $arResult["ID"],  
   )  
);?>



Ура! На странице товара появляются комментарии.

Есть одна проблема. В компонентах, где включен режим AJAX ("AJAX_MODE" => "Y") могут быть глюки.

Дело в том, что «Включаемый код» срабатывает на событиях в конце выполнения страницы. А режим AJAX использует отложенные функции.

Решением подобных проблем является вызов специальных функций до и после компонента  "Детальная страница товара".

Редактирование element.php


<?
CAskaronInclude::StartBuffer();
?>

<?$ElementID = $APPLICATION->IncludeComponent(
  "bitrix:catalog.element",
  "",
  array(
    "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
    ...
  ),
  $component
);?>

<?
CAskaronInclude::PrintBuffer();
?>



Функция PrintBuffer выведет товар детально и вызовет в нужных местах Включаемый код. 

Список отзывов будет работать в режиме AJAX.


Замечание:

Методы

CAskaronInclude::StartBuffer();
CAskaronInclude::PrintBuffer();


нам нужны на тот случай, если мы хотим, чтобы компонент оформления отзыва и список отзывов работали в режиме AJAX в закешированном компоненте,

"AJAX_MODE" => "Y",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",

а больше нигде не нужны.


Буферизация может неправильно себя вести  случае, если в компоненте где-нибудь произойдет die().

Вы должны сделать так, чтобы эти методы не вызывались в случае, если работают аякс-скрипты в компоненте. Например CAskaronInclude::StartBuffer(); может не дружить с добавлением в корзину.


Пример, если окно "Товар добавлен в корзину" не открывается:

if ( $_REQUEST["action"] !== "ADD2BASKET" )
{
  CAskaronInclude::StartBuffer();
}

$elementId = $APPLICATION->IncludeComponent(
  'bitrix:catalog.element',
  '',
  $componentElementParams,
  $component
);

if ( $_REQUEST["action"] !== "ADD2BASKET" )
{
  CAskaronInclude::PrintBuffer();
}





Примеры API

Вывести самый позитивный отзыв

Задача: в шаблоне элемента детально вывести самый позитивный отзыв.

Вывести надо отзыв с максимальной оценкой, последний по дате. Выводить только достоинства. Если достоинства не заполнены, то текст.

Компонент catalog.element, файл result_modifier.php


$arResult["REVIEW"] = array();
if(CModule::IncludeModule("askaron.reviews"))
{
  $arParameters = array(
     'order' => array(
        "GRADE" => "DESC",
        'DATE' => 'DESC'
      ),
      "filter" => array(
        "=ELEMENT_ID" => $arParams["ELEMENT_ID"],
        "ACTIVE" => "Y",
      ),
      'select' => array(
        "*",
        "AUTHOR_USER.NAME",
        "AUTHOR_USER.LAST_NAME",
        "AUTHOR_USER.LOGIN",
      ),
      'limit' => 1,
  );

  $res = \Askaron\Reviews\ReviewTable::getList( $arParameters );
  while ( $arFields = $res->fetch() )
  {
    $arDisplayText = $arFields["PRO"];
   
    if ($arDisplayText == "")
    {
       $arDisplayText = $arFields["TEXT"];
    }

    $arFields["DISPLAY_TEXT"] = htmlspecialcharsbx($arDisplayText); $arFields["DISPLAY_TEXT"] = str_replace( "\n", "<br>", $arFields["DISPLAY_TEXT"] );

    $display_name = trim( $arFields["AUTHOR_NAME"] );

    if ($display_name == "")
    {
        $display_name = trim($arFields["ASKARON_REVIEWS_REVIEW_AUTHOR_USER_NAME"]." ".$arFields["ASKARON_REVIEWS_REVIEW_AUTHOR_USER_LAST_NAME"] );
    }
    
    if ($display_name == "" && $arFields["AUTHOR_USER_ID"] > 0 )
    {
         $display_name = "Пользователь №".$arFields["AUTHOR_USER_ID"];
    }

    if ($display_name == "" )
    {
         $display_name = "Гость";
    }
    $arFields["~DISPLAY_NAME"] = $display_name;
    $arFields["DISPLAY_NAME"] = htmlspecialcharsbx($display_name);
    $arResult["REVIEW"] = $arFields;
  }

  // добавим к кешу шаблона еще один ключ.
  // теперь кеш шаблона детальной страницы сбрасывается сразу, когда кто-то добавляет, изменяет или удаляет отзыв
  if (defined('BX_COMP_MANAGED_CACHE') && is_object($GLOBALS['CACHE_MANAGER'] ) )
  {
     if ( $arParams["CACHE_TIME"] > 0 )
     {
         $GLOBALS['CACHE_MANAGER']->RegisterTag( 'askaron_reviews_for_element_'.$arResult["ID"] ); // cache by element
     }
  }
}


В файле template.php можно вывести


<?if ( $arResult["REVIEW"] ):?>
  <table>
     <tr>
        <td>
            <?=$arResult["REVIEW"]["DISPLAY_NAME"]?>
        </td>
     </tr>
     <tr>
        <td>
           <?=$arResult["REVIEW"]["DISPLAY_TEXT"]?>
        </td>
     </tr>
   </table>
<?endif?>


События ORM D7 модуля Отзывы о товаре

Модуль не содержит собственных событий, однако можно повлиять на поведение Добавления, Изменения и Удаление данных модуля с помощью обычных событий ORM D7 Битрикса.

События ORM D7 присутствуют у всех сущностей Битрикса, которые используют ORM D7.

Учебный курс Битрикса:

OnBeforeAdd (параметры: fields)
OnAdd (параметры: fields)
OnAfterAdd (параметры: fields, primary)

OnBeforeUpdate (параметры: primary, fields)
OnUpdate (параметры: primary, fields)
OnAfterUpdate (параметры: primary, fields)

OnBeforeDelete (параметры: primary)
OnDelete (параметры: primary)
OnAfterDelete (параметры: primary)

В частности, сущность \Askaron\Reviews\ReviewTable тоже использует эти события. Обработчики этих событий можно применять в своих проектах, однако мы оставляем за собой возможность изменять структуру таблиц модуля. В случае серьёзных изменений это будет указано в описании к обновлениям модуля. Мы уже неоднократно добавляли новые колонки в таблицу.


Пример 

/bitrix/php_interface/dbconn.php

// для работы функции AddMessage2Log надо задать константу.
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/mylog-dfkjgdfklj.txt");

/bitrix/php_interface/init.php


$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler( "askaron.reviews", "\\Askaron\\Reviews\\Review::OnAfterAdd",  Array('CMyReview', "OnAfterAdd") );
$eventManager->addEventHandler( "askaron.reviews", "\\Askaron\\Reviews\\Review::OnAfterUpdate",  Array('CMyReview', "OnAfterUpdate") );
$eventManager->addEventHandler( "askaron.reviews", "\\Askaron\\Reviews\\Review::OnAfterDelete",  Array('CMyReview', "OnAfterDelete") );

class CMyReview
{
  public static function OnAfterAdd( \Bitrix\Main\Entity\Event $event )
  {
    AddMessage2Log( "add" );
    $fields = $event->getParameter("fields");
    $primary = $event->getParameter("primary");

    AddMessage2Log($fields);
    AddMessage2Log($primary);
  }

  public static function OnAfterUpdate( \Bitrix\Main\Entity\Event $event )
  {
    AddMessage2Log( "update" );
    $fields = $event->getParameter("fields");
    AddMessage2Log($fields);
  }

  public static function OnAfterDelete( \Bitrix\Main\Entity\Event $event )
  {
    AddMessage2Log( "delete" );
    $primary = $event->getParameter("primary");
    AddMessage2Log($primary );

    //$parameters = $event->getParameters();
    //AddMessage2Log($parameters);
  }
}




Отказоустойчивый обмен с 1С

Решение «Отказоустойчивый обмен с 1С» позволяет выгрузить неограниченное количество товаров даже на самый слабый хостинг.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Решение «Отказоустойчивый обмен с 1С» позволяет выгрузить неограниченное количество товаров даже на самый слабый хостинг.

Модуль снижает нагрузку на сайт при стандартном обмене с 1С.

Модуль необходим, когда:
  • обмен не доходит до конца и завершается ошибкой,
  • обмен съедает всю память, сильно замедляет работу сайта и мешает пользователям,
  • вы хотите быть уверенными, что обмен точно дойдет до конца, и не придется его запускать второй раз потом.
В случае необходимости модуль позволяет остановить обмен с 1С. Если администратор сайта видит, что обмен слишком затянулся, можно отметить флажок «Запретить» в настройках модуля.

Страница решения в Маркетплейсе: 

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.
«1С-Битрикс: Корпоративный портал» - любые редакции.

Демо-версия полностью функциональная. Срок демо-периода 3 дня.

Статьи: 



Настройки → Настройки продукта → Настройки модулей → Отказоустойчивый обмен с 1С

Страница настроек - по умолчанию


В настройках указывается список страниц. Модуль позволяет замедлить любой пошаговый скрипт на сайте.

По умолчанию в настройках указан скрипт обмена с 1С /bitrix/admin/1c_exchange.php, но можно указывать и другие.

Дополнительно:
— если скрипт надо замедлять не всегда, укажите параметр запроса и значение для сравнения.


Если администратор сайта видит, что обмен с 1С слишком затянулся и пошел как-то не так, можно обмен остановить. Отметьте флажок «Запретить» и сохраните настройки:

Страница настроек - запретить обмен

1С покажет сообщение, что обмен не завершен:

Остановлен обмен с 1С

При выгрузке товаров ни в 1С, ни на сайте ничего не испортится. Остановка произойдет, когда очередной шаг закончился, а следующий шаг еще не наступил.

Чтобы снова произвести обмен, снимите флажок «Запретить».

Подбор интервалов

Модуль «Отказоустойчивый обмен с 1С» снижает нагрузку на сервер, но замедляет выполнение обмена.

Непосредственно на нагрузку влияют два параметра:
  • интервал одного шага в секундах,
  • интервал в секундах между шагами.

Интервал одного шага в секундах настраивается в форме настроек интеграции с 1С. По умолчанию 30 секунд.

Магазин → Настройки → Интеграция с 1С

Интервал одного шага в секундах




Интервал в секундах между шагами настраивается на странице настроек модуля «Отказоустойчивый обмен с 1С» для каждой страницы.

По умолчанию 5 секунд.

Настройки → Настройки продукта → Настройки модулей → Отказоустойчивый обмен с 1С

Страница настроек - интервал

Правило:
Чтобы уменьшить нагрузку на сервер, интервал одного шага в секундах надо уменьшать, а интервал в секундах между шагами увеличивать. Побочный эффект: будет увеличиваться общее время обмена.

Значения интервалов подбираются для каждого проекта индивидуально!

В простых случаях достаточно:
Интервал одного шага в секундах 30
Интервал в секундах между шагами 2

С настройками по умолчанию:
Интервал одного шага в секундах 30
Интервал в секундах между шагами 5

В сложных случаях можно настроить так:
Интервал одного шага в секундах 10
Интервал в секундах между шагами 15

В совсем тяжелых случаях:
Интервал одного шага в секундах 5
Интервал в секундах между шагами 20

Не устанавливайте интервал одного шага в секундах в 0. В этом случае никаких шагов не будет, Битрикс будет пытаться сделать загрузку за один шаг.




Отличные цены при обмене с 1С

Модуль служит для корректной выгрузки цен.

С модулем можно выгружать на сайт любые новые типы цен и не бояться, что они сразу станут доступными покупателю.

С модулем можно иметь любые отличные от 1С названия цен на сайте и не бояться, что в 1С названия поменяются, и цены на сайте поломаются.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

<?
   if(CModule::IncludeModule("askaron.pricename"))
   { 
       //здесь можно использовать функции и классы модуля
   } 
?>

Описание модуля

Модуль служит для корректной выгрузки типов цен.

С модулем можно выгружать на сайт любые новые типы цен и не бояться, что они сразу станут доступными покупателю.

С модулем можно иметь любые отличные от 1С названия цен на сайте и не бояться, что в 1С названия поменяются, и цены на сайте поломаются.

Страница настроек


Права на доступ к новым типам цен:

Новый тип цен на сайте доступен всем. Это неправильно, потому что кто-то  может купить по неправильной цене.

Модуль может делать для нового типа цен
- запретить для всех пользователей покупку по новому типу цен
- автоматически создавать и привязывать новую группу пользователей, только для которой будет доступна цена.


Правильное название типа цен на сайте:

По традиции во всех готовых интернет-магазинах цена называется BASE, а в 1С цена называется «Розничная». Из-за этого обычно приходится исправлять везде код сайта под 1С. BASE менять на «Розничная».

Модуль позволяет не исправлять сайт или 1С и сразу использовать готовый магазин, как есть.

Модуль запрещает обмену изменять код типа цен на сайте, связь происходит по внешнему коду.

Опция актуальна для старых магазинов.

В модуле Торговый каталог 15.5.5 добавлена опция, чтобы наименование не менялось.

-----------

Модуль работает и с другими системами, которые обмениваются с сайтом стандартным обменом. Например «Мой склад».

Демо-версия полностью функциональная срок демо-периода 30 дней.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.pricename/

Работает на:
«1С-Битрикс: Управление сайтом» - малый Бизнес, Бизнес и старше. Требуется стандартный обмен с1С
«Битрикс24 в коробке» - любые редакции.

Офлайн-конверсии

Описание модуля

Модуль «офлайн-конверсии» помогает учитывать конверсии, которые по тем или иным причинам не были учтены в яндекс.маркет(например, клиент сделал заказ по телефону), а так же сохраняет в профиле пользователей ClientID яндекс.метрики и Google Analytics, всех устройств, с которых авторизуются пользователи.
Модуль поддерживает многосайтовость и технологию «композитный сайт»

Установка и настройка модуля

После установки модуля, данные о пользователях автоматически начнут собираться и и сохраняться в свойствах заказов и пользователей.
Для того чтобы начать отправлять в Яндекс.Метрику данные об офлайн-конверсии, необходимо произвести настройки Яндекс.Метрики.
На странице https://metrika.yandex.ru/#ID_СЧЕТЧИКА#>?tab=uploads включите учет офлайн-конверсии.
Загрузка конверсий станет доступна в течение суток.
Также Вам необходимо получить доступ к API яндекса, для этого необходимо создать яндекс приложение с доступом к Яндекс.Метрика.

Получить OAuth token.(как получить).

После получения всех необходимых данных можно приступить к настройке модуля.
Настройки модуля доступны по адресу http://#АДРЕС_ВАШЕГО_САЙТА#/bitrix/admin/settings.php?lang=ru&mid=askaron.clientid

На данной странице введите полученный ранее OAuth token, идентификатор счетчика метрики(список доступных метрик) и цель оформления заказа(список целей доступен по ссылке https://metrika.yandex.ru/#ID_СЧЕТЧИКА#?tab=goals.
Если у вас несколько сайтов, то необходимо для каждого из них установить настройки. Переключиться на настройки каждого сайта можно с помощью вкладок в настройках модуля.

Если все настройки введены верно, то после сохранения, становится доступна отправка офлайн-конверсий в Яндекс.Метрику.
Для того, чтобы передать в метрику данные об офлайн-конверсии, нужно в созданный заказ в свойство «Код пользователя для конверсии» вписать короткий код пользователя.
Код вы можете узнать напрямую от пользователя, который оформляет заказ. Для этого нужно вывести этот код в публичной части сайта, доступной пользователю, например, в карточке товара.
Для того, чтобы вывести код пользователя в произвольном месте страницы, в месте, где Вы хотите вывести код введите следующую строку и попросите пользователя сообщить Вам этот код.

<?if (\Bitrix\Main\Loader::includeModule('askaron.clientid')){\Askaron\ClientId\Tools::showString();}?>

После сохранения заказа данные о конверсии отправятся в метрику. Обработка данных происходит в течение 24 часов.


В этом примере код пользователя выведен в карточке товара рядом с ID товара. По аналогии код можно вывести в любом месте страницы.

				

Многосайтовость

Модуль поддерживает работу в многосайтовом режиме, для этого настройки для разных сайтов разделены на отдельные вкладки, при этом настройка «Сохранять ClientID для пользователя» общая для всех сайтов.

Сохранение ClientID пользователей

В настройках модуля Вы можете увидеть пункт «Сохранять ClientID для пользователя». Отметив его, Вы включите сохранение всех ClientID в профиле пользователя. 

Сохранение происходил при авторизации с нового устройства, либо когда у авторизованного пользователя меняется идентификатор счетчика(например, авторизовался в другом аккаунте Google).
Посмотреть сохраненные ClientId пользователей можно в профиле пользователя на вкладке Доп. поля. Так же поля доступы для фильтрации и поиска по ним.

Параллельный и ускоренный обмен с 1С

Модуль «Параллельный и ускоренный обмен с 1С» помогает заметно ускорить обмен с 1С с помощью параллельных выгрузок и отключения ненужных этапов обмена.


Разработчикам:

перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

if(CModule::IncludeModule("askaron.parallel1c"))
{
  //здесь можно использовать функции и классы модуля
}




Описание модуля

Модуль «Параллельный и ускоренный обмен с 1С» помогает заметно ускорить обмен с 1С с помощью параллельных выгрузок и отключения ненужных этапов обмена. Модуль позволяет выгружать цены и остатки отдельно от выгрузки описаний товаров.

Модуль содержит улучшенный компонент импорта товаров и страницы дополнительных настроек к нему.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.parallel1c/

Подарки:

Если вы купите модуль «Параллельный и ускоренный обмен с 1С», то получите в подарок ключи на другие наши модули:

- Продвинутый обмен с 1С
- Журнал изменений товаров
- Разные структуры разделов на сайте и в 1С
- Sitemap.xml - автогенерация карты сайта на кроне. Ускорение Битрикс
- Тюнинг стандартного обмена с 1С или с МойСклад
Реквизиты товара из 1С
- Характеристики торговых предложений из 1С,
Контроль доступа по IP
- Отказоустойчивый обмен с 1С
- Контроль свободного места и бекапов
- Управление почтой
- Завершение регистрации
- Включаемый код
- Отзывы о товаре
- Город по IP, определение местоположения для доставки

Актуальный список подарков и цены смотрите в маркетплейсе:
https://marketplace.1c-bitrix.ru/solutions/askaron.parallel1c/



Работа модуля:

Работает на редакциях, где есть модуль Торговый каталог:
  • «1С-Битрикс: Управление сайтом» - редакции «Малый Бизнес», «Бизнес».
  • «Битрикс24 из коробки» - любые редакции.
Модуль работает с любыми версиями 1С, где есть обмен с сайтом, и с другими системами, например, «МойСклад».


Компонент импорта товаров является копией стандартного компонента из 1С-Битрикс, но в него добавлены очень важные функции. Мы следим за своевременным обновлением своего компонента.


Компонент импорта товаров регулярно обновляется, если обновляется стандартный компонент Битрикса. Наш компонент содержит тот же функционал обмена, но добавлены некоторые важные функции для ускорения обмена.

Модуль периодически обновляется, но все старые версии обменов остаются в нём для лучшей совместимости со старыми 1С или старым ядром 1С-Битрикс. Мы следим за выпуском обновлений 1С-Битрикс.

В отличие от стандартного компонента выгрузки товаров можно запускать параллельно в разные инфоблоки или в разные разделы

Можно запускать параллельно выгрузки товаров в разные инфоблоки или (с некоторыми ограничениями) в разные разделы одного инфоблока.

В настройках обменов некоторые этапы можно пропускать или выполнять не целиком для ускорения обмена

Для ускорения выгрузки цен и остатков мы рекомендуем настроить два обмена.

1. В первом обмене выгружать товары со свойствами и описаниями
2. Во втором обмене выгружать новые товары, предложения, цены и остатки


Типовые два обмена

Комбинации двух обменов рассмотрены в отдельной статье.


Примеры, как можно настраивать смотрите в документации.

1. Можно разделить обмен на 2 части - описания - обмен а01, цены и остатки - обмен а02

2. Можно разделить обмены на много частей, если выгружать товары в разные инфоблоки или в разные разделы одного инфоблока.

3. Методы распараллеливания можно совместить. Например, на 5 инфоблоков по 2 выгрузки (описания и цены с остатками отдельно) будет 10 параллельных обменов.


Установка и настройка модуля, пример с выгрузкой только цен и остатков

Модуль устанавливается из Маркетплейса, как и другие модули 1С-Битрикс и никакие вопросы на задаёт.

После установки перейдите к настройкам модуля.



Магазин → Параллельный и ускоренный обмен с 1С

Меню

Модуль содержит улучшенный компонент импорта товаров с дополнительными настройками. 

На сайте кроме стандартной страницы /bitrix/admin/1c_exchange.php
будут 12 новых страниц

/bitrix/admin/a01_askaron_parallel1c_exchange.php
/bitrix/admin/a02_askaron_parallel1c_exchange.php
/bitrix/admin/a03_askaron_parallel1c_exchange.php
/bitrix/admin/a04_askaron_parallel1c_exchange.php
/bitrix/admin/a05_askaron_parallel1c_exchange.php
/bitrix/admin/a06_askaron_parallel1c_exchange.php
/bitrix/admin/a07_askaron_parallel1c_exchange.php
/bitrix/admin/a08_askaron_parallel1c_exchange.php
/bitrix/admin/a09_askaron_parallel1c_exchange.php
/bitrix/admin/a10_askaron_parallel1c_exchange.php
/bitrix/admin/a11_askaron_parallel1c_exchange.php
/bitrix/admin/a12_askaron_parallel1c_exchange.php

При желании страницы можно добавлять. Обмены a01 и a02 уже настроены для демонстрации. Настройки всех двенадцати обменов на сайте можно менять.


В 1С измените путь для выгрузке товаров с /bitrix/admin/1c_exchange.php на любой из предложенных, типа /bitrix/admin/a03_askaron_parallel1c_exchange.php.

Конкретные примеры настроек обменов приведены в других статьях.


Страница со списком обменов

Ваша задача настроить список обменов и дать им адекватные названия на сайте и в 1С.

По-умолчанию список обменов выглядит так.

С модулем устанавливаются сразу 12 файлов обмена с запасом. Вы можете скопировать файлы и создать собственные файлы обмена вручную, если надо ещё больше.


обмены


Страница настройки обмена

Вам необходимо настроить несколько обменов с разными настройками для параллельных обменов.

По-умолчанию настроены два обмена a01 и a02. Логика обменов:

   a01  a02 
Товары import*.xml  да Записываем только новые товары (старые пропускаем)
Торговые предложения offers*.xml  нет     да   
Цены prices*.xml  нет  да
Остатки prices*.xml  нет  да
Деактивакция товаров (срабатывает при полной выгрузке,
при выгрузке изменений даже стандартный обмен не деактивирует, т.к. неизвестно, что деактивировать)

 да  нет


Логика такой настройки в том, что обмены можно независимо друг от друга запускать, т.к. они выгружают разные данные. При этом второй обмен выгружает гораздо быстрее первого и выгружает сразу важные данные.

При настройке в 1С обмена a02 дополнительно можно отключить выгрузку картинок и свойств, чтобы ещё уменьшить объём выгрузки.


Обмен a01

Настройки обмена 01, часть 1



Настройки обмена 01, часть 2



Настройки обмена 01, часть 3





Обмен a02

Настройки обмена a02, часть 1


Настройки обмена a02, часть 2


Настройки импорта а02, часть 3




Страница настроек модуля


Настройки модуля

Простое распараллеливание обмена на несколько инфоблоков/разделов

Модуль содержит продвинутые механизмы для ускорения обмена. Самый простой из них - разделение обмена на параллельные обмены. Более сложный механизм, с выгрузкой только цен и остатков описан в статье про стандартные настройки

Если у вас на сайте несколько каталогов, то разделить выгрузку на несколько разных очень легко.

Стандартная выгрузка товаров - все каталоги по очереди
 
В таком случае решение очень простое. Надо создать 5 отдельных обменов на каждый каталог.

Скопировать обмены





Получается 5 новых обменов, которые надо настроить и адекватно назвать. Для примера, указано что обмен полный и выполняется ночью. Хотя это может быть обмен изменениями днём.

Пять обменов
На сайте тоже следует хорошо назвать обмены:

Параллельные обмены на сайте

В случае, когда инфоблоки отдельные, как показано выше. Деактивацию можно включить.

В случае, если аналогично выгружаются параллельно разные разделы в один инфоблок, деактивацию включать не надо. Параллельная выгрузка в один и тот же инфоблок разных разделов может некорректно работать с деактивацией.






Прием пожертвований

Модуль «Прием пожертвований» содержит компонент «Прием пожертвований через Робокассу».

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Модуль «Прием пожертвований» содержит компонент «Прием пожертвований через Робокассу».

После установки модуля, перейдем на страницу настроек модуля:

Настройки модуля


Вкладка содержит три параметра настроек, по умолчанию в качестве адреса сервера робокассы установлен обычный сервер, остальные поля пустые. Компонент также содержит данные поля настроек, если они не заданы, то они берутся из настроек модуля. 

Разместим в визуальном редакторе компонент «Прием пожертвований через Робокассу» и рассмотрим настройки: 
 
Параметры компонента.png

Большинство основных параметров необходимы для формирования запроса к Робокассе. Остальные параметры позволяют расширить функциональные возможности компонента: задавать для поля ввода формы сумму по умолчанию, разрешать или запрещать пользователю изменять ее, дополнительный параметр позволяет менять название кнопки. Параметр «Код формы» дает возможность использовать более одного компонента на одной странице.

Рассмотрим страницу с выводом нескольких компонентов имеющих разные настройки:

 
Страница

Первые три компонента имеют различные настройки для поля ввода суммы и надписи на кнопке. В поле ввода четвертого невозможно ввести сумму, она фиксирована параметром настроек.

Стоит заметить, что в поле нельзя ввести отличный от цифр текст, он будет удален функцией скрипта. 

Размещение компонента с помощью модуля «Включаемый код»

Модуль «Включаемый код» предназначен для подстановки любого PHP-кода в любое место на сайте.  

С помощью модуля можно встроить компонент прием пожертвований прямо в текст новости.  
 
Живой пример внутри текста! Это не картинка, а компонент, который вставлен с помощью модуля «Включаемый код»: 
В частности, модуль позволяет встроить компонент «Прием пожертвований» в любой другой компонент с включенным кэшированием. 

Принцип действия прост: разместите в любом месте специальный текст, и вместо него будет подставляться результат выполнения определенного включаемого файла. 

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.include/

Создание включаемого файла:

Самый простой способ - создать включаемый файл на основе готового примера. После установки модуля  «Прием пожертвований» в списке «Примеры включаемых файлов» появится новый пример - askaron.donation.robokassa.php, создадим на его основе включаемый файл.

Создание_Вк_Ф

Теперь в списке Включаемые файлы появился файл с новым случайным именем. В нашем случае - askaron.donation.robokassa_l2f7i1cn.php. Откроем его через пункт меню «Просмотр файла».

Список_Вк_Ф

Файл содержит подсказки с автоматически генерируемым кодом включения файла.

<!--askaron.include 
askaron.donation.robokassa__l2f7i1cn.php
<PARAMS>
    <INV_DESC>Пожертвование в благотворительный фонд</INV_DESC>
    <BUTTON_NAME>Оплатить</BUTTON_NAME>
</PARAMS>
-->

Размещая данный код в любом месте PHP-кода мы передаем модулю
«Включаемый код» указание какой файл открыть - askaron.donation.robokassa_l2f7i1cn.php  и какие параметры ему передать - <PARAMS>...</PARAMS>.

 Код подключения самого компонента.

Заключение: 

Приведенные примеры позволяют без написания сложного кода удобно встраивать один компонент в другой с включенным кэшированием. 

Попробуйте модуль «Включаемый код» на своем сайте: 
http://marketplace.1c-bitrix.ru/solutions/askaron.include/

Продвинутый обмен с 1С

Модуль «Продвинутый обмен с 1С» радикально увеличивает скорость стандартного обмена с 1С, упрощает внедрение и техническую поддержку интеграции.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Модуль «Продвинутый обмен с 1С» радикально увеличивает скорость стандартного обмена с 1С, упрощает внедрение и техническую поддержку интеграции.

Статьи
Модуль «Продвинутый обмен с 1С» — ускоряем стандартный обмен, делаем его понятным и отказоустойчивым

Модуль «Продвинутый обмен с 1С». Ускоряем обмен в десятки раз. Маленькое видео

Продвинутый обмен с 1С. Простой способ ускорить сайт — отложенный сброс Управляемого кеша



Страница решения в Маркетплейсе: 

Работает на: 
«1С-Битрикс: Управление сайтом» - любые редакции.
«1С-Битрикс: Корпоративный портал» - любые редакции.

Для работы функционала Живого лога нужен стандартный модуль Битрикса Push and Pull. Желательно, версии не ниже 14.0.0.

Демо-версия полностью функциональная, срок демо-периода 10 дней.

После установки необходимо ознакомиться с настройками модуля:

Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С

Главная настройка — список тех страниц, к которым будет применяться модуль.

Адреса страниц, для которых применяется модуль

Активность: если флажок  включен — модуль применяется для страницы. Если выключен — никакие настройки модуля не применяются, страница работает, как обычно, как будто нашего модуля нет.

Адрес страницы: непосредственно тот скрипт, который со стороны сайта участвует в обмене с 1С. Указывается в настройках обмена со стороны 1С.

По умолчанию /bitrix/admin/1c_exchange.php — стандартная страница обмена. /bitrix/admin/askaron_pro1c_exchange.php — копия стандартной страницы обмена, обмен с ней работает точно так же, как со стандартной.

Загружать только цены и остатки (файл с описанием товаров будет пропущен) — опция позволяет настроить обмен только для цен и остатков (или торговых предложений). Загрузка описаний товаров будет пропущена.

Статья про настройку выгрузки только цен и остатков.

Про остальные опции модуля сморите другие страницы документации.



Установка, Активация, Регистрация

Модуль устанавливается как любой модуль из Маркетплейса.

При установке модуля модуль спрашивает в какой базе данных хранить сведения для мониторинга обмена.

По умолчанию база .default, в файле /bitrix/.settings.php можно указать другие базы с которыми работает Битрикс.


Активация модуля


Активиция модуля Продвинутый обмен с 1С

Регистрация модуля

В случае, если активация происходит после установки демо-версии, надо Зарегистрировать решение, если Битрикс предложит. Это нужно, чтобы из демо-версии была установлена полноценная версия модуля.

Регистрация модуля Продвинутый обмен с 1С



Настройка выгрузки только цен и остатков

Модуль позволяет быстро обновлять только цены и остатки.

Мы предполагаем, что у вас уже настроен обмен в 1С со страницей /bitrix/admin/1c_exchange.php

Простой способ с одним обменом:

Видео (без звука):



Установите модуль и перейдите на страницу настроек.

Включение только цен и остатков
  • Включите в модуле «Продвинутый обмен с 1С» флажок «Загружать только цены и остатки (файл с описанием товаров будет пропущен)».
  • Сохраните настройки модуля.
  • В настройках обмена в 1С картинки и файлы нужно отключить.
  • Свойства тоже можно можно отключить.
  • Сделайте обмен.
  • Получите полную выгрузку цен и остатков.
Недостаток данного способа в том, что нельзя настроить расписание и забыть о настройках.

Полную выгрузку тоже иногда надо делать: чтобы выгрузить новые товары, удалить ненужные и обновить свойства и картинки. Для этого надо заходить на сайт и в 1С, чтобы вернуть настройки обратно.


Сложный способ с двумя обменами:

Две копии обмена помогут решить проблему с расписанием.

Основные настройки - стандартная - альтернативная

/bitrix/admin/1c_exchange.php — стандартная страница обмена. 

/bitrix/admin/askaron_pro1c_exchange.php — альтернативная страница обмена. Является копией стандартной страницы обмена. Работает точно так же, только адрес другой. 

Мы рекомендуем в 1С использовать две копии настроек обмена с сайтом:

Тот обмен, который у вас есть со стандартной страницей /bitrix/admin/1c_exchange.php, назовите в 1С Полный обмен. 

Скопируйте настройку обмена. Копию назовите Остатки и цены, и укажите ему альтернативную страницу /bitrix/admin/askaron_pro1c_exchange.php. Снимите флажки выгружать картинки и выгружать файлы.

Полный обмен будет делать выгрузку всего, как раньше. А обмен Остатки и цены — только обновление цен и остатков.

Как избежать конфликтов двух обменов: 

Рекомендуем Полный обмен запускать на ночь, а днем обновлять цены и остатки маленьким обменом. Расписание гибко настраивается в 1С. Не запускайте оба обмена одновременно. 

Если необходимо выгружать изменения в УТ 10.3, то создайте в 1С для обмена Остатки и цены новый узел в плане обмена. Не надо использовать один и тот же узел для двух настроек обмена. 

Быстрая запись свойств товаров

Быстрая запись свойств удалена из модуля с версии 5.5.0
Эта опция была актуальна примерно до 18-20 версии 1С-Битрикс. Но потом Битрикс исправился и тоже научился записывать свойства быстро.


Опция позволяет одной галочкой в несколько раз ускорить обмен с 1С на некоторых проектах. 

Перейдите в настройки модуля:  
Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С  

Быстрая запись свойств товаров



Тестирование:

Для тестирования обязательно в настройках обмена (Магазин -> Настройки -> Интеграция с 1С) надо выключить опцию "Использовать контрольные суммы элементов для оптимизации обновления каталога". После тестирования обмена рекомендуем включить опцию обратно.

При тестировании опции «Быстрая запись свойств» смотрите в лог-файле «Непосредственное время записи элемента в базу данных» при включении/выключении опции.


Быстрая запись свойств - лог


Как работает и где нужно применять


Чистое время записи товара записывается в лог-файле. Вы можете сравнить время записи элемента с включенным флажком «быстрая запись свойств товаров» и с выключенным. 

На одном проекте с тысячей свойств мы получали 0.1-0.2 секунды без быстрой записи свойств и 0.8-0.9 с быстрой записью свойств. Увеличение скорости составило примерно 0.7 секунды на один товар. 

Наибольшее увеличение производительности получается для больших инфоблоков, где свойств 1000 и больше. Но и для 100 свойств заметно увеличение производительности. 

Много свойств характерно для онлайн-гипермаркетов, где в одном инфоблоке могут быть разные виды номенклатуры с разными наборами характеристик. 

Быстрая запись свойств безопасна. Она не нарушает обмен, не изменяет исходный код Битрикса, и обработчики событий будут работать, как раньше. Применяется только к инфоблоку товаров, в который идет выгрузка. 

Неоптимальность Битрикса в том, что функции CIblockElement::Add и CIblockElement::Update сразу пытаются записать все 1000 свойств, хотя в товаре только 20-30 свойств заполнено. Намного эффективнее записывать только те свойства, которые пришли из 1С. 


Отказоустойчивость

Отказоустойчивость — не менее важная характеристика обмена, чем скорость.

Для заказчика очень неприятна ситуация, когда обмен шел несколько часов и из-за чего-то прервался. Для разработчика самая страшная ситуация, когда такой заказчик звонит и требует разобраться почему прервался обмен. Вина может быть не в разработчике, а в сервере, но заказчик все-равно будет звонить разработчику.

Первый наш модуль называется Отказоустойчивый обмен с 1С. Мы его сделали для слабых хостингов, где из-за ограничений обмен сам может создать такую нагрузку, что сервер выдаст ошибку. На основе богатого опыта внедрения мы пересмотрели некоторые вещи.

В новом модуле «Продвинутый обмен с 1С» мы реализовали те же самые возможности и добавили несколько новых. Главное — мы добавили определение нужных для обмена констант Битрикса и настроек PHP. 

Часть настроек сразу включены модулем, но некоторые — вынесены в опции:

Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С

Отказоустойчивость


Описание опций:

Интервал между шагами при импорте товаров. Небольшие задержки в некоторых случаях позволяют существенно снизить нагрузку на сервер, чтобы обмен был надежнее.

По умолчанию 0 секунд, чтобы не задерживать обмен. Даже на самых быстрых серверах установите хотя бы 1 секунду. При длине шага 30 секунд обмен удлинится на 3 процента, но заказчик будет реже звонить по поводу прерванного обмена.

Максимальное время выполнения шага скрипта и Максимальный объем памяти доступный шагу скрипта:

Два широко применяемых параметра. Модуль ставит значения по умолчанию 300 секунд и 1024 мегабайта. Если много — уменьшайте, если мало — увеличивайте.

Интересно бывает посмотреть, прервется ли обмен на 45 секундах и 64 мегабайтах. Так можно выявить узкие места с помощью лог-файла.


Проверка источника запроса (для старых 1С)

Некоторые пользователи видят ошибки вида:

При выгрузке товаров
Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента

При обмене заказами
Ошибка проверки источника запроса. Обновите модуль обмена


В версии Битрикса 14.5 появился новый режим контроля сессий при обмене с 1С. Это необходимо для безопасности и работает только с новыми дополнениями Битрикса (4.0.0.0 и выше) для 1С.

Ошибка возникает, когда на сайте включены проверки для новых версий обмена в 1С, а 1С старая.

Проверка источника запроса включается сама при обновлениях Битрикса, или при обмене с новой 1С.

Модуль позволяет администратору отключить проверку для стандартного обмена с 1С.

Модуль позволяет отключить проверку постоянно, так, чтобы она не включалась обратно.

Магазин → Продвинутый обмен с 1С → Проверка источника запроса

Проверка источника запроса

Попробуйте отключить проверку источника запроса при обмене.

Проверка источника запроса Товары и заказы


Для выгрузки заказов в разные 1С (или в Битрикс24) мы рекомендуем использовать разные пути файлов. Так удобнее и не происходит путаницы при экспорте заказов.

Ускорение сайта. Отложенный сброс управляемого кеша инфоблоков

Уникальный функционал. Позволяет волшебным образом двумя галочками ускорить сайт  пока идет обмен с 1С.

Если вы замечаете, что сайт тормозит пока идет обмен, то, вероятно, дело в том, что сбрасывается управляемый кеш.

Технология отложенного сброса управляемого кеша сглаживает неприятные последствия мгновенного сброса кеша пока идет запись. По сайту становится легче ходить, пока идет обмен.

Сброс управляемого кеша инфоблоков. Почему сайт может тормозить?

Статья о новых возможностях:
Продвинутый обмен с 1С. Простой способ ускорить сайт — отложенный сброс Управляемого кеша




Высокопосещаемый сайт во время обмена с 1С может работать очень медленно из-за того, что при обновлении товаров, остатков и цен постоянно сбрасывается управляемый кеш инфоблока.

Управляемый кеш инфоблока сбрасывается сразу для всех товаров инфоблока. Запрет сброса кеша позволяет существенно ускорить сайт.

Пример 1:

Допустим, на вашем сайте все товары хранятся в инфоблоке ID=4.

Обмен с сайтом идет 10 минут.

В течение 10 минут обновляется 1000 товаров.

Если на сайте включен управляемый кеш, кеш инфоблока будет сбрасываться по тегу iblock_id_4 каждый раз, когда обновляется описание товара, цена или остаток. Более 1000 раз за 10 минут.

«Благодаря» технологии управляемого кеша, сайт фактически живет без кеша 10 минут. Если в течение 10 минут на сайте активно ходят пользователи и поисковые боты, сайт начинает работать существенно медленнее.

Пример 2:

Допустим, вы не делаете полную долгую выгрузку.

Но вы делаете очень-очень часто раз в 1-2 минуты выгрузку изменений на сайт. Например, у вас активно в течение дня меняются остатки.

В этом случае тоже нередкой будет ситуация, когда пользователи заходят на страницу, где кеш отсутсвует, и сайт открывается дольше.


Что делать?

Если вы увидели, что при изменении товаров компоненты стали работать неприемлимо медленно, надо принимать меры.
 
Радикальный способ — отключить управляемый кеш на сайте.

Это нехорошо: на сайте будут неактуальные цены и остатки по нескольку часов, пока время кеша не истечет.

Оптимальный способ:

Модуль позволяет отключить сбос кеша для инфоблоков непосредственно во время обмена, и выполнить сброс на несколько минут позже.


Настройки модуля

Интернет-магазин -> Продвинутый обмен с 1С -> Настройки модуля


Запрещать сброс управляемого кеша инфоблока

Флажок отключает сброс управляемого кеша инфоблоков пока идет выполнение скрипта обмена.

Опция не распространяется на контент-менеджера. Контент-менеджер может изменять элементы инфоблоков и сбрасывать управляемый кеш как обычно.

Отключается сброс по стандартному тегу, вроде iblock_id_4.

Если у вас используются самодельные теги кеша, то сброс кеша будет происходить по ним.



Ускорение сайта - запрещать сброс управляемого кеша


Периодический сброс управляемого кеша

Предыдущая опция только запрещает сбрасывать управляемый кеш. Но кеш надо когда-то сбрасывать.

Для сброса управляемого кеша служат опции:

- Периодически сбрасывать управляемый кеш с помощью агента

Агент включается и, например, каждые 15 минут сбрасывает управляемый кеш инфоблоков.

Агент сбрасывает кеш только в тех инфоблоков, где изменялись элементы, разделы или настройки инфоблока.

- Интервал запуска агента

Можете установить как часто должен запускаться агент. Оцените насколько актуальные данные в шаблонах компонентов вам нужны.. Рекомендуем диапазон от 5 до 30 минут. По умолчанию 15 минут.

- Пересоздать кеш на главной странице сайта после сброса кеша агентом

Агент после сброса кеша открывает главную страницу сайта. При многосайтовости открываются все главные страницы сайтов.

Пересоздаётся кеш компонентов на главной странице. У следующих пользователей не происходит задержки, когда они откроют главную страницу.

Опция хорошо работает, если перевести агенты на крон. Если агенты выполняются на хитах посетителей, то опцию лучше выключить.


Ускорение сайта - агент


Сравнение инфоблоков

Инструмент для сопоставления инфоблоков по XML_ID

Иногда надо сопоставить товары на сайте и в 1С, при условии, что они заполнялись по разному. В этой ситуации можно выгрузить все товары из 1С в тестовый каталог на сайте, а потом сравнить с рабочим.

Если товары совпадают по названию или по свойству (штрихкод или артикул) то можно сделать одинаковые XML_ID.


Сравнение инфоблоков

Отладка

Внедрение и качественная техподдержка обмена с 1С невозможна без инструментов отладки:

Перейдите на страницу настроек: 

Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С 

Отладка

Подробное описание инструментов отладки — в уроках главы.


Остановка и запрет обмена

Иногда необходимо запретить или остановить обмен с 1С.

Отметьте флажок «Запретить выполнение скрипта».

Запрет выполнения

Модуль корректно прервет обмен. В следующий раз 1С будет отправлять данные заново. Вы можете посмотреть, идет ли сейчас обмен с 1С в «Живом логе».

Обратите внимание: вы не можете прервать обмен в самом начале на этапе, когда 1С только готовит данные для передачи на сайт.

Запрет обмена позволяет удобно переносить сайт с одного хостинга на другой. При выгрузке изменений может произойти рассинхронизация, если на старом хостинге сайт не закрыть или не запретить обмен.




Живой лог

Живой лог удалён из модуля с версии 5.5.0


Живой лог в реальном времени показывает ход обмена с 1С: запросы от 1С и ответы сайта.

Видео-демонстрация (без звука):



Очень удобно наблюдать за тем, на каком шаге сейчас обмен, и, как быстро движется.

Живой лог - обмен

Актуально для любых 1С, но особенно для 1С Управление торговлей 11, которая вообще ничего не показывает пользователю о ходе обмена.

Живой лог использует модуль Битрикса Push and Pull. Рекомендуется версия модуля Push and Pull не ниже 14.0.0. 

Инструмент сделан для владельцев сайта и администраторов. 

Разработчикам для более глубокой отладки рекомендуется использовать другой инструмент модуля «Лог-файл».


Включение Живого лога:

Перейдите в настройки модуля:
Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С

Включите флажок «Живой лог» и нажмите «Сохранить» внизу страницы.

Включить Живой лог

Флажок включает и выключает отправку в Живой лог сообщений от обмена с 1С.

Не бойтесь включать и выключать флажок в момент, когда идет обмен. Обмен не прервется и никак не нарушится.

В процессе обмена отправка сообщений в Живой лог занимает совсем немного времени, а очередь сообщений регулярно очищается. На большинстве сайтов этот флажок можно постоянно оставлять включенным.

Живой лог работает только для указанных в настройках страниц с включенным флажком активность.

Адреса страниц, для которых применяется модуль


Проверка работы Живого лога:

Перейдите на страницу Живого лога:
Магазин → Продвинутый обмен с 1С → Живой лог

Нажмите кнопку Проверить работу Живого лога. Будет отправлен тестовый запрос.

Проверить работу Живого лога

Если все хорошо, то вы увидите сообщение:
— Живой лог работает.

На Виртуальной машине Битрикса 4.2 и выше уже настроен сервер очередей nginx-push-stream-module. Поэтому сообщения в Живом логе отображаются мгновенно. 

Если nginx-push-stream-module отсутствует, Живой лог будет работать без него. Вы увидите сообщение «Живой лог работает», но с задержкой от 10 до 60 секунд. Не покидайте страницу, дождитесь ответа.


Сервер очередей nginx-push-stream-module

Рекомендуем использовать сервер очередей. Поэтому, если есть возможность, перейдите на страницу 
Настройки → Настройки продукта → Настройки модулей → Push and Pull

и включите флажок:
На сервере установлен "Сервер очередей" (nginx-push-stream-module).

Уточните у технической поддержки вашего хостинга, настроен ли у вас сервер очередей nginx-push-stream-module. Важно: наша техподдержка не занимается настройкой  nginx-push-stream-module на вашем сервере. 


Использование Живого лога

Главная прелесть Живого лога — наглядность. Всегда можно зайти на специальную страницу и посмотреть, на каком шаге сейчас обмен, и, как быстро движется.

На слабом хостинге, когда сайт вдруг начал тормозить, с помощью Живого лога можно определять идет обмен с 1С или нет.

Живой лог может использоваться не только для обмена с 1С, но и для отладки любого пошагового скрипта.



Лог-файл

Что делать, если обмен идет, но вдруг на каком-то шаге прерывается?

Традиционный способ отладки — запись шагов в лог-файл.

Перейдите в настройки модуля: 
Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С 

Отметьте флажок:
Записывать все шаги в обычный лог-файл.

Нажмите «Сохранить» внизу страницы.

Записыватьвсе шаги в обычный лог-файл.png

Важно: В отличие от Живого лога в лог-файл записывается очень много информации, гораздо больше чем вы видите в живом логе.

Размер лог-файла ограничен опцией «Максимальный размер лог-файла»


Максимальный размер лог-файла


В лог-файл записывается информация о записи элементов, цен, остатков и служебных полей товара.

Если обмен постоянно прерывается на одном и том же месте, то с помощью лог-файла можно найти это место.

Лог-файл позволяет оценить время выполнения тех или иных этапов обмена.

На сайтах в кодировке UTF-8 для удобства все результаты обмена с 1С конвертируются и записываются в лог-файл в UTF-8.



Информация о последней выгрузке

Можно посмотреть время последней успешной выгрузки.

Перейдите на страницу:

Магазин → Продвинутый обмен с 1С → Последний обмен

Последний обмен



Выгрузка товаров из 1С на сайт
 
Время выгрузки товаров и время выгрузки цен записываются отдельно. Записывается только последний успешный обмен, который дошел до конца

В каталоге товаров можете вывести время обновления цен, если требуется показать клиентам, что цены актуальны:

В данном случае выводим время обновления файла торговых предложений. Потому что в старых версиях обмена со стороны 1С цены и остатки выгружаются в файле торговых предложений

if ( CModule::IncludeModule("askaron.pro1c") )
{
  echo "Время обновления цен: ".CAskaronPro1c::GetLastSuccessOffersDate("нет");
}

Функция возвращает дату и время в формате текущего сайта.

Функция имеет единственный необязательный параметр — текст, который выведется в случае, если обмен еще не проводился, и даты нет:

string CAskaronPro1c::GetLastSuccessOffersDate( $default_value = "" );


Экспорт заказов с сайта в 1С
  
Вы можете не только посмотреть дату последней выгрузки заказов, но и непосредственно повлиять на обмен.

Можно поменять дату последнего обмена, и тогда заказы выгрузятся с сайта начиная с этой даты.

Если дату очистить, то выгрузятся все заказы.





Дополнительно

Если количествo не пришло из 1С, то устанавливать 0

 Данная опция исправляет ошибку при выгрузке доступного количества товаров из 1С. Когда остаток товара в 1С равен 0, а на сайте он ещё есть в наличии.

Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С

На вкладке «Дополнительные настройки»:

Если количество не пришло то записывать 0


Доступное количество приходит из 1С в файле offers.xml, например, <Количество>10<Количество>.

В Битриксе раньше считалось, что если <Количество> не пришло, то остаток надо записать 0.

В информационных блоках версии 14.0.6 от 2014-01-13 произошло важное изменение:
Теперь если <Количество> не пришло, то 0 не записывается. Ничего не происходит. Остается старое значение больше 0. Товар остается на сайте, как будто он есть в наличии.


В новых версиях дополнения Битрикса для 1С выгружается не пустое значение, а <Количество>0<Количество>, и этой ошибки больше нет. 0 записывается, как надо.

Но со старыми версиями 1С эта ошибка есть. На текущий момент (инфоблоки 14.5.5) поведение Битрикса не исправлено.

Опция «Если количествo не пришло из 1С, то устанавливать 0» позволяет без изменения кода в ядре Битрикса или в 1С записывать 0, если ничего не пришло.

Опция влияет только на доступное количество товаров. Со складами не работает.

Как проверить есть ли ошибка на вашем сайте, и нужна ли вам эта опция?

  • Выгрузите на сайт товар с количеством > 0.
  • Измените остаток в 1С, чтобы было 0.
  • Выгрузите на сайт еще раз.
Если у вас количество не стало 0,  значит вам следует попробовать эту опцию.

Внимание: если у вас используются торговые предложения, и вы включили опцию «Если количествo не пришло из 1С, то устанавливать 0», то может ничего не поменяться при следующем обмене.

Попробуйте отключить в настройках обмена с 1С ( Магазин → Настройки → Интеграция с 1С ) опцию «Использовать контрольные суммы элементов для оптимизации обновления каталога». После этого повторите обмен.

Опция «Использовать контрольные суммы элементов для оптимизации обновления каталога» полезная и реально ускоряет обмен. Включите ее обратно, после полной выгрузки товаров.





Константы разработчика

Константы не рекомендуется использовать в проектах. Константы сделаны разработчиком для возможного применения в 1С-Битрикс младше 18.0.0. Работа обмена с константами никак не гарантируется и не поддерживается.

Включает функционал «Живой лог», который удалён с 5.5.0
define("ASKARON_PRO1C_DEBUG_LIVE_LOG", true);

Включает функционал «Быстрая запись свойств», который удалён с 5.5.0
define("ASKARON_PRO1C_DEBUG_FAST_WRITE", true);

Реквизиты товара из 1С

Модуль «Реквизиты товара из 1С» разбивает множественное свойство «Реквизиты» на отдельные строковые свойства при выгрузке из 1С:

Работа модуля «Реквизиты товара из 1С»


Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Статья:

Модуль «Реквизиты товара из 1С» 2.0. Когда что-то выгружается не туда или не оттуда


Название товара для английской версии сайта


Хотим завести англ. версию сайта и в ней названия товаров на англ. языке. Хотелось бы брать для русской версии названия из одного свойства, для англ. из другого. Ваш модуль такое может? Было бы здорово, если бы мог. Или может подскажете, как такое реализовать?



Как правило, для английской версии сайта делают другой инфоблок. Там другая валюта, другие цены, другие описания, другие названия. Наш модуль модуль поможет выгружать разные названия и аналогично другие описания

Выгрузка разных названий в разные инфоблоки:

В 1С сделайте два свойства (дополнительных реквизита):

Название РУ
Название АНГЛ

На сайте получится у вас два свойства с кодами:
NAZVANIE_RU
NAZVANIE_ANGL

Переименуйте в русском инфоблоке:
NAZVANIE
NAZVANIE_ANGL

Переименуйте в Англйском инфоблоке:
NAZVANIE_RU
NAZVANIE

И укажите в настройках модуля выгружать название из свойства NAZVANIE. Это общая настройка. Она будет работать для разных инфоблоков.

Аналогично можно выгружать краткое наименование и детальное наименование.

Счётчик комментариев

Модуль «Счётчик комментариев» пересчитывает количество комментариев для новостей и товаров и корректно сбрасывает кэш.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:

Описание модуля

Обычно комментарии к новости или товару делают стандартными средствами Битрикса с помощью модуля форума.

Решение «Счетчик комментариев» позволяет связать инфоблоки и форумы.

Модуль пересчитывает количество комментариев при обсуждении на форуме и записывает новое число в элемент инфоблока. Решение может сбрасывать кэш инфоблока, если это необходимо.

Модуль применяется для комплексных компонентов «Новости» (bitrix:news) и «Каталог» (bitrix:catalog), в которых есть «Отзывы» (bitrix:forum.topic.reviews). Редактировать  шаблоны не требуется.

Бывает, что в стандартных компонентах количество отзывов не обновляется. Модуль «Счётчик комментариев» исправляет этот недостаток.

Модуль работает не только с компонентом «Отзывы», а еще, если обсуждение идёт отдельно на форуме.

Демо-версия полностью функциональная. Срок демо-периода 30 дней.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.commentcounter/.


Подсчёт комментариев без использования модуля «Счётчик комментариев»

SampleBad.png



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

SampleGood.png


В списке элементов количество комментариев тоже обновляется:

Список новостей



Видео работы модуля

1. Работа стандартных компонентов Битрикса без модуля «Счетчик комментариев»
2. Работа с модулем «Счетчик комментариев»




Установка и настройка модуля

Устанавливается также, как и другие партнерские модули.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.commentcounter/.

Работает на:
- «1С-Битрикс: Управление сайтом» - редакция «Стандарт» и выше.
- «1С-Битрикс: Корпоративный портал» - любые редакции.

Требуется:
- наличие модуля инфоблоков,
- наличие модуля форумов.


Настройки:

После установки перейдите к настройкам модуля

Настройки->Настройка продукта->Настройка модулей->Счётчик комментариев

Settings2_1.png

Опция Описание Значение по умолчанию
Список форумов для комментариев Список пар:
инфоблок -> форум для комментариев.
не задано
Сбрасывать кеш инфоблока при обновлении счётчика: При выборе данной опции будет автоматически происходить сброс кеша в инфоблоке после изменения счётчика. Y
Сбрасывать кеш не чаще, чем (секунд) Опция задаёт минимальное время (в секундах) между сбросами кеша для каждого инфоблока. При значении "0" кеш будет сбрасываться сразу после каждого изменения счётчика.

Опция используется только, если предыдущая опция включена.

Опция сделана для больших проектов, где встречаются бурные обсуждения и кэш сбрасывается часто. Опция позволяет сделать так, чтобы кэш сбрасывался реже.
0


Замечание:

Для того, чтобы кэш сбрасывался, необходимо, чтобы управляемый кэш был включен. По умолчанию в Битриксе эта настройка включена.

Тюнинг стандартного обмена с 1С или с МойСклад

Описание модуля

Модуль содержит набор обработчиков данных. Обработчики данных - это мини-модули для различных модификаций данных при выгрузке из 1С.

Сердце модуля - страница установленных обработчиков данных. Вы можете свободно устанавливать и удалять обработчики, которые вам нужны. Один и тот же обработчик данных можно установить несколько раз с разными параметрами.

Стандартные обработчики решают задачи, когда данные из 1С выгружаются на сайт не так или не туда. 


Подробнее про обработчики данных

Обработчики данных представляют собой что-то вроде маленьких модулей для Битрикса.

Термина Обработчик данных в Битриксе нет. Мы его придумали специально для этого модуля.

В Битриксе есть обработчики событий, обработчики платёжных систем, обработчики служб доставки и т. п.

Обработчики данных содержат действия, которые надо выполнить при наступлении определенных событий Битрикса. Например, когда что-то выгружается из 1С и записывается на сайте.

У обработчиков данных есть свои страницы настроек.

Один обработчик данных может быть установлен в системе несколько раз с разными настройками.

Стандартные обработчики данных лежат в папке модуля.


Пользовательские обработчики данных могут лежать в папках

 /bitrix/php_interface/include/askaron.handlers1c/ 
 /local/php_interface/include/askaron.handlers1c/

С помощью модуля можно делать не только обработчики данных для обмена с 1С. Можно решать совершенно любые задачи, для которых применяются обработчики событий Битрикса. Модуль позволяет использовать ваши собственные обработчики событий в красивом интерфейсе.

В отличие от модулей Битрикса наши обработчики данных можно устанавливать несколько раз с разными параметрами.


Структура обработчика данных

Наши обработчики данных состоят из раздела, в котором 2 обязательных файла: .description.php и handler.php:

.description.php содержит массив с описанием модуля
handler.php содержит функции обработчиков событий.

Еще может быть один необязательный файл .parameters.php

.parameters.php аналогичен файлу .parameters.php для компонентов. Нужен для задания списка параметров на странице настроек обработчика данных.


Обработчики данных


Доступные обработчики данных






Структура обработчика данных

Наши обработчики данных состоят из раздела, в котором 2 обязательных файла: .description.php и handler.php:

.description.php содержит массив с описанием модуля
handler.php содержит функции обработчиков событий.

Еще может быть один необязательный файл .parameters.php

.parameters.php аналогичен файлу .parameters.php для компонентов. Нужен для задания списка параметров на странице настроек обработчика данных.


Стандартные обработчики данных лежат в папке модуля:

/bitrix/modules/askaron.handlers1c/lang/ru/handlers/

Изучайте код обработчиков, копируйте стандартные обработчики, делайте свои собственные.

Пользовательские обработчики данных могут лежать в папках

 /bitrix/php_interface/include/askaron.handlers1c/ 
 /local/php_interface/include/askaron.handlers1c/

С помощью модуля можно делать не только обработчики данных для обмена с 1С. Можно решать совершенно любые задачи, для которых применяются обработчики событий Битрикса. Модуль позволяет использовать ваши собственные обработчики событий в красивом интерфейсе.

В отличие от модулей Битрикса наши обработчики данных можно устанавливать несколько раз с разными параметрами.


Как сделать собственный обработчик данных:

Собственные обработчики лучше всего копировать и переименовывать. Чтобы сделать свой обработчик достаточно скопировать папку 
/bitrix/modules/askaron.handlers1c/lang/ru/handlers/demo1/
в
/bitrix/php_interface/include/askaron.handlers1c/demo2/

В файле /bitrix/php_interface/include/askaron.handlers1c/demo2/handler.php надо переименовать класс Demo1Handler в Demo2Handler

В обработчике обязательно, чтобы класс назывался, как папка+Handler


.description.php

Смотрите .descripton.php в обработчике demo1


.parameters

Смотрите .parameters.php в обработчике demo1 - в файле максимальное количество самых разных параметров с примерами.

Файл .parameters.php необязательный. В этом случае параметров у обработчика не будет.



handler.php

Смотрите handler.php в обработчике demo1 и в других обработчиках.

Файл handler.php содержит класс, который наследуется от BaseHandler

<?php
namespace Askaron\Handlers1c;
class MyImportHandler extends BaseHandler
{

}


Класс MyImportHandler может быть пустым и ничего не делать. Название класса совпадает с именем папки myinport + Handler

Настоятельно рекомендуем для собственных классов использовать префикс My, или какой-нибудь другой уникальный, понятный вам.


Класс MyImportHandler переопределяет поля и методы класса BaseHandler, можно переопределять:

public static function getInstallData( $HANDLER_ID = null )

Возвращает массив со списком обработчиков событий, эти обработчики событий устанавливаются в системе.


public static function job( ?string $strParam = null ): array

Возвращает массив с полями: успех/неуспех, текст.

Специальная функция которая что-то делает. Вызывается пользователем или кроном на отдельной странице.

Информация о функции job выводится только, если у обработчика задан параметр в .description.php 'HAS_JOB' => true.

Указывайте в .description.php 'JOB_DESCRIPTION_DETAIL_HTML' => "Комментарий, что делает ваша функция job()".

Далеко не у всех обработчиков данных есть функция job.

Но бывает нужно что-то тестировать, импортировать, экспортировать, переиндексировать и для этого можно создать функцию класса, которая прочитает параметры компонента и что-то сделает.

Например: после настройки обработчика, который копирует значение из свойства в другое свойство, надо обновить все товары.



Функция job

Обработчик данных может содержать функцию job() для каких-то специальных задач, кроме обработки событий.

Программист может предусмотреть действия, который надо выполнить вручную, либо запускать на кроне.

Бывает нужно что-то тестировать, импортировать, экспортировать, переиндексировать и для этого удобно создать функцию класса, обработчика которая прочитает параметры обработчика данных и что-то сделает.

Функцию можно назвать как-угодно, но в модуле предусмотрен готовый интерфейс для запуска функции с именем job.

Интерфейс модуля можно использовать не только для обработчиков событий, но и для задач на кроне.





Классы и функции

CAskaronHandlers1c

\CAskaronHandlers1c::init();

Файл инициализации /bitrix/tools/askaron_handlers1c_init.php содержит код подключения обработчиков событий.

Этот файл генерируется сам при изменении списка установленных обработчиков данных.

Файл подключается сам на событии OnPageStart методом \CAskaronHandlers1c::init(). Вызывать метод не нужно.

Однако, если ваши обработчики данных тоже используют OnPageStart, то можете самостоятельно подключить этот файл раньше с помощью кода в /bitrix/php_inteface/init.php

Файл: /bitrix/php_inteface/init.php

Код:

if(\Bitrix\Main\Loader::includeModule("askaron.handlers1c"))
{
  CAskaronHandlers1c::init();
}



\CAskaronHandlers1c::log($value, $label = "");

Метод используется в обработчиках данных. Авторы обработчиков оставляют этот метод в коде, чтобы иметь возможность отладки без изменения кода.

Метод пишет в лог отладочную информацию, если включена опция в настройках модуля «Включить запись отладки в лог»:


    public static function OnBeforeIBlockElementAddHandler(&$arFields)
    {
            $arParams = Manager::getHandlerArParams(static::$CALLED_HANDLER_ID);

            \CAskaronHandlers1c::log($arParams, '$arParams');
            \CAskaronHandlers1c::log($arFields, '$arFields add start');

            static::OnBeforeWrite($arFields, $arParams);

            \CAskaronHandlers1c::log($arFields, '$arFields add end');
    }

CAskaronHandlers1cTools

bool \CAskaronHandlers1cTools::IsCatalogImport();


Функция по параметрам URL узнаёт, если идет выгрузка товаров из 1С.


array \CAskaronHandlers1cTools::getProductOfferInfo( $ELEMENT_ID );


Функция по ID элемента узнаёт

ID товара
ID инфоблока товаров,
ID предложения (если $ELEMENT_ID предложение)
ID инфоблока торговых предложений,
ID свойства привязки 

$arProductOfferInfo = \CAskaronHandlers1cTools::getProductOfferInfo(24663);

Результат

Array
(
    [PRODUCT_ID] => 24663
    [PRODUCT_IBLOCK_ID] => 17
    [OFFER_ID] => (empty string) ""
    [OFFER_IBLOCK_ID] => 20
    [OFFER_PROPERTY_ID] => 199
)





string \CAskaronHandlers1cTools::GetNewElementCode( $IBLOCK_ID, $NAME )

Возвращает символьный код для нового элемента инфоблока. Делает транслит названия, но если такой элемент есть, то будет добавлено число 1,2,3....


string \CAskaronHandlers1cTools::GetIblockPropertyByCode( $iblock_id, $code )

Возвращает настройки свойства. Используется статический кеш, функцию можно смело вызывать много раз для одного свойства.


mixed \CAskaronHandlers1cTools::GetIblockIdBySectionId( $section_id )

Возвращает ID инфоблока по ID раздела. Результат запоминается в статическом кеше, функцию можно вызывать много раз для раздела.






\Askaron\Handlers1c\Manager

Служебный класс \Askaron\Handlers1c\Manager для управлением обработчиками данных.


public static function runJob( int $HANDLER_ID, ?string $strParam = null ): array
Метод запускает у обработчика функцию job. 

Параметры
- ID обработчика, обязательный
- параметр обработчика, необязательный, строка.

Метод можно использовать для запуска скриптов кроном.

@set_time_limit(0);
$arResult = \Askaron\Handlers1c\Manager::runJob( $ID, $strParam );
echo $arResult["MESSAGE_FULL"];
echo "\n";

Возвращает массив:

array(
  "STATUS" => true / false
  "MESSAGE" => "Сообщение от обработчика"
  "TIME" => 0.001, // время исполнения
  "MESSAGE_FULL" => "Обработчик ID=1 Время выполнения 0.001 сек.\n Ответ: Сообщение от обработчика" 
)

Функция записывает результат в Журнал событий.

Стандартные обработчики данных

copy_askaron_moysklad_property - Скопировать свойство при работе модуля «МойСклад. Дополнительный импорт через API»

При работе модуля «МойСклад. Дополнительный импорт через API» после обновления элемента можно скопировать свойство в другое свойство.

Пример, как скопировать свойство с кодом ASKARON_MOYSKLAD_CODE в свойство с кодом CML2_ARTICLE.

Если у вас происходит выгрузка из 1С, то лучше стандартные свойства CML2_ARTICLE переименовать код в CML2_ARTICLE_1С и создать новое CML2_ARTICLE




copy_askaron_moysklad_property

copy_element_property - Свойства элемента инфоблока. Копиросание свойств из одного в другое при обновлении элемента

в разработке

copy_order_fio - Заказ. Заполнить служебное свойство ФИО из свойств «Фамилия Имя Отчество»

Создайте на сайте свойство «ФИО» с флажком «Служебное». Укажите в настройка обработчика свойства Фамилия, Имя и Отчество.


Рабочий стол - Магазин - Настройки - Интеграция с 1С

Устанавливаем наше новое свойсво для наименования контрагента в 1С


Настройки обмена с 1С

demo1 - Демо. Демонстрационный обработчик для разработчиков

element_check_images - Проверка картинок при сохранении элемента инфоблока

Проверяет размер файла при сохранении. Может не сохранять, если картинка слишком большая или слишком маленькая по ширине или высоте.

Сценарий применения 1: запретить контент-менеджерам загружать слишком маленькие картинки и выдавать ошибку.

Сценарий применения 2: при обмене с 1С не записывать слишком маленькие картинки, но ошибку не выдавать

Сценарий применения 3: Создание невозможного правила, чтобы контент-менеджеры в принципе не могли записать картинку. Можно установить обработчик  с невозможным условием ширина от 100000 и до 1, и не выдавать ошибку. Тогда при проверке картинки, новая картинка загружена и сохранена не будет. 


Обработчик может записывать в Журнал событий, если картинка не подходит. Удобно для анализа.




element_code - Красивые ЧПУ. Символьный код элемента из свойств (бренд, артикул и т. д.)

Возможность из артикула, производителя и других свойств сделать символьный код

Поддерживаются строковые, числовые и списочные поля.

В настройках надо указать инфоблоки и символьные коды свойств. Отметьте события (добавление или добавление и изменение), когда срабатывать обработчику


element_code - Красивые ЧПУ. Символьный код элемента из свойств (из артикула, бренда и т. д.)

element_no_update - Поля элемента инфоблока. При выгрузке каталога из 1С запретить записывать или изменять поля элемента инфоблока

iblock_no_update - Поля инфоблока. При выгрузке каталога из 1С запретить менять название и описане инфоблока

Делаем так, чтобы название и описание инфоблоков не менялось при выгрузке из 1С


iblock_no_update


nds - НДС. Установить ставку НДС при выгрузке товара

Обработчик устанавливает ставку НДС и флажок «НДС включен в цену» при выгрузке товаров из 1С, МоегоСклада и подобных.

Обработчик использует события D7 ORM. Требуется версия модуля catalog не ниже v17.6.0.


offer_name - Названия торговых предложений. Формировать названия торговых предложений из названий товаров и характеристик

order_comment - Заказ. Заполнить комментарий

Обработчик заполняет комментарий менеджера из свойств заказа и комментария пользователя


order_comment - Комментарий менеджера


Результат:

order_comment - Комментарий менеджера






order_delivery_type - Заказ. Записать тип способа доставки в свойство

В зависимости от способа доставки можно записать какое-нибудь значение в свойство, например: «самовывоз», «курьер», «пункт выдачи», «служба доставки курьером» и т. п.

Событие срабатывает при создании нового заказа. Записывается только первая доставка в случае, если их несколько.



price_no_delete - Значение цены. Запретить удалять значения цен при выгрузке товров из 1С

Если у товара есть цены заполненные вручную, то они удаляются при выгрузке других цен из 1С. Обработчик запрещает удалять значения некоторых цен при выгрузке из 1С

Выберите инфоблоки и типы цен, значения которых не будут удаляться при выгрузке товаров из 1С.

Обработчик использует события D7 ORM. Требуется версия модуля catalog не ниже v17.6.0.

pricegroup - Тип цен. При выгрузке из 1С нового типа цен создать новую группу пользователей и привязать к ней тип цен

pricenobody - Тип цен. При выгрузке из 1С нового типа цен привязать тип цен к группе nobody (сделать новый тип цен недоступным никому)

product_no_update - Поля товара. При выгрузке каталога из 1С запретить записывать или изменять поля товара

Обработчик срабатывает при выгрузке каталога из 1С, МоегоСклада и подобных. Обработчик запрещает изменение полей каталога товаров: доступного количества, веса, размеров и других слуебных полей товара.

Обработчик использует события D7 ORM. Требуется версия модуля catalog не ниже v17.6.0.

product_quantity_active - Активность. Зависимость активности товара от количества

Обработчик помогает деактиваровать товар, если количество стало 0. Это нужно на некоторых сайтах, когда в режиме выгрузки изменений не происходит деактивация товаров.

Еще в наших модулях «Продвинутый обмен с 1С» и «Параллельный и ускоренный обмен с 1С» есть возможность пропустить импорт описаний товаров. При отключения импорта описаний обычно отключается шаг деактивации.

product_sizes - Поля товара. Размеры из свойств товара: длина, ширина и высота

При записи товара берёт Длину, Ширину и Высоту из свойств товара. Действие обработчика распространяется на отмеченные каталоги товаров и связанные инфоблоки торговых предложений.

property_list_to_element - Свойства элемента. Свойства типа «Список» скопировать в свойство «Привязка к элементу». Производитель, бренд и подобное

Типичная задача скопировать свойство из 1С «Производитель» типа список в свойство «Бренд» - привязка к элементу инфоблока.

Аналогично, кроме бренда можно копировать другие свойства из списка в привязку к элементу. Связь происходит по XML_ID варианта значения.


property_list_to_element


Реультат


property_list_to_element




property_list_to_string_or_number - Свойства элемента. Свойство типа «Список» скопировать в свойство «Строка» или «Число»

Очень часто из 1С приходит свойство из вариантов значений, но на сайте для фильтра нужно Число или обычная строка. Обработчик копирует значение свойства Список в свойство Строка или Число

property_xml_id_to_element - Свойства элемента. Свойство типа «Строка» (или «Справочник») скопировать в свойство «Привязка к элементу» по XML_ID. (Простой, без создания и изменения новых элементов)

Обработчик property_xml_id_to_element работает аналогично property_list_to_element. Копирует из одного свойства «Строка» (или «Справочник») в другое (привязка к элементу).

Новые элементы в связанном инфоблоке не создаются и не изменяются. В строке есть только XML_ID связанного элемента но нет названия, поэтому элементы не могут быть созданы. Для привязки к Брендам, чтобы новые элементы создавались, лучше использовать property_list_to_element.



Настройки обработчика:

Укажите свойство, где хранится внешний код элемента (тип строка или Справочник). Укажите свойство типа привязка к элементу.

Типичная задача: из 1С пришел реквизит или свойство, которое содержит только привязку к чему либо: к другому товару, к бренду, к производителю. Но больше никакой информации нет. Предполагается, что другой элемент уже на сайте создан.

Например, товар выгружен в Инфоблок торговых предложений, но привязки к основному товару нет, кроме XML_ID. Так можно привязать торговое предложение к основному товару, если у него не было привязки.

Обработчик может работать со свойствами, которые заполнил и создал модуль «Реквизиты товаров из 1С»:

Обработчик не очищает привязку к элементу, если свойство с XML_ID не заполнено или связанный элемент не найден.

Обработчик можно использовать с модулем «Реквизиты товара из 1С», если XML_ID был заполнен через него:
— в дополнении 1С-Битрикс для 1С УТ 10.3 можно выгружать любые данные в множественное поле Реквизиты. Если нужно выгрузить из 1С реквизит НоменклатураСайт, который содержит Гуид связанного товара, то можно написать код в настройках обмена

Рез = [Номенклатура].НоменклатураСайт;
Если ЗначениеЗаполнено(Рез) Тогда
  [Результат] = Рез;
Иначе
  [Результат] = "";
КонецЕсли;



section_no_update - Поля разделов инфоблока. При выгрузке каталога из 1С запретить записывать или изменять поля раздела инфоблока

Обработчик срабатывает при выгрузке каталога из 1С, МоегоСклада и подобных. Обработчик запрещает изменение полей разделов инфоблока: названия, символьного кода, активности, описаний, картинок и разделов.

Выберите, какие поля запрещено записывать при добавлении. А какие запрещено изменять



shipment_show_reserv - Отгрузки. Показывать отгрузки и резервы на странице редактирования товара

Обработчик выводит отгрузки для товаров, чтобы показать реальные резервы


tovar_vsegda_dostupen - Свойства элемента. Свойство «Товар всегда доступен на сайте» отключает количественный учёт для товара и его предложений

Для того, чтобы не продавать товары, количество которых 0, в настройках модуля Торговый каталог включите на сайте количественный учёт и снимите флажок «Разрешить покупку при отсутствии товара (включая разрешение отрицательного количества товара)».

Создайте в 1С дополнительный реквизит булево «Товар всегда доступен на сайте». На сайт выгрузится список со значениями Да/Нет.

Если «Товар всегда доступен на сайте» = «Да», то «Включить количественный учет» установить «Нет», иначе «Включить количественный учет» установить «По умолчанию».

Для правильной работы обраотчика требуется версия модуля catalog не ниже 17.6.0.


Товар всегда доступен

Управление почтой

Модуль «Управление почтой» - это удобный набор инструментов для решения проблем с отправкой сообщений с сайта.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:
 

Описание модуля

Модуль полностью решает проблему недоставленных сообщений с сайта.

Страница в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.mailmanager/

Работает на:
«1С-Битрикс: Управление сайтом» - любые редакции.
«1С-Битрикс: Корпоративный портал» - любые редакции.

Требуется:
- тип базы данных MySQL. 

Установка модуля, если Битрикс не обновляется

Иногда бывает так, что модуль нужно установить на старый Битрикс, который уже не обновляется.

Лучший способ — приобрести продление 1С-Битрикс.

Но мы можем вам выслать исходные коды модуля для установки вручную без системы обновлений Битрикса:

1. Купите модуль на сайте «1C-Битрикс Маркетплейс»
2. Пришлите на mail@askaron.ru ваш купон и адрес вашего сайта, на который хотите установить модуль
3. Мы вышлем вам исходные коды модуля в кодировке вашего сайта. И вы сможете самостоятельно установить модуль.

Инструкция по установке модуля вручную:

1. Закачайте архив с исходными кодами модуля на сайт:

Контент -> Структура сайта -> Файлы и папки ->  /bitrix/modules

2. Распакуйте архив

Распаковка архива

После распаковки удалите архив с сайта.

3. Установите модуль
Marketplace -> Установленные решения

Установка модуля

Модуль будет установлен, и вы увидите новые пункты меню:
Сервисы -> Управление почтой.


Обратите внимание:

Пожалуйста, сохраните и не выбрасывайте свой купон на модуль «Управление почтой». Он может пригодиться.

Если когда-нибудь вы купите продление Битрикса, то Битрикс сначала будет показывать предупреждение и не захочет обновляться.

Вам придется активировать купон на «Управление почтой» или полностью стереть модуль «Управление почтой». И тогда Битрикс начнет обновляться правильно.


Функция отправки SMS. Аскарон

Модуль «Функция отправки SMS. Аскарон» нужен для разработчика. Модуль использует возможности отправки SMS из других модулей. Позволяет при необходимости легко переключать модули.

Разработчикам: 
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

<?
if ( \Bitrix\Main\Loader::includeModule( "askaron.sms" ) )

  //здесь можно использовать функции и классы модуля

?>

Описание

Функция отправки СМС из собственного кода или из собственных модулей:

Страница решения в Маркетплейсе: 
http://marketplace.1c-bitrix.ru/solutions/askaron.sms/


Работает на: 
- «1С-Битрикс: Управление сайтом» - любые редакции,
- «Битрикс24 в коробке» - любые редакции. 


//Если вы хотите отправить СМС:

if ( \Bitrix\Main\Loader::includeModule( "askaron.sms" ) )
{
  \Askaron\Sms\Send::send( "79000000000", "Hello World!" );
}


//Если вы хотите отправить СМС и вывести текст ошибки, если СМС не отправлена

if ( \Bitrix\Main\Loader::includeModule( "askaron.sms" ) )
{
  $result = \Askaron\Sms\Send::send( "79000000000", "Hello world1" );
  if (!$result)
  {
    echo \Askaron\Sms\Send::getErrorText();
  }
}

Модуль сам не умеет отправлять СМС, но использует возможности отправки СМС из других модулей и предоставляет дополнительный интерфейс для администратора.

Можно:
- включить/выключить отправку СМС (важно для тестовых сайтов),
- записывать СМС в лог-файл,
- указать свою функцию для отправки СМС, если раньше на сайте была,
- переключаться между сторонними модулями для отправки СМС.

Доступные сторонние модули для отправки СМС:

SMS4B - СМС для бизнеса rarus.sms4b
SMSC.RU: SMS оповещения smsc.sms
SMSBiz - SMS для магазина или портала bizsolutions.sms
СМС Оповещения bxmaker.smsnotice


Модуль «Функция отправки SMS. Аскарон» используется в модуле «Контроль свободного места и бекапов» для отправки СМС, когда место заканчивается или бекап не завершился.


Настройки модуля, часть 1

Настройки1


Настройки модуля, часть 2

Настройки2



Настройки модуля, часть 3

Настройки3




Характеристики торговых предложений из 1С

Модуль «Характеристики торговых предложений из 1С» позволяет выгрузить значения характеристик 1С в отдельные свойства торговых предложений сайта.


Разработчикам: 

Перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции: 

<?
    if(CModule::IncludeModule("askaron.attributes1c"))
    { 
        //здесь можно использовать функции и классы модуля
    } 
?>

Описание модуля

Модуль выгружает значения характеристик торговых предложений в отдельные свойства элемента инфоблока.

Страница в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.attributes1c/

Работает на:
«1С-Битрикс: Управление сайтом» - любые редакции, где есть магазин: Малый Бизнес, Бизнес, Энтерпрайз
«1С-Битрикс: Битрикс24 в коробке» - любые редакции.

Требуется:
- модуль информационных блоков. 


Описание модуля:

При выгрузке товаров с торговыми предложениями часто характеристики выгружаются не так, как нужно на сайте.

Стандартно характеристики записываются в одно множественное свойство «Характеристики» (CML2_ATTRIBUTES). Но в каждом конкретном сайте, как правило, для характеристик заведены отдельные свойства.

Модуль позволяет указать, какую характеристику в какое свойство выгружать.

Модуль позволяет записать характеристики в том виде, как нужно вашему сайту. Модуль знает типы свойств:
  • строка,
  • число,
  • список,
  • привязка к элементу инфоблока,
  • справочник (привязка к элементу hiload-блока)

Установка модуля

Модуль устанавливается, как обычный модуль, и никаких вопросов не задает. Модуль будет срабатывать при обновлении торговых предложений.


Контрольные суммы элементов:

После установки и настройки модуля рекомендуем временно выключить опцию "Использовать контрольные суммы элементов для оптимизации обновления каталога":

Магазин → Настройки → Интеграция с 1С

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


Настройка модуля

Перейдите на страницу настроек модуля:

Настройки → Настройки продукта → Настройки модулей → Характеристики торговых предложений из 1С

Укажите как называются характеристики в вашей 1С и какие символьные коды свойств на вашем сайте.

Для стандартного магазина Битрикса коды свойств:
  • COLOR_REF
  • SIZES_SHOES
  • SIZES_CLOTHES

У вас свойства и характеристики могут называться как-то иначе.

Настройки по умолчанию


Подсказка на странице настроек:

Описание модуля


Можно указать одну характеристику несколько раз. Регистр букв не важен.

Например, в одном компоненте сайта выводится товар с картинкой цвета (тип справочник), а другой компонент понимает только свойство типа строка. Можно создать два свойства и решить свою задачу.

Страница настроек

Результат после выгрузки:


Результат выгрузки








Цены и скидки для SEO. Запись в свойства товаров

Модуль создаёт агент, который обходит товары выбранных каталогов, вычисляет для каждого товара цену со скидками, применяемыми в каталоге, и записывает это значение, а также другие полезные сведения, связанные со скидками - цену без скидки, процент скидки, список применённых скидок - в свойства товара.

В SEO-поля элементов инфоблоков можно, таким образом, сохранять информацию о ценах и скидках на товар из данных свойств.

Модуль работает аналогично модулю Долганина "Скидки и акции расширенные", однако тот модуль больше не поддерживается разработчиком и корректная работа в последних версиях каталога и магазина не гарантируется. Наш модуль уверенно работает с несколькими последними версиями Битрикса, в том числе с 17 версией каталога и магазина, с конвертированными скидками, также, использует, где это возможно, функционал D7, и отличается достаточно гибкими возможностями по настройке.

Возможности и особенности модуля

Данный модуль с помощью агента записывает в свойства товаров информацию о ценах и скидках.

Для чего можно использовать модуль:

1) Продающие метатеги в SEO

С помощью модуля можно указывать в SEO-данных элементов каталога информацию не только о цене товара, но также и помещать туда актуальные цены с учётом скидок и даже размер скидки.

2) Каталог - раздел "распродажа"

Вы можете отобрать все товары со скидкой и выводить их на отдельной странице с помощью компонента "Каталог::Элементы раздела" (bitrix:catalog.section), указав соответствующий фильтр. Также, можно создать страницы для каждой отдельной акции. Код фильтра необходимо размещать перед кодом вызова компонента и указывать в параметрах компонента имя переменной, содержащей фильтр (по умолчанию - arrFilter).

Примеры задания фильтра для случая торговых предложений:

<?//Для отдельной акции
$arrFilter = array(
    'ID' => CIBlockElement::SubQuery('PROPERTY_CML2_LINK', array(
        'IBLOCK_ID' => 3, //инфоблок торговых предложений
        'PROPERTY_AFP_DISCOUNT_LIST' => 2 //ID скидки
    ))
); ?>

<?//Все товары со скидкой
$arrFilter = array(
    'ID' => CIBlockElement::SubQuery('PROPERTY_CML2_LINK', array(
        'IBLOCK_ID' => 3, //инфоблок торговых предложений
        '>PROPERTY_AFP_DISCOUNT_VALUE' => 0
    ))
); ?>

Для простых товаров фильтр строится значительно проще, без использования подзапросов:

<?//Для отдельной акции
$arrFilter = array(
    'PROPERTY_AFP_DISCOUNT_LIST' => 2 //ID скидки
); ?>

<?//Все товары со скидкой
$arrFilter = array(
    '>PROPERTY_AFP_DISCOUNT_VALUE' => 0
); ?>

Также можно сделать фильтр, объединяющий оба варианта:

<?//Для отдельной акции
if ( CModule::IncludeModule( "iblock" ) )
{
    $arrFilter = array();

    $arSubQuery = array(
        "IBLOCK_ID" => 17, // инфоблок торговых предложений
        "PROPERTY_AFP_DISCOUNT_LIST" => 2 //ID скидки
    );
    $obSubQuery = CIBlockElement::SubQuery('PROPERTY_CML2_LINK', $arSubQuery);

    $arrFilter = array(
        array(
            "LOGIC" => "OR",
            array(
                "PROPERTY_AFP_DISCOUNT_LIST" => 2, //ID скидки
            ),
            array(
                "ID" => $obSubQuery,
            ),
        ),
    );
}?>

<?//Все товары со скидкой
if ( CModule::IncludeModule( "iblock" ) )
{
    $arrFilter = array();

    $arSubQuery = array(
        "IBLOCK_ID" => 17, // инфоблок торговых предложений
        ">PROPERTY_AFP_DISCOUNT_VALUE" => 0
    );
    $obSubQuery = CIBlockElement::SubQuery('PROPERTY_CML2_LINK', $arSubQuery);

    $arrFilter = array(
        array(
            "LOGIC" => "OR",
            array(
                ">PROPERTY_AFP_DISCOUNT_VALUE" => 0,
            ),
            array(
                "ID" => $obSubQuery,
            ),
        ),
    );
}?>

В последних версиях компонента фильтр можно задавать непосредственно при настройке компонента из публичной части.

3) Каталог - честная сортировка по цене (для простых товаров)

Компонент каталога позволяет использовать для простых товаров сортировку по цене, но эта сортировка не учитывает скидки. Используя этот модуль, вы можете выводить товары, отсортированные по цене с учётом скидки.

4) Быстрый вывод цены в каталоге

Для разработчиков: может так оказаться, что страницы каталога на вашем сайте работают очень медленно, и даже после всей возможной оптимизации последнее оставшееся узкое место - это вычисление и вывод цены на детальной странице или на странице списка, особенно когда недоступно кэширование (например, при использовании фильтра). В таком случае, вы можете отключить вычисление цены в настройках компонента и вместо этого выводить в шаблоне компонента свойства, заполненные данным модулем.

5) Быстрый вывод цены для выгрузки на Яндекс.Маркет и другие площадки

Аналогично предыдущему пункту, если создание файла выгрузки происходит слишком долго, замедляет сайт или же даже не успевает завершиться вовремя, чтобы вернуть файл, можно модифицировать генерацию файла таким образом, чтобы цена бралась из свойств, а не вычислялась - это значительно менее ресурсоёмкий процесс.

В каких случаях модуль вам не поможет:

1) Цены вычисляются для группы пользователей [2] (то есть, "все пользователи"). Если для задания цен в магазине вы активно используете различные группы пользователей с привязкой различных типов цен или различными скидками, то данные, записываемые агентом в свойства товаров, не будут достоверны и вряд ли вам пригодятся.

2) Как правило, даже в случае многосайтовости на отдельных сайтах используются раздельные каталоги. Однако, если у вас многосайтовость, при этом товары из одного и того же каталога выводятся на нескольких разных сайтах, и к тому же, что важно, на этих сайтах по-разному задаётся цена (например, используются разные скидки), то модуль будет вычислять правильные цены только для одного из сайтов (и точно неизвестно, для какого именно), поскольку разные наборы свойств в товарах для этого случая не предусмотрены.

Прочие советы:

Агент оптимизирован для работы с большими каталогами, дополнительные возможности по ускорению работы включаются в настройках модуля. На больших каталогах агент может работать достаточно долго, от нескольких секунд, до нескольких минут, поэтому рекомендуем использовать для запуска агентов cron. Чтобы это сделать, можете воспользоваться нашим бесплатным модулем "Агенты на кроне".

Страница настроек модуля

Данный модуль с помощью агента записывает в свойства товаров информацию о ценах и скидках.

Страница настроек модуля

Страница настроек модуля

Включить агента

С помощью этого флажка можно включать или выключать агента. Если выключить - то модуль ничего делать не будет. По умолчанию включено.

Интервал агента

Устанавливает, как часто будет запускаться агент (в минутах). Минимум - 20 минут, по умолчанию установлено 40 минут. Чем меньшее значение вы укажете - тем оперативнее будет обновляться информация на сайте в случае наличия изменений в ценах или скидках. Агент может также сбрасывать и SEO-свойства у тех элементов, в которые вносит изменения. Но не рекомендуется запускать агента слишком часто, поскольку пересчёт элементов может создавать значительную нагрузку и замедлять в процессе выполнения работу вашего сайта. Обратите внимание также на прочие настройки, связанные с производительностью.

Каталоги, которые будет обходить агент

Отметьте каталоги, для которых нужно заполнять свойства с ценами и скидками. Если на сайте используются торговые предложения - то отметьте и инфоблок с пакетом предложений (вообще, можно отмечать все инфоблоки, в которых у элементов указаны цены)

Пересчитывать агентом только изменившиеся элементы

Важная настройка! Если скидки на сайте не изменялись, и не обновлялись товары, то цены, скорее всего, также не изменились, в этом случае пересчитывать каталог полностью нет необходимости. Товары для пересчёта будут выбраны с учётом даты изменения. Эта настройка включена по умолчанию, снимите флажок, только если вы предполагаете, что в каких-либо товарах в записанные свойства прокралась ошибка.

В некоторых случаях полный пересчёт товаров будет происходить вне зависимости от данной опции:

  • Если вы изменили состав каталогов, выбранных в предыдущем списке:
    Технически это необходимо, поскольку время последнего запуска агента, для выборки товаров по дате изменения, хранится для агента в целом, а не для каждого инфоблока в отдельности.
  • Если на сайте изменялись скидки:
    Если изменились скидки - то также могли измениться и цены, поэтому необходим полный пересчёт для всех товаров.
  • Если не установлена дата в следующем поле:
    Это означает, что агент либо ещё ни разу не запускался, либо что эту дату вы стёрли, чтобы произвести полный пересчёт.

Время последнего запуска агента

Специальная настройка, связанная с предыдущей. Дата изменения товаров будет сравниваться с этой датой и временем. Кнопка "Очистить" сбрасывает эту дату, и при следующем запуске агента будут пересчитаны все товары.

Сбрасывать закешированные переменные SEO при изменении свойств

Предположим, свойства, содержащие цену или скидку, используются на вашем сайте в SEO-свойствах элементов каталогов. Они вычисляются в системе и заносятся в отдельную таблицу, таким образом, перезапись агентом этих свойств сама по себе не повлияет на вычисленные значения SEO-свойств. При включении этой опции агент будет очищать таблицу вычисленных значений SEO-свойств (в дальнейшем система перезапишет в неё обновлённые значения свойств). Если же свойства, с которыми работает данный модуль, не взаимодействуют с SEO-свойствами элементов, то флажок можно снять.

Сравнивать контрольные суммы при пересчёте

Модуль создаёт для работы 5 свойств в отмеченных каталогах - 4 из них значащие (цена со скидкой, цена без скидок, величина скидки и список скидок), и ещё одно служебное - хэш из 4 остальных свойств. Необходимо проверять, соответствуют ли значения свойств, записанные в товаре, вычисленным в ходе работы агента, и перезаписывать их, если значения изменились. Для этого значения записанных свойств нужно считать из базы данных. Если опция включена, то считывается и сравнивается только контрольная сумма, или хэш. Изменение хэша гарантирует, что остальные свойства также изменились, и необходима перезапись. В противном случае считываются и сравниваются все 4 значащие свойства, время чтения в этом случае увеличивается. Поскольку сравнение производится для каждого из свойств в отдельности, то если изменилась только часть свойств, неизменившиеся перезаписаны не будут. Например, если изменились только скидки, но не изменилась цена без учёта скидок. То есть, в некоторых случаях, при выключенной опции, возможно несколько сократить время записи свойств. Если вы разработчик или администратор сайта с очень большим каталогом товаров и агент работает долго, то можете сравнить варианты со включённой опцией и без, и выбрать тот, который работает быстрее. По умолчанию - опция включена. Такой вариант хорошо работает, если вы часто включаете, выключаете, изменяете скидки, связанные только с отдельными товарами или разделами каталога.

Дублирование свойств

Дублирование свойств

Модуль сам создаёт те свойства, с которыми он работает, но вам, возможно, требуется сохранять вычисляемые агентом значения цен и скидок в какие-то другие свойства, используемые у вас на сайте. Например, если раньше вы пользовались модулем Долганина "Скидки и акции расширенные" и свойствами из того модуля, и хотели бы продолжать использовать их в фильтрации и сортировке. В этом случае вы можете указать в этой группе настроек, в какие свойства нужно записать значения, помимо используемых модулем по умолчанию. Скопируйте и вставьте символьный код требуемого свойства, также, проверьте, что тип свойства позволяет произвести в него запись значения:

  • Для свойств "Цена", "Старая цена" и "Величина скидки" требуется тип "число" или "строка"
  • Для свойства "Список скидок" - тип "число" или "строка", а также, свойство должно быть множественным

Данные настройки влияют на производительность агента. Если агент работает долго, в особенности при полном пересчёте, лучше отключить дублирование свойств.

Использование событий для модификации работы агента

Установка свойств элемента инфоблока (в чём и состоит окончательная задача агента) производится с помощью стандартного метода Битрикса CIBlockElement::SetPropertyValuesEx(). В данном методе имеется событие OnAfterIBlockElementSetPropertyValuesEx. Если повесить на это событие обработчик, то возможно модифицировать тем или иным способом работу агента.

Задача: для товаров нужно устанавливать свойство типа флажок (Да/Нет) - "Товар со скидкой".

Модуль работает со свойством AFP_DISCOUNT_VALUE типа "Число" для записи величины скидки и множественным свойством AFP_DISCOUNT_LIST типа "Число" для записи списка применяемых к этому товару скидок. Различные применения для данных свойств описаны в данном документе, но они не являются исчерпывающими. То, что требуется в данной задаче, может быть использовано, например, в умном фильтре для того, чтобы пользователь мог в каталоге отобрать все товары, имеющие скидку. С использованием только свойств данного модуля это сделать сложно, поэтому и требуется дополнительное свойство, которое можно устанавливать через обработчик.

Пример обработчика для решения данной задачи.

В Битриксе нет штатного типа свойства "Флажок". Один из вариантов того, как можно реализовать такое свойство - список с одним элементом "Да".

Данный код необходимо разместить в файле /bitrix/php_interface/init.php (если такого файла нет, его нужно создать). Если вы точно не уверены в том, как это делается, то лучше обратиться к опытным разработчикам на Битриксе - неправильное заполнение данного файла может сломать ваш сайт без возможности восстановления по HTTP.

<?function OnAfterIBlockElementSetPropertyValuesExHandler($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $FLAGS)
{
if($PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]>0)
{
	CIBlockElement::SetPropertyValuesEx(
		$ELEMENT_ID,
		$IBLOCK_ID,
		array(
			"HAS_DISCOUNT"=>1 //подставьте код вашего свойства "Товар со скидкой" (свойство типа список) и ID значения "Да"
		)
	);
	\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID,$ELEMENT_ID);
}
elseif(isset($PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]) && $PROPERTY_VALUES["AFP_DISCOUNT_VALUE"]==0)
{
	CIBlockElement::SetPropertyValuesEx(
		$ELEMENT_ID,
		$IBLOCK_ID,
		array(
			"HAS_DISCOUNT"=>null //подставьте код вашего свойства "Товар со скидкой"
		)
	);
	\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID,$ELEMENT_ID);
}
}
AddEventHandler("iblock", "OnAfterIBlockElementSetPropertyValuesEx", "OnAfterIBlockElementSetPropertyValuesExHandler");

Честное голосование

Модуль предназначен для организации голосований и конкурсов на сайте.

Разработчикам:
перед использованием классов модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:
 

Опиcание модуля

Модуль предназначен для организации голосований и конкурсов на сайте. 

Страница в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.ibvote/

Работает на:
«1С-Битрикс: Управление сайтом» - редакция «Старт» и выше.
«1С-Битрикс: Корпоративный портал» - любые редакции.

Требуется:
- наличие модуля инфоблоков,
- тип базы данных MySQL.

Примеры сайтов, где используется решение:
http://ijitsu.ru - в каталоге дисков

Модуль включает в себя следующие компоненты 2.0:

НазваниеКод в пространстве имен askaronОписание
Честное голосованиеaskaron.ibvote.iblock.voteРасширенный компонент голосования на инфоблоках. Позволяет пользователю поставить оценку для элемента инфоблока.


Отличия askaron:askaron.ibvote.iblock.vote от стандартного bitrix:iblock.vote:
  • сохраняет результаты голосований в базе данных, 
  • проверяет посетителя по cookie и IP,
  • не дает накручивать рейтинг,
  • администратор сайта может просматривать все результаты голосования.

Компонент предназначен для выставления оценок и подсчета рейтинга для картинки, новости или товара. Но если изменить шаблон, то можно использовать, как сервис «мне нравится» или «+ -».

Компонент askaron.ibvote.iblock.vote создает для каждого элемента три пользовательских свойства: количество проголосовавших, сумма баллов и рейтинг. Поэтому на редакции «1С-Битрикс: Первый сайт» работать не сможет, из-за лицензионного ограничения на 2 пользовательских свойства.


Классы модуля «Честное голосование»:

CAskaronIbvoteEvent - для работы с результатами голосований


Размещение компонента «Честное голосование»

Размещение на странице

После установки модуля в визуальном редакторе появится новый компонент. При редактировании страницы перенесите его мышкой:

Перенос компонента на страницу


Теперь можно настраивать параметры. Укажите шаблон ajax, инфоблок и ID какого-нибудь существующего элемента инфоблока. Остальные параметры вы настроите позже.

Настройка компонента


Сохраните страницу и увидите компонент:

Новый компонент голосования


Код вызова компонента, который появился у вас на странице:

Размещение в шаблоне другого компонента

Часто компонент «Честное голосование» нужно встраивать в шаблон другого компонента, например, в «Список новостей» или «Новость детально».

Ниже приведены простейшие примеры такой подстановки. Данные примеры работают только, если кэширование в родительском компоненте выключено.

Отключение кэширования означает, что каждый раз при обращении к странице будут происходить запросы к базе данных и страница будет строиться заново.

Возможно, при увеличении количества элементов инфоблока и количества посетителей это существенно повлияет на время создания страницы. Рекомендуется размещать компонент с помощью модуля «Включаемый код».


Подстановка в список новостей news.list

Настройте компонент список новостей на странице и измените его шаблон:

Редактировать шаблон списка новостей



Где-нибудь внутри цикла foreach вызовете компонент «Честное голосование»:



Результат будет примерно таким:

Результат редактирования шаблона

Не забудьте в компоненте «Список новостей» отключить кэширование, иначе компонент будет работать неправильно для разных пользователей.

Для работы компонента с кэшем рекомендуется использовать модуль «Включаемый код».



Подстановка в news.detail (новость детально)

Настройте компонент news.detail на странице и измените его шаблон. Код для вызова «Честного голосования»:



Аналогично, как в списке новостей, необходимо либо отключить кэширование в родительском компоненте, либо воспользоваться модулем «Включаемый код».

Размещение с помощью модуля «Включаемый код»

Модуль «Включаемый код» предназначен для подстановки любого PHP-кода в любое место на сайте.

С помощью модуля можно встроить компонент голосования или баннер прямо в текст новости или учебного курса.

Живой пример внутри текста! Это не картинка, а компонент, который вставлен с помощью модуля «Включаемый код»:

(Голосов: 291, Рейтинг: 3.7)

Еще один

(Голосов: 21, Рейтинг: 4.04)


В частности, модуль позволяет встроить компонент «Честное голосование» в любой другой компонент с включенным кэшированием.

Принцип действия прост: разместите в любом месте специальный текст, и вместо него будет подставляться результат выполнения определенного включаемого файла.

Страница решения в Маркетплейсе:
http://marketplace.1c-bitrix.ru/solutions/askaron.include/.


Создание включаемого файла:

Самый простой способ — создание файла на основе готового примера.

Найдите на странице «Примеры включаемых файлов» файл с именем askaron.ibvote.iblock.vote.php. Создайте на его основе включаемый файл.

Создание включаемого файла

Новый включаемый файл создается со случайным именем. Это сделано для безопасности. В нашем случае имя файла askaron.ibvote.iblock.vote__qxx2puth.php, у вас будет другое имя.

Просмотр включаемого файла

Созданный включаемый файл можно редактировать, как вам нравится. Новый файл содержит подсказки и код вызова компонента.



Этот же файл можно было создать вручную, и разместить его под каким-нибудь именем в папке /bitrix/php_interface/include/askaron.include/.


Размещение включаемого файла в тексте:

Чтобы подключить файл на странице или в новости следует написать специальный текст, например:

<!--askaron.include
askaron.ibvote.iblock.vote__qxx2puth.php
<PARAMS>
    <IBLOCK_ID>3</IBLOCK_ID>
    <ELEMENT_ID>15</ELEMENT_ID>
</PARAMS>
-->

Этот текст означает, что нужно вызвать файл askaron.ibvote.iblock.vote__qxx2puth.php из папки /bitrix/php_interface/include/askaron.include/ и передать в него параметры

$arParams = array(
  "IBLOCK_ID" => 3,
  "ELEMENT_ID" => 15
);

То есть, показать компонент голосования за элемент №15 инфоблока №3.


Размещение в компоненте news.list:

Чтобы подключить файл в шаблоне компонента news.list, следует написать специальный текст где-нибудь внутри цикла foreach, например:

<?foreach($arResult["ITEMS"] as $arItem):?>
...
<!--askaron.include
askaron.ibvote.iblock.vote__qxx2puth.php
<PARAMS>
    <IBLOCK_ID><?=$arItem["IBLOCK_ID"]?></IBLOCK_ID>
    <ELEMENT_ID><?=$arItem["ID"]?></ELEMENT_ID>
</PARAMS>
-->
...
<?endforeach;?>


Размещение в компоненте news.detail:

Чтобы подключить файл в шаблоне компонента news.detail, следует написать специальный текст, например:

<!--askaron.include
askaron.ibvote.iblock.vote__qxx2puth.php
<PARAMS>
    <IBLOCK_ID><?=$arResult["IBLOCK_ID"]?></IBLOCK_ID>
    <ELEMENT_ID><?=$arResult["ID"]?></ELEMENT_ID>
</PARAMS>
-->


Отладка:

Наверху в административной панели есть кнопка «Включаемый код».

Отладка

При включенной отладке вы увидите текст, который написан для подстановки включаемого файла:

Результат отладки


Заключение:

Приведенные примеры позволяют без написания сложного кода удобно встраивать один компонент в другой с включенным кэшированием.

Попробуйте модуль «Включаемый код» на своем сайте:
http://marketplace.1c-bitrix.ru/solutions/askaron.include/.

Вопросы и ответы

Формула рейтинга

Проголосовал, нажал на 5-ку, а он подсветил только 3 квадратика. (Голосов: 1, Рейтинг: 3.3)


Это правильно.

Компонент «Честное голосование» считает рейтинг по хитрой формуле, суть которой в том, что ваши оценки прибавляются к 10 несуществующим тройкам:


При сортировке по рейтингу вы увидите:
  • 10 пятерок и 1 четверка — это лучше, чем одна пятерка.
  • пользователь, который поставил единицу не может радикально испортить всю статистику.
В настройках компонента есть опция «В качестве рейтинга показывать», которая позволяет выводить пользователю среднее арифметическое вместо рейтинга:

В качестве рейтинга показывать

Скорее всего, этой опции достаточно, чтобы пользователь видел результат, как вам надо.

Но в базе рейтинг всё-равно будет сохранен из хитрой формулы.

Вы можете изменить результат вычисления рейтинга на свою формулу. Смотрите пример автоматического пересчета рейтинга.



Рейтинг + -

Как добавить возможность без изменения самого компонента, чтобы голосовать можно было "+" и "-", при этом рейтинг либо увеличивался на 1, либо уменьшался на 1. Т.е чтобы рейтинг высчитывался как целое число (может быть отрицательным, положительным, либо = 0)?

Рейтинг "Плюс минус" можно вычислить самостоятельно.

Сделайте голосование от 1 до 2.

Число выводите, как результат вычисления:

count = количество голосов,
sum = сумма баллов.

sum - count = количество тех, кто поставил 2 (то есть +). count - (sum - count) = количество тех, кто поставил 1 (то есть -).

(sum - count) - ( count - (sum - count) ) = 2*sum - 3*count = значение вашего рейтинга.

Пример:

10 человек поставили 1. (как бы минус)
5 человек поставили 2. (как бы плюс)

всего проголосовало 15
сумма оценок 20

2*20 - 3*15 = -5 рейтинг, который вы показываете пользователю.


Число  2*sum - 3*count достаточно выводить в шаблоне компонента.

Может потребоваться записать полученный рейтинг в базу данных. Используйте пример автоматического пересчета рейтинга, но со своей формулой


Голосование за один из нескольких элементов

Можно ли без изменения компонента реализовать голосование за один из элементов из списка?

Часто ставится задача вроде: голосование за список фотографий, но голосовать можно только за одну из них. По сути - это опрос.

Без изменения компонента реализовать такое голосование нельзя, но: структура таблиц и API модуля позволяют сделать голосование за один из нескольких вариантов. В этом случае голосование происходит за элемент, а вместо оценки следует записывать ID ответа.

Компонент "Честное голосование" (askaron.ibvote.iblock.vote) предназначен для выставления оценки. Там происходят проверки, чтобы значение не выходило за диапазон. Компонент не строит и не проверяет список возможных ответов.

Компоненты "Честное голосование" расположенные на странице у разных картинок работают независимо друг от друга.

Поэтому лучший способ - это написать новый компонент.

Мы с такими случаями сталкивались и готовы индивидуально написать компонент под требуемую задачу.

Как очистить результаты голосований?

Как очистить результаты голосования?

Очистить результаты голосования можно так:

В элементе инфоблока, за который голосуют, необходимо очистить значения свойств:
  • rating
  • vote_count
  • vote_sum
Эти свойства можно очистить вручную, а можно автоматизировать, чтобы они очистились при удалении результатов голосования. Используйте пример автоматического пересчета рейтинга.



Чтобы пользователь, который проголосовал, мог повторно голосовать нужно:
  • если в настройках компонента включено ограничение по IP или ID, нужно удалить результаты голосования http://ваш_сайт/bitrix/admin/askaron_ibvote_event_admin.php?lang=ru для элемента инфолока,
  • если в настройках компонента включено ограничение по сессии, то пользователь должен закрыть вкладки браузера, закрыть браузер и открыть его снова, чтобы начать новую сессию,
  • если в настройках компонента включено ограничение по кукам, то пользователь должен очистить куки в своем браузере для данного сайта.


Классы

CAskaronIbvoteEvent

Класс для работы с результатами голосований

Add

Описание:



Медод записывает новый результат голосования в базу данных. После попытки добавления результата голосования вызывается событие OnAfterIbvoteEventAdd.

Параметры функции:

Параметры Описание
arFilelds Массив параметров результата голосования. В массиве допустимы следующие индексы:

  • ELEMENT_ID - (целое число) ID элемента инфоблока, за который голосуют;
  • ANSWER - (целое число) оценка, которую поставил пользователь;
  • IP - (строка) IP-адрес пользователя. Если пусто, будет подставлен адрес текущего пользователя $_SERVER["REMOTE_ADDR"];
  • USER_ID - (целое число) ID пользователя.


Возвращаемое значение:

Метод возвращает код добавленного результата голосования, если добавление прошло успешно. При возникновении ошибки метод вернет false.

Примеры использования:



CheckVotingIP

Описание:



Функция проверяет, голосовал ли пользователь с IP-адресом=IP за элемент ELEMENT_ID, за последние KEEP_IP_SEC секунд.

Параметры функции:

Параметры Описание
ELEMENT_IDID элемента инфоблока, за который голосуют
IPIP-адрес пользователя
KEEP_IP_SECколичество секунд, за которое проверяем. Например, 3600 - последний час, 86400 - последние сутки.


Возвращаемое значение:

Возвращается true в случае если IP-адрес найден, в противном случае функция вернет false.

Примеры использования:



CheckVotingUserId

Описание:



Функция проверяет, голосовал ли пользователь с ID=USER_ID за элемент ELEMENT_ID, за последние KEEP_IP_SEC секунд.

Параметры функции:

Параметры Описание
ELEMENT_IDID элемента инфоблока, за который голосуют
USER_IDID пользователя
KEEP_IP_SECколичество секунд, за которое проверяем. Например, 3600 - последний час, 86400 - последние сутки.


Возвращаемое значение:

Возвращается true в случае если ID найден, в противном случае функция вернет false. В случае, если время KEEP_IP_SEC равно 0 секунд вернет false.

Примеры использования:



Delete

Описание:



Функция удаляет результат голосования.

Параметры функции:

Параметры Описание
IDID результата голосования


Возвращаемое значение:

Возвращается true в случае успешного удаления, в противном случае функция вернет false.
При попытке удаления несуществующего элемента функция так же вернет true.

Примеры использования:



GetByID

Описание:



Возвращает результат голосования по ID. Является оберткой над функцией GetList:



Параметры функции:

Параметры Описание
IDID результата голосования


Возвращаемое значение:

Метод возвращает объект CDBResult (на сайте 1С-Битрикс описание класса, ссылка откроется в новом окне).

Пример использования:


GetList

Описание:



Возвращает список результатов голосования по фильтру arFilter.

Параметры функции:

Параметры Описание
arOrderМассив вида Array(by1=>order1[, by2=>order2 [, ..]])

by - поле для сортировки, может принимать значения:
  • id - (целое число) ID результата голосования;
  • element_id - (целое число) ID элемента инфоблока, за который голосуют;
  • answer - (целое число) оценка, которую поставил пользователь;
  • ip - (строка) IP-адрес пользователя;
  • user_id - (целое число) ID пользователя;
  • date_vote - (дата) время, когда пользователь проголосовал;
  • stat_session_id - (целое число) ID сессии пользователя. Автоматически заполняется при вызове функции Add, имеет смысл только если установлен модуль веб-аналитика.
order - порядок сортировки, может принимать значения:
  • asc - по возрастанию;
  • desc - по убыванию.
Регистр букв не важен: 
 
array("ID" => "ASC") или array("id" => "asc")

arFilter Массив вида array("фильтруемое поле"=>"значения фильтра" [, ...]). "фильтруемое поле" может принимать значения:

  • ID - по ID результата голосования;
  • ELEMENT_ID - по ID элемента инфоблока, за который голосуют;
  • ANSWER - по оценке, которую поставил пользователь;
  • IP - по IP-адресу пользователя;
  • USER_ID - по ID пользователя;
  • DATE_VOTE - по дате, когда пользователь проголосовал;
  • STAT_SESSION_ID - по ID сессии пользователя из модуля веб-аналитика.
Перед названием фильтруемого поля можно указать тип проверки фильтра:
  • "=" - равно
  • "<" - меньше
  • "<=" - меньше либо равно
  • ">" - больше
  • ">=" - больше либо равно
Тип проверки указывать необязательно. По-умолчанию "=".

arGroupByМассив полей для группировки элемента. Если поля указаны, то выборка по ним группируется, а в результат добавляется поле CNT - количество сгруппированных элементов. Если указать в качестве arGroupBy пустой массив, то функция вернет количество элементов CNT по фильтру.

Необязательное. По умолчанию false - записи не группируются.



Возвращаемое значение:

Метод возвращает объект CDBResult (на сайте 1С-Битрикс описание класса, ссылка откроется в новом окне).

В том случае, если параметр arGroupBy пустой массив, то функция вернет целое число.

Примеры использования:





Update

Описание:



Медод изменяет результат голосования в базе данных.

Параметры функции:

Параметры Описание
IDID изменяемой записи.
arFilelds Массив параметров результата голосования. В массиве допустимы следующие индексы:

  • ELEMENT_ID - (целое число) ID элемента инфоблока, за который голосуют;
  • ANSWER - (целое число) оценка, которую поставил пользователь;
  • IP - (строка) IP-адрес пользователя;
  • USER_ID - (целое число) ID пользователя;
  • DATE_VOTE - (дата) время, когда пользователь проголосовал;
  • STAT_SESSION_ID - (целое число) ID сессии пользователя. Автоматически заполняется при вызове функции Add, имеет смысл только если установлен модуль веб-аналитика.


Возвращаемое значение:

Метод возвращает true если изменение прошло успешно, при возникновении ошибки метод вернет false.

Примеры использования:



События

OnAfterIbvoteEventAdd

<функция-обработчик>(
    array &$arFields
)


Событие "OnAfterIbvoteEventAdd" вызывается после попытки добавления нового результата голосования методом CAskaronIbvoteEvent::Add

Пример:


Возможное применение:

1. Если вы хотите использовать свою формулу для пересчета рейтинга, применяйте это событие. Пример автоматического пересчета рейтинга

2. Если заменить компонент bitrix:iblock.vote на askaron:askaron.ibvote.iblock.vote в многопользовательской фотогалерее, то с помощью этого события можно реализовать почтовое уведомление вида:
— Пользователь Иван Иванов поставил за вашу фотографию 5 баллов! 

OnAfterIbvoteEventDelete

<функция-обработчик>(
int $ID,
array &$arFields
)


Параметры обработчика:
$ID - ID результата голосования
$arFields - массив со всеми полями результата голосования

Событие "OnAfterIbvoteEventDelete" вызывается после попытки удаления результата голосования методом CAskaronIbvoteEvent::Delete


Пример:



Возможное применение:

1. если вы хотите использовать свою формулу для пересчета рейтинга,
2. если вы хотите, чтобы средний балл удалялся, когда удаляются результаты голосования

Пример автоматического пересчета рейтинга


OnAfterIbvoteEventUpdate

<функция-обработчик>(
int $ID,
array &$arFields
)


Параметры обработчика:
$ID - ID результата голосования
$arFields - массив с изменяемыми полями результата голосования

Событие "OnAfterIbvoteEventUpdate" вызывается после попытки изменения результата голосования методом CAskaronIbvoteEvent::Update


Пример:



Возможное применение:

Если вы хотите использовать свою формулу для пересчета рейтинга. Пример автоматического пересчета рейтинга


OnStartCheckVoting

<функция-обработчик>(
int $ELEMENT_ID,
array $arParams
)

Событие "OnStartCheckVoting" вызывается в компоненте «Честное голосование» (askaron.ibvote.iblock.vote) при проверке, голосовал пользователь или нет.

Вызывается при открытии страницы с компонентом и, когда пользователь отправляет результат. Если на странице несколько компонентов, то при открытии страницы событие вызовется для каждого отдельно.

Событие вызывается непосредственно перед проверкой сессии, кук, IP-адреса и ID пользователя.


Возвращаемое значение:


Если обработчик вернет false, то пользователь проголосовать за элемент не сможет. Компонент будет выглядеть, как будто пользователь уже проголосовал и дальнейшие проверки на право пользователя проголосовать выполняться не будут.


Пример:



Пример автоматического пересчета рейтинга

С помощью событий на добавление, изменение и удаление результатов голосований можно реализовать свой собственный рейтинг.

Например плюс-минус или среднее арифметическое от оценок. Внимание! В примере указаны ID инфоблоков 3 и 4. У вас могут быть другие. Пример автоматического пересчета рейтинга:

// файл /bitrix/php_interface/init.php
// пример автоматического пересчета суммарных значений рейтинга
// при добавлении, изменении и удалении результатов голосования

// Регистрируем обработчики
AddEventHandler("askaron.ibvote", "OnAfterIbvoteEventAdd", Array("CMyIbvote", "OnAfterIbvoteEventAddHandler"));
AddEventHandler("askaron.ibvote", "OnAfterIbvoteEventUpdate", Array("CMyIbvote", "OnAfterIbvoteEventUpdateHandler"));
AddEventHandler("askaron.ibvote", "OnAfterIbvoteEventDelete", Array("CMyIbvote", "OnAfterIbvoteEventDeleteHandler"));

// Класс с обработчиками событий для "Честного голосования".
// В функции CalcRating можно задать свою собственную функцию вычисления рейтинга. Например, +/-.
class CMyIbvote
{
  // Список инфоблоков, для которых будет применяться пересчет рейтинга
  static private $arIblockList = array(3, 4);

  // Максимальная оценка при голосовании. 
  // Используется для расчета стандартного рейтинга.
  static private $maxVote = 5;

  // обработчики событий
  static public function OnAfterIbvoteEventAddHandler(&$arFields)
  {
    if($arFields["ID"]>0)
    {
      self::UpdateRating($arFields["ELEMENT_ID"]);
    }
  }

  static public function OnAfterIbvoteEventUpdateHandler($ID, &$arFields)
  {
     $res = CAskaronIbvoteEvent::GetByID($ID);
     if ( $arItem = $res->Fetch() )
     {
        self::UpdateRating( $arItem["ELEMENT_ID"] );
     }
  }

  static public function OnAfterIbvoteEventDeleteHandler($ID, &$arFields)
  {
     self::UpdateRating($arFields["ELEMENT_ID"]);
  }


  // функция, которая перезаписывает рейтинг
  static private function UpdateRating( $ELEMENT_ID )
  {
     $ELEMENT_ID = intval($ELEMENT_ID);
     if ($ELEMENT_ID > 0)
     {
        if(CModule::IncludeModule("iblock"))
        {
           // узнать номер инфоблока у элемента и заодно проверить, что элемент существует.
           $IBLOCK_ID = self::GetIblockByElementID($ELEMENT_ID);
           if ( $IBLOCK_ID )
           {
             // проверить, что элемент инфоблока в массиве из нашего списка
             if ( in_array( $IBLOCK_ID, self::$arIblockList ) )
             {
                // теперь можно посчитать сумму и количество:
                 $count = 0;
                 $sum = 0;

                 $arFilter = array(
                    "ELEMENT_ID" => $ELEMENT_ID,
                 );

                 $res = CAskaronIbvoteEvent::GetList( array(), $arFilter );
                 while ( $arFields = $res->Fetch() )
                 {
                   $sum = $sum + $arFields["ANSWER"];
                   $count++;
                 }

                 // записываем рейтинг
                 if ( $count > 0 )
                 {
                   $rating = self::CalcRating( $count, $sum );

                   CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array(
                     "vote_count" => $count,
                     "vote_sum" => $sum,
                     "rating" => $rating,
                   ));
                 }
                 else
                 {
                   CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array(
                     "vote_count" => "",
                     "vote_sum" => "",
                     "rating" => "",
                   ));
                  }

                  // сбрасываем тэгированный кеш инфоблока
                  self::ClearCacheByIblockId($IBLOCK_ID);
               }
           }
        }
     }
   }

   // вычисление нового значения рейтинга
   static private function CalcRating( $count, $sum )
   {
      // формула рейтинга +/-
      // $result = 2*$sum - 3*$count;

      // стандартная формула из компонента "Честное голосование":
      // rating = ( SUM(vote)+31.25 ) / ( COUNT(*)+10 )
      $result = round( ( $sum + 31.25 / 5 * self::$maxVote )/( $count+10 ), 2 );

      return $result;
   }

   // очистка кэша инфоблока
   static private function ClearCacheByIblockId($IBLOCK_ID)
   {
      global $CACHE_MANAGER;
      $IBLOCK_ID=intval($IBLOCK_ID);

      if( defined('BX_COMP_MANAGED_CACHE') && is_object( $CACHE_MANAGER ) && ( $IBLOCK_ID>0 ) )
      {
         $CACHE_MANAGER->ClearByTag( "iblock_id_".$IBLOCK_ID );
      }
   }

   // поиск элемента инфоблока и получения ID инфоблока
   static private function GetIblockByElementID($ID) 
   {
     $result = false;

     $arFilter = array('ID' => $ID);
     $arSelect = array('ID', 'IBLOCK_ID');
     $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount"=>1), $arSelect);
     if ( $arFields = $res->Fetch() ) 
     {
       $result = intval($arFields['IBLOCK_ID']);
     }
     return $result;
   }
}