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

1С-БИТРИКС Комментарии. Как осуществить отправку и вывод комментариев

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

Записывать комментарии пользователей будем в инфоблок.

У меня на тестовом сайте создан инфоблок, в котором есть 2 раздела, комментарии и отзывы в зависимости от ситуации(страницы), комментарий записывается в один из разделов

Код под номером PHP #1 записывает комментарии в инфоблок. В моём случае получился инфоблок с ID 4 Вам нужно будет изменить Id

Код PHP #2 будет содержать вывод комментариев его же мы будем подключать с помощью include(); к странице

IncludeComponent(
«bitrix:news»,
«template1»,
array(
«ADD_ELEMENT_CHAIN» => «N»,
«ADD_SECTIONS_CHAIN» => «Y»,
«AJAX_MODE» => «Y»,
«AJAX_OPTION_ADDITIONAL» => «»,
«AJAX_OPTION_HISTORY» => «N»,
«AJAX_OPTION_JUMP» => «N»,
«AJAX_OPTION_STYLE» => «Y»,
«BROWSER_TITLE» => «-«,
«CACHE_FILTER» => «N»,
«CACHE_GROUPS» => «Y»,
«CACHE_TIME» => «36000000»,
«CACHE_TYPE» => «A»,
«CHECK_DATES» => «Y»,
«DETAIL_ACTIVE_DATE_FORMAT» => «d.m.Y»,
«DETAIL_DISPLAY_BOTTOM_PAGER» => «Y»,
«DETAIL_DISPLAY_TOP_PAGER» => «N»,
«DETAIL_FIELD_CODE» => array(
0 => «»,
1 => «»,
),
«DETAIL_PAGER_SHOW_ALL» => «Y»,
«DETAIL_PAGER_TEMPLATE» => «»,
«DETAIL_PAGER_TITLE» => «Страница»,
«DETAIL_PROPERTY_CODE» => array(
0 => «»,
1 => «»,
),
«DETAIL_SET_CANONICAL_URL» => «N»,
«DISPLAY_BOTTOM_PAGER» => «Y»,
«DISPLAY_DATE» => «Y»,
«DISPLAY_NAME» => «Y»,
«DISPLAY_PICTURE» => «Y»,
«DISPLAY_PREVIEW_TEXT» => «Y»,
«DISPLAY_TOP_PAGER» => «N»,
«HIDE_LINK_WHEN_NO_DETAIL» => «N»,
«IBLOCK_ID» => «4»,
«IBLOCK_TYPE» => «comments»,
«INCLUDE_IBLOCK_INTO_CHAIN» => «Y»,
«LIST_ACTIVE_DATE_FORMAT» => «d.m.Y»,
«LIST_FIELD_CODE» => array(
0 => «»,
1 => «»,
),
«LIST_PROPERTY_CODE» => array(
0 => «»,
1 => «»,
),
«MESSAGE_404» => «»,
«META_DESCRIPTION» => «-«,
«META_KEYWORDS» => «-«,
«NEWS_COUNT» => «20»,
«PAGER_BASE_LINK_ENABLE» => «N»,
«PAGER_DESC_NUMBERING» => «N»,
«PAGER_DESC_NUMBERING_CACHE_TIME» => «36000»,
«PAGER_SHOW_ALL» => «N»,
«PAGER_SHOW_ALWAYS» => «N»,
«PAGER_TEMPLATE» => «.default»,
«PAGER_TITLE» => «Новости»,
«PREVIEW_TRUNCATE_LEN» => «»,
«SEF_MODE» => «Y»,
«SET_LAST_MODIFIED» => «N»,
«SET_STATUS_404» => «N»,
«SET_TITLE» => «Y»,
«SHOW_404» => «N»,
«SORT_BY1» => «ACTIVE_FROM»,
«SORT_BY2» => «SORT»,
«SORT_ORDER1» => «DESC»,
«SORT_ORDER2» => «ASC»,
«STRICT_SECTION_CHECK» => «N»,
«USE_CATEGORIES» => «N»,
«USE_FILTER» => «N»,
«USE_PERMISSIONS» => «N»,
«USE_RATING» => «N»,
«USE_RSS» => «N»,
«USE_SEARCH» => «N»,
«USE_SHARE» => «N»,
«COMPONENT_TEMPLATE» => «template1»,
«SEF_FOLDER» => «/otzyvy/»,
«SEF_URL_TEMPLATES» => array(
«news» => «»,
«section» => «»,
«detail» => «#ELEMENT_ID#/»,
)
),
false
);?>

Код js #1 содержит скрипт для отправки текста, имени и email для записи в инфоблок. Ваша форма должна содержать такие поля с классами text, name, email, кнопка отправки должна иметь класс t-btns. На странице должен быть контейнер(div) с классом listOtsiv, здесь будут отображаться комментарии после обновления страницы.

$.ajax( <
type: «GET»,
url: «local/templates/.default/include/otsivResult.php»,
data: <
post:post
>,
success: function(rList) <
$(‘.listOtsiv’).html(rList);
> >);
> >);

Код PHP #3 должен находиться на странице вывода комментариев в контейнере с классом listOtsiv. Здесь подключается компонент новостей из PHP кода #3

Если будут вопросы их можно задать в комментариях. Статья пока не полностью готова, но здесь освещены пока общие моменты. Спасибо за понимание!

Источник

Компонент 1с-Битрикс: древовидные комментарии к статьям

Представляю Вашему вниманию компонент для работы с древовидными комментариями к элементам инфоблоков. Для хранения информации будет использоваться модуль «Блоги», что позволит легко ее модерировать прямо из публичной части. Основой стал компонент photogallery.detail.comment, из которого удалено все ненужное, а также добавлена возможность работать с кодами секций и элементов в режиме ЧПУ.

Установка и настройка

Внизу страницы находится ссылка на архив с компонентом. Первым делом, его необходимо распаковать в директорию \bitrix\components\ сервера.

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

Создаем новый блог:

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

Даем пользователям необходимые права:

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

Дальнейшие действия рассмотрим на примере комплексного компонента bitrix:news. Разместим и настроим его до рабочего состояния на произвольной странице сайта. Важно включить отзывы, остальные настройки этой группы не имеют значения.

Например, для режима ЧПУ с кодами секций и элементов настройки будут такими:

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

Теперь нужно скопировать шаблон компонента в шаблон сайта и применить его:

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

Последнее, что осталось сделать — это зайти в любую новость на сайте в режиме разработки, нажать на иконку компонента с подписью «Новости» и выбрать пункт «Редактировать шаблон компонента». Если все сделано правильно, откроется окно, аналогичное этому:

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

Заменяем кусок кода

на приведенный ниже

После этих манипуляций у каждого элемента инфоблока должна появиться форма для комментирования в публичной части и 2 новых свойства элемента — id поста блога и количество комментариев.

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

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

Компонент для работы с многоуровневыми комментариями к элементам инфоблоков

Категория:Компоненты
Дата:16.09.2010

Похожие записи

Комментарии (36)

В итоге получаю надпись: ‘av:comment.multilevel’ is not a component

Алексей, спасибо. Очень нужный компонент.

av:comment.multilevel’ is not a component
как побороть?

Поставил данный компонент, но есть одна проблема: когда оставляю комментарий — перекидывает со страницы товара на страницу http://teplo-hot.com.ua/catalog/products/
Если у вас есть возможность, посмотрите и скажите, в чем проблема и как её исправить?
На сайте используется ЧПУ.

Tepl, не знаю, такой проблемы раньше не встречал. Проверьте настройки, посмотрите action форм, найдите LocalRedirect который перекидывает..

Как распаковать компонент. я новичок((((((напишите поподробнее.
Спасибо

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

Когда не указываешь email не выдается ошибка

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

После добавления комментария стал выдавать ошибку

Cannot redeclare function pclearcomponentcache() (previously declared in /bitrix/components/av/comment.multilevel/component.php:7). If this code worked without the Zend Optimizer+, please set zend_optimizerplus.dups_fix=1 in your ini file in /bitrix/modules/main/classes/general/module.php on line 220

Алексей, нужно удалить или закомментировать в component.php функцию pclearcomponentcache

От чего зависит декларирование функции pclearcomponentcache?

Получил: Cannot redeclare pclearcomponentcache() in /var/www/html/bitrix/modules/photogallery/include.php on line 263

Если комментирую функцию в компоненте, то ругается на вызов PClearComponentCache в компоненте (на то, что функция не описана).

Пока изменил название функции, на avPClearComponentCache, но это не лучший выход наверное.

ЗЫ: Спасибо за компонент.

Подскажите а как удалять не нужные коментарии

Я установил ваш модуль, все хорошо, вот только надпись «Добавить комментарий», и кнопки ответить, удалить и т д отображаются в кодировке UTF8 а весь сайт в Win1251, я 2 дня лазил по файлам и не мог найти где их изменить. Не подскажете?

Здравствуйте!
вроде все делаю как написано, только сайт выдает

Can not find ‘templete1′ template with page ‘news’

подскажите как исправить

‘av:comment.multilevel’ is not a component
вы файлы скопировали в «\bitrix\components\bitrix»
а пытаетесь открыть av
замените
$APPLICATION->IncludeComponent(«av:comment.multilevel»,
на
$APPLICATION->IncludeComponent(«bitrix:comment.multilevel»,

Добрый день Алексей. Помогите, не знаю как сделать. 1С Битрикс Экспер. Задача: Выводить последние комментарии к статьям в одном блоке. Все комментарии идут в форум в закрытый для пользователей раздел. Комментарии на форуме делятся по темам статей. Есть стандартный модуль 1С Битрикс, который выводит название тем к которым есть последние комментарии, НО задача состоит в другом — нужно выводить сами «отрывки» (текст!) комментариев и чтобы при клике шёл переход не в форум (закрытый), а на статью которая обсуждается.
Всю голову сломал! Много чего предпринимал… Пытался использовать стандартный модуль Блогов для вывода последних комментариев. Перед этим использовал Ваше описание выше, НО при клике по последним комментариям в уже Топике комментариев Блога, переход осуществлялся в никуда. Вот описание метода
Вообщем ни знаю что и делать! в 1С битриксе посылают …

Михаил, эта задача не решается без правки кода.
Суть в том, что форум ничего не знает о статье, к которой хранит комментарии. Т.е. связь «новость» => «тема форума» в одну сторону.
Можно попробовать такой алгоритм:
— использовать компонент, который выводит последние темы или сообщения из форума
— в кэшируемой области (result_modifier.php шаблона например) получить все новости, которые через свойство наподобие FORUM_TOPIC_ID привязаны к выбранным темам форума
— вывести все данные в нужном виде

Добрый день,
на этапе «скопировать шаблон компонента в шаблон сайта и применить его»
После применения копии шаблона на странице появляется ошибка:
Can not find ‘news1′ template with page ‘news’

подскажите пожалуйста, как справиться с ‘av:comment.multilevel’ is not a component

простите, я тупицца, выше уже отвечали на мой вопрос…

Добрый день.
Данный компонент поддерживается последней версией Битрикс?
Попытка установить закончилась ошибкой.

Все добавляется, но как-то криво работает….при добавлении комментария почему-то надо заходить в «комментарии» на блоге и нажимать «показать», хотя они опубликованы уже..также, комментарии не появляются сразу же после добавления, надо делать вышеуказанные действия..
Еще: при обновлении страницы пропадают все комментарии. Хотя в административной части все есть…

Легче сделать все это с форумом и закрыть его от индексации..

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

При удалении комментария из админки — поле количество комментариев не уменьшается

Где редактировать шаблон вывода комментариев? (Мне нужно добавить некий текст непосредственно перед выводом комментариев, имитируя эти самые комментарии, и может быть даже между комментариев).

Добрый день! Я только начинаю осваивать вёрстку, подскажите пожалуйста как исправить проблему:
Раздел новости. сначала выводится картинка, затем идёт текст.
Текст отображается криво: справа дубль заголовка (где убрать не пойму) а слева текст узким столбиком. (Как будто разбит на два столбца, есл,и конечно, сравнение с вордом уместно в данном случае)

«Добрый день,
на этапе «скопировать шаблон компонента в шаблон сайта и применить его»
После применения копии шаблона на странице появляется ошибка:
Can not find ‘news1′ template with page ‘news’»

Ребяяятки, Кто нибудь знает как это лечится? Та же самая проблема

как добавить в компонент bitrix:catalog.

Алексей, подскажите, пожалуйста, как настроить внешний вид компонента?

Приветствую Вас господа
Обустройство скважины с кессоном из бетонных колец
Использование кессона из бетонных колец при обустройстве скважины – правильный выбор в пользу долгой службы Вашей скважины – порядка 70-100 лет. Бетонная конструкция самая прочная и устойчивая из всех конструкций, использующихся при защите и обустройстве скважин. Такие кессоны под своей тяжестью не сдвинуться даже под большим напором воды. Отменная защита Вашей скважине гарантирована. Монтаж кессона из бетонных колец и завершение обустройства скважины:
Вокруг обсадной трубы экскаватор выкапывает котлован шириной около 2 м. Данные для глубины берутся из паспорта на скважину. Дно котлована выравнивают.С помощью крана на дно котлована опускают бетонную плиту с отверстием для обсадной трубы – дно будущего кессона. Использование донной плиты обязательно ввиду риска усадки и вымывания грунта под кессоном.Далее с помощью крана на бетонной плите размещают от 2 до 4 бетонных колец. Стандартная высота кольца составляет 90 см.Далее рабочий с помощью лестницы спускается вниз, заделывает стыки бетонных колец цементным раствором.Отверстие вокруг обсадной трубы засыпается плотно мелким щебнем либо цементно-песчаной смесью.В первом бетонном кольце проделывают отверстия для вывода труб. Выкапывают траншею от кессона в дом, для прокладки водопровода.Прокладывают водопровод. Выводят систему полива участка.Устанавливают в кессоне гидроаккумулятор, фильтр, системы автоматики.Поверх бетонных колец опускают верхнюю плиту. Отверстие для обслуживания обустроенной скважины закрывается полимерной крышкой люка.Стыки заделывают цементным раствором.Щели вокруг кессона засыпаются выкопанным ранее песком.Монтаж кессона и обустройство скважины закончено.

Источник

Создаем свое «Действие» в коробочном Битрикс24

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

Всем привет!
Будем учиться кастомизировать Битрикс24 Как сделать комментарии в битрикс

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

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

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

В данной статье мы рассмотрим разработку собственного действия для коробочной версии КП на примере одной из задач кредитной организации. Некоторая информация о разработке своих действий имеется в курсе по бизнес-процессам: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=57&CHAPTER_ID=04567

Постановка задачи

Общая задача: автоматизировать процесс обработки заявки для кредитной организации.

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

Частная задача: уменьшить затраты времени сотрудников на обзвон и анкетирование клиентов и поручителей.

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

Разработка действия БП «Звонок клиенту с анкетой»

1. Подготовка объекта

Нестандартные действия БП должны располагаться в каталоге /local/activities.

Для начала выберем название для нашего действия: IvSipCallActivity.

На возврате значений остановимся подробнее. Существует два способа описать возвращаемые значения: с помощью ключей RETURN и ADDITIONAL_RESULT.

Используйте RETURN, если вам заранее известен состав возвращаемых значений. Например, если вы разрабатываете действие «Сумма чисел», то вы заранее знаете, что выход у действия будет один — значение суммы.

RETURN должен содержать массив, описывающий каждое возвращаемое значение следующим образом:

Если вы не знаете заранее, какие возвращаемые значения будут у действия, используйте ADDITIONAL_RESULT. Например, в нашем действии звонка с анкетой возвращаемыми значениями будут значения полей анкеты. Проблема в том, что заранее не известно, какие поля будут в анкете — это зависит от настроек действия.

ADDITIONAL_RESULT должен содержать последовательный массив названий свойств действия, из которых будут взяты возвращаемые значения. А значения этих свойств будут заданы уже в конструкторе и/или во время выполнения БП. В нашем примере возвращаемые значения будут взяты из свойства QuestionnaireResults (результаты заполнения анкеты).

Использовать одновременно RETURN и ADDITIONAL_RESULT нельзя: будут использованы значения только из RETURN.

Поскольку мы разрабатываем «обычное действие» (которое не будет содержать дочерних действий), наш класс должен быть унаследован от CBPActivity. Если же вам понадобится разработать действие, которое должно содержать дочерние действия (как, например, альтернативы и циклы), наследуйте класс своего действия от CBPCompositeActivity.

Создадим класс и определим в нем самые необходимые методы. Реализацию рассмотрим далее.

Создайте файлы локализации и откройте конструктор шаблонов БП. На данном этапе должно быть возможно добавить наше действие в шаблон из панели справа.

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

Чтобы у действия появилась форма настроек, необходимо создать два метода: GetPropertiesDialog и GetPropertiesDialogValues. Первый отвечает за формирование HTML формы настроек, второй — за обработку отправки формы пользователем.

Начнем с GetPropertiesDialog. Этот метод похож на код компонента: сначала формируется массив значений для полей формы, а затем вызывается шаблон самой формы. HTML формы можно сформировать прямо в этом методе, однако, “каша” из HTML и PHP снизит сопровождаемость вашего кода, поэтому такой подход применять не рекомендуется.

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

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

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

Важно! Списки пользователей (поле «Ответственный») должны храниться в специальной форме в виде массива. В конструкторе это же самое поле представлено строкой. Поэтому мы используем метод CBPHelper::UsersArrayToString на значении свойства Responsible, перед тем, как передать его в форму. При сохранении настроек требуется конвертация в обратную сторону, пример будет далее.

Код формы настроек — преимущественно HTML. Конструктор шаблонов БП ожидает, что метод GetPropertiesDialog вернет фрагмент HTML-таблицы, поэтому каждое поле необходимо описывать тегом tr.

Шаблон формы настройки будем хранить отдельно от логики действия. Для этого создадим файл properties_dialog.php в каталоге действия. Чтобы выполнить этот шаблон воспользуемся методом ExecuteResourceFile исполняющей среды, который запускает PHP-файл в режиме буферизации и возвращает весь вывод скрипта в виде строки. В третьем аргументе укажем, какие переменные будут доступны в области видимости скрипта: ключ — название переменной в скрипте.

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

Для вывода элементов управления используйте метод CBPDocument::ShowParameterField, который поддерживает следующие типы полей: многострочный текст, пользователь, да/нет, дата и время, текстовое поле ввода. К каждому полю этот метод добавляет кнопку «. », которая позволяет подставлять значения вида <=. >из переменных, констант и пр. Если же вам необходимо создать свой элемент управления, то кнопку «. » можно добавить с помощью метода CBPHelper::renderControlSelectorButton.

HTML в файле properties_dialog.php должен быть следующего вида:

Редактор полей анкеты реализуем на стороне клиента с помощью JS.

На текущий момент вы можете добавить действие в шаблон и вызвать его настройки.

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

Задача этого метода — проверить введенные данные на корректность и сохранить их в свойствах действия, либо сообщить об ошибках.

Код ошибки вы можете придумать самостоятельно.

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

Обратите внимание, что список ответственных за задание передается нам из конструктора в виде строки. Перед сохранением мы преобразуем его в массив с помощью метода CBPHelper::UsersStringToArray.

Если ошибок нет, метод должен вернуть true, в этом случае конструктор закроет окно настройки действия.

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

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

Реализация логики шага: задание на звонок

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

Если действие включает постановку задания пользователям, то общий принцип решения этой задачи следующий:
при запуске действия исполняющей средой происходит создание задания (задание — отдельная сущность) и регистрация действия как обработчика события задания;
действие сообщает исполняющей среде, что шаг еще не завершил выполнение, но на текущий момент делать больше нечего (будем ожидать действий пользователя), БП приостанавливает свое выполнение;
обработка отправленной формы задания: валидация данных и отправка события о попытке завершения задания;
обработка события нашим действием: если все необходимые условия выполнены, завершение задания и самого действия (исполняющая среда поймет, что действие завершилось и запустит следующее).

Таким образом, наше действие — само себе обработчик события.

Создание задания БП и подписка на события

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

Прежде всего запишем в журнал выполнения БП, что его исполнение дошло до задания на звонок. В общем случае, чтобы добавить запись в этот журнал, необходимо использовать службу журналирования бизнес-процессов (Tracking Service), однако для этой задачи есть метод-обертка WriteToTrackingService.

При записи в журнал можно использовать некоторые выражения как при создании шаблона БП.

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

Параметры задания ($arParameters) вы выбираете самостоятельно. Передайте все, что нужно для отображения формы задания. Если какие-либо данные в форме должны меняться в зависимости от значений свойств действия, передавать их в качестве параметров задания не имеет смысла. Для примера, в качестве параметров не передаются поля анкеты и значения, введенные пользователем — к ним доступ будет осуществлен иначе.

Наконец, нужно сообщить исполняющей среде о регистрации обработчика события.

Первый аргумент — название события. Его можно выбрать произвольно, однако общепринятая практика — использовать название действия в качестве названия события. Второй аргумент — сам обработчик события. Это объект, реализующий интерфейс IBPActivityExternalEventListener, он передается в метод Subscribe.

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

Задача метода Unsubscribe — удалить зарегистрированный обработчик событий и удалить или закрыть задание БП в зависимости от ситуации. В классе действия заведем поля taskId и taskStatus, которые будут содержать ID созданного задания и его конечный статус на случай непредвиденного вызова Unsubscribe (об этом далее).

Наконец, реализуем метод Execute.

Реализуем метод Cancel. Поскольку в методе Unsubscribe уже реализована логика удаления или завершения поставленного ранее задания, вызовем его. Также вернем исполняющей среде состояние действия — “завершено”.

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

Вывод формы задания исполнителю

Теперь реализуем форму задания ­— то, что увидит пользователь, которому оно будет поставлено.

Для формирования HTML виджета телефонии в классе действия созданы два метода: getSipPhoneHtml и getContactHtml, возвращающие код виджета для произвольного номера телефона и контакта CRM соответственно.

Рассмотрим метод getSipPhoneHtml. Он использует класс CCrmViewHelper модуля CRM для генерации виджета телефонии.

Метод CCrmViewHelper::PrepareFormMultiField генерирует HTML для множественных полей сущностей CRM (E-mail, телефон, мессенджер. ).

Третий аргумент — префикс атрибута id для создаваемого HTML. Аргумент необязательный, значение по умолчанию — пустая строка. Четвертый аргумент — описания полей (PHONE, EMAIL. ), необязательный, если передать null, метод сам возьмет описания всех доступных полей.

Виджет телефонии выглядит как ссылка на номер телефона. Однако при ее нажатии запускается звонок.

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

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

Для этого реализуем метод getContactHtml. В нем, помимо телефона, мы выведем фотографию, полное имя и должность. Рассмотрите код этого метода самостоятельно, он достаточно прост. Для генерации виджета телефонии используем ранее созданный метод getSipPhoneHtml. В результате получим следующее:

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

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

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

В приведенном коде опущены несущественные детали. Посмотрите полные реализации методов и шаблонов в исходном коде действия. О ValueStorage — далее.

Обработка формы и событий задания

Осталось лишь реализовать поведение нашего действия при нажатии кнопки «Готово» в форме задания.

Когда пользователь на нее нажимает, запускается метод PostTaskForm. Реализация данного метода похожа на GetPropertiesDialogValues: нужно проверить корректность данных и собрать массив ошибок, затем вернуть true или false в зависимости от успеха. Однако, в случае, если данные успешно прошли проверку, нужно еще отправить событие о попытке завершения задания.

Последнее сделаем следующим образом:

Наконец, осталось реализовать последний метод — OnExternalEvent, который занимается обработкой событий.

В этом методе мы проверим, все ли требования выполнены для завершения задания и, если да, то завершим его и само действие.

Здесь сделаем небольшое отступление. Вы могли заметить в исходном коде действия понятие ValueStorage. Рассмотрим его немного подробнее.

В процессе использования этого действия «в бою» оказалось удобным вызывать его в цикле с разными контактами. Например, сотрудник не смог выяснить всю необходимую информацию по контакту, тогда БП предлагает позвонить другому контакту. Когда, позднее, сотрудник вернется к первому, все введенные значения в поля анкеты, соответствующие данному контакту, должны быть восстановлены. Поэтому значения хранятся отдельно от анкеты и сразу для всех контактов, с которыми было запущено данное действие. ValueStorage — свойство действия, массив, ключами которого являются ID контакта, либо номера телефонов, значения — массивы значений для полей анкеты. Метод getValueStorageName возвращает ключ массива ValueStorage, соответствующий выбранному контакту.

В методе OnExternalEvent мы сохраняем введенные значения в ValueStorage и проверяем, все ли обязательные поля заполнены.

$arEventParameters — аргумент метода OnExternalEvent. Код сохранения значений полей анкеты изучите самостоятельно.

Теперь при запуске БП можно видеть как создается задание и выполнить его.

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

Тестовый пример

Проверим работу нашего действия на примере небольшого БП в ленте.

Дозвонились или нет — поле анкеты (результат). БП будет ставить задание на звонок с интервалом в 1 час до тех пор, пока ответственный не укажет в анкете, что звонок был успешным.

Действие имеет следующие настройки.

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

Анкета, в данном случае, соответствует полям документа.

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

Запустим БП. У нашего действия выполнится метод Execute, затем Subscribe, будет создано задание БП.

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

Созданное задание мы увидим в ленте.

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

При нажатии кнопки «Приступить» выполнится метод ShowTaskForm, который выводит анкету.

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

Нажатие на номер телефона запускает звонок через телефонию Битрикс24.

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

После того как связь с абонентом будет успешно установлена, в правом верхнем углу появится кнопка «Свернуть». Окно звонка будет минимизировано и появится возможность заполнять анкету прямо во время разговора. В левом нижнем углу экрана вы увидите следующее:

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

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

Сразу после завершения звонка в ленте контакта будет создано сообщение, как при обычном звонке из карточки контакта:

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

Вернемся к форме задания. Если ввести что-либо, кроме результата, и нажать «Готово», то выполнится метод PostTaskForm, затем OnExternalEvent. Как мы помним, если хотя бы одно обязательное поле не заполнено, задание не завершится. В нашем случае обязательно только одно поле — результат, которое мы специально не заполнили. В результате задание останется в ленте и к нему можно будет снова «Приступить». При этом введенные значения будут сохранены.

Теперь выберем результат «Не дозвонились». Задание стало завершенным, но это временно. Мы видим, что сам БП «Выполняется».

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

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

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

Теперь введем корректные значения и выберем результат «Дозвонились». БП завершился.

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

Введенная информация сохранилась в поля документа (см. последний шаг БП).

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

В журнале БП можем видеть результат вызовов WriteToTrackingService.

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

Для тестирования, мы, конечно, заменили 1 час на одну минуту Как сделать комментарии в битрикс

Заключение

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

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

Также возможно подключение собственных сущностей в качестве документов БП, но это уже отдельная тема.

Пишите в комментариях ваш опыт разработки своих действий.
Какие еще статьи по кастомизации коробки Б24 вы бы хотели видеть?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *