Документация для пользователей и разработчиков
0 / 178
Содержание

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

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



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

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

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

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

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

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



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

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

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

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

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

Здесь будет описана установка

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

Страницу с общими настройками можно условно разделить на 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)

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

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.

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

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

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

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

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


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


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

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


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

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

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

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

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


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


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

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

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

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

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

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

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

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

На виртуальной машине Битрикса 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 у вас на хостинге узнайте своего системного администратора или у техподдержки хостинга.

Проверка:

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


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

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

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

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

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



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

Многие видели на странице проверки сайта замечание:
Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на 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

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

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

array function getResize( mixed $file, int $width = false, int $height = false )

Фунция возвращает массив с уменьшенной картинкой.

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

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

Параметры width и height не обязательные. Если не заданы, то по этой стороны не ограничиваем.

Примеры:

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

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



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

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

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##', "!=", ""
);?> 


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.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 дней.

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

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

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

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


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

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).

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

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

Ваше имя*
Ваш E-mail*
Сообщение*
Защита от автоматических сообщений
Введите слово на картинке*


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

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


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

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

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



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





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

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

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

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

Чтобы сделать пример, необходимо создать файл с любым именем в папке /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
        )

)






Пример. Вывести данные в зависимости от города

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

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

<?
$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.prop/

Статья
Бесплатный модуль «Дополнительные свойства инфоблока. Аскарон»



Работает на:

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


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

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


if(\Bitrix\Main\Loader::includeModule("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С

Модуль «Разные структуры разделов на сайте и в 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

Установите опцию. Можно несколько через запятую:

Пропущенные разделы - опции

Теперь раздел деактивирован и содержимое в корне.

Пропущенные разделы - результат

Настройки++

Модуль «Настройки++» создает страницу дополнительных настроек для вашего проекта.

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


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

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

<?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" );?>

Значение настройки будет извлечено не из таблицы опций, а из таблицы дополнительных пользовательских полей. 

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



Ограничения 

Длина пользовательского поля ограничена колонкой таблицы базы данных, в которой это значение хранится. Для текстовых полей 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) );
    }
}
?>  

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

Модуль «Дополнительные пользовательские поля. Аскарон» добавляет новые пользовательские типы пользовательских полей.

Страница решения в Маркетплейсе:
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.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) Вы получили код для вставки, скопируйте его и вставьте в настройках модуля в поле «Код для вставки на сайте». Заново получить код можно в разделе «Сайты», нажав на кнопку «Получить код» рядом с названием сайта.

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

Отзывы о товаре

Модуль «Отзывы о товаре» позволяет добавить на страницу товара отзывы с выставление оценки.

Демо-версия полностью функциональная, срок демо-периода 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.





Примеры 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?>


Отказоустойчивый обмен с 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 в коробке» - любые редакции.

Прием пожертвований

Модуль «Прием пожертвований» содержит компонент «Прием пожертвований через Робокассу».

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

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

Модуль «Прием пожертвований» содержит компонент «Прием пожертвований через Робокассу».

После установки модуля, перейдем на страницу настроек модуля:

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


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

Разместим в визуальном редакторе компонент «Прием пожертвований через Робокассу» и рассмотрим настройки: 
 
Параметры компонента.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 — копия стандартной страницы обмена, обмен с ней работает точно так же, как со стандартной.

Загружать только цены и остатки (файл с описанием товаров будет пропущен) — опция позволяет настроить обмен только для цен и остатков (или торговых предложений). Загрузка описаний товаров будет пропущена.

Статья про настройку выгрузки только цен и остатков.

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



Настройка выгрузки только цен и остатков

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

Мы предполагаем, что у вас уже настроен обмен в 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С для обмена Остатки и цены новый узел в плане обмена. Не надо использовать один и тот же узел для двух настроек обмена. 

Быстрая запись свойств товаров

Опция позволяет одной галочкой в несколько раз ускорить обмен с 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 минут.

- Пересоздать кеш на главной странице сайта после сброса кеша агентом

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

Пересоздаётся кеш компонентов на главной странице. У следующих пользователей не происходит задержки, когда они откроют главную страницу.

Опция хорошо работает, если перевести агенты на крон. Если агенты выполняются на хитах посетителей, то опцию лучше выключить.


Ускорение сайта - агент


Отладка

Внедрение и качественная техподдержка обмена с 1С невозможна без инструментов отладки:

Перейдите на страницу настроек: 

Настройки → Настройки продукта → Настройки модулей → Продвинутый обмен с 1С 

Отладка

Подробное описание инструментов отладки — в уроках главы.


Остановка и запрет обмена

Иногда необходимо запретить или остановить обмен с 1С.

Отметьте флажок «Запретить выполнение скрипта».

Запрет выполнения

Модуль корректно прервет обмен. В следующий раз 1С будет отправлять данные заново. Вы можете посмотреть, идет ли сейчас обмен с 1С в «Живом логе».

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

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




Живой лог

Живой лог в реальном времени показывает ход обмена с 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С

Модуль «Реквизиты товара из 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С нового типа цен: создать новую группу пользователей и привязать к ней тип цен (pricegroup)

- Выгрузка из 1С нового типа цен: привязать тип цен к группе nobody (сделать новый тип цен недоступным никому) (pricenobody)



Подробнее про обработчики данных

Обработчики данных представляют собой что-то вроде маленьких модулей для Битрикса.

Термина Обработчик данных в Битриксе нет. Мы его придумали специально для этого модуля.

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

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

У обработчиков данных есть свои страницы настроек.

Один обработчик данных может быть установлен в системе несколько раз с разными настройками.

Стандартные обработчики данных лежат в папке модуля.

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

 /bitrix/php_interface/include/askaron.handlers1c/ 
 /local/php_interface/include/askaron.handlers1c/

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


Структура обработчика данных

Наши обработчики данных состоят из раздела, в котором 2 файла: .description.php и handler.php.

.description.php содержит массив с описанием модуля
handler.php содержит функции обработчиков событий.


Стандартные обработчики данных

demo1 - Демонстрационный обработчик для разработчиков

pricenobody - Выгрузка из 1С нового типа цен: сделать новый тип цен недоступным никому (привязать к группе nobody)

pricegroup - Выгрузка из 1С нового типа цен: создать новую группу пользователей и привязать к ней тип цен

Управление почтой

Модуль «Управление почтой» - это удобный набор инструментов для решения проблем с отправкой сообщений с сайта.

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

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

Модуль полностью решает проблему недоставленных сообщений с сайта.

Страница в Маркетплейсе:
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 -> Установленные решения

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

Модуль будет установлен, и вы увидите новые пункты меню:
Сервисы -> Управление почтой.


Обратите внимание:

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

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

Вам придется активировать купон на «Управление почтой» или полностью стереть модуль «Управление почтой». И тогда Битрикс начнет обновляться правильно.


Характеристики торговых предложений из 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-кода в любое место на сайте.

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

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

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


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

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

Страница решения в Маркетплейсе:
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. У вас могут быть другие.
 

Пример автоматического пересчета рейтинга: