Статьи 1С Битрикс | Пример создания компонента
Компоненты в битрикс размещаются по пути от корня вашего сайта /bitrix/components В этой папке всегда есть каталог bitrix нем расположены компоненты, которые достались вам при установки Битрикса и количество этих компонентов варьируется в зависимости от используемой вами редакцией продукта.
В папке /bitrix/components можно создавать свои папки, в терминах битрикса это называется “пространством имен”, так например при установке модулей из Маркетплейс модули партнеров скопируют свои компоненты именно в эту папку, предварительно создав в ней свое “пространство имен”.
Не путайте термин “пространства имен” в рамках Битрикса и пространства имен PHP этот термин остался в Битриксе исторически и нам придется с этим мириться.
Так же компоненты можно разместить в каталоге /local/components в этой папке нужно так же создать свое “пространство имен” в виде отдельного каталога в котором и разместить свой компонент.
Для размежения локальных компонентов, которые пишутся под конкретный проект, а так же для кастомизации стандартных компонентов Битрикса нужно использовать именно папку /local/components
Для нашего примера будем использовать папку ‘example’ в качестве “пространства имен”, а назовем компонент compsimple таким образом итоговый путь к файлам разрабатываемого компонента будет таким: /local/components/example/compsimple .
Битрикс24: методы для работы с чатами через API
Обратите внимание на возвращаемый методом массив данных, так как он позволяет решить сразу несколько задач:
- список участников чата (ключ userInChat )
- список участников чата отключивших уведомления (ключ mute_list )
- иконка чата (ключ avatar )
- идентификатор владельца/модератора чата (ключ owner )
- название чата (ключ name )
- внешний/внутренний чат (ключ extranet )
Пример вызова метода:
Добавление пользователя в чат
Метод CIMChat::AddUser достаточно специфичный, подробности — в документации.
Для добавления пользователя в чат без системного уведомления о добавлении нового пользователя:
В данном примере пользователь добавляется без доступа к истории сообщений чата. За это отвечает третий параметр, который задан как null . Для добавления пользователя в чат с доступом к старой переписке — этот параметр нужно убрать.
Для добавления пользователя с системным комментарием вида «Иванов Иван присоединился к чату»:
Удаление пользователя из чата
Используем метод CIMChat::DeleteUser . Ссылка на документацию.
Открыть чат по клику на ссылку
Данное решение будет полезно для того, чтобы добавить ссылку на определенный чат в документацию или Базу Знаний вашего портала. Все просто:
где [CHAT_ID] — уникальный идентификатор чата.
Получить сообщения из чата
Массив $message будет содержать выборку списка сообщений чата.
Механизмы работы с сообщениями в чате
Рассмотрим несколько методов для работы с сообщениями по их уникальному идентификатору. ID сообщения можно посмотреть через исходный код страницы:
Получение сообщения по ID
Редактирование сообщения по ID
Стоит обратить внимание на параметры функции:
- $id — идентификатор редактируемого сообщения
- $text — новый текст сообщения
- $urlPreview — показывать превью ссылок
- $editFlag — показывать что сообщение было отредактировано
- $userId — идентификатор пользователя (автора)
Если в качестве $text передать пустое значение, то это будет равносильно удалению сообщения. Однако, это не совсем полноценное удаление, так как в чате останутся следы в виде фразы «Это сообщение было удалено».
Для редактирования сообщения других пользователей обязательно передавать ID автора сообщения в параметре $userId .
Пример вызова метода:
Удаление сообщения по ID
- $id — идентификатор удаляемого сообщения
- $userId — идентификатор пользователя (автора)
- $completeDelete — полное удаление / замена на сообщение-заглушку
Здесь все по аналогии с редактированием сообщения, если сообщение нужно удалить полностью, то третьим параметром передаем значение true . Если передать false , то будет выполнена замена текста сообщения на «Это сообщение было удалено». Исходный код метода.
Есть и альтернативный вариант, в котором требуется указать только идентификатор сообщения:
<script type=»text/javascript»>
$(document).keyup(function(event) <
event = event || window.event;
var link = null;
if (!event.ctrlKey)
return;
var key = (event.keyCode ? event.keyCode : (event.which ? event.which : null));
if (key == 39)
link = $(‘.next-prev-pager .ts-next-page’);
else if (key == 37)
link = $(‘.next-prev-pager .ts-prev-page’);
if (link && link.attr(‘href’))
document.location = link.attr(‘href’);
else if(key == 39 || key == 37)
alert(‘Дальше новостей пока нет, заходите попозже или подпишитесь на мои статьи в форме в самом низу!’);
jQuery-код добавьте в самом конце шаблона, самым последним.
Вот, собственно и весь код, навигация по соседним элементам инфоблока готова!
Получение элементов со страницы — Методы getElementById, getElementsByTagName и getElementsByClassName
Здесь мы будем использовать JavaScript для работы c веб-страницей.
Как получать элементы со страницы?
Это начало важной темы . Здесь формируется понимание того, как работает JavaScript.
При этом первым делом нужно знать, что такое DOM — Объектная модель документа. Об этом далее.
DOM — Объектная модель документа
О том, что такое DOM — Объектная модель документа — читайте здесь.
Итак, веб-страница — это некий документ , который имеет определенную структуру. И когда документ (страница) существует, то к нему можно обратиться как к объекту . Отсюда и название Объектная модель документа.
У любого объекта есть методы. Таким образом применительно к веб-странице , как к объекту , используются определенные методы : для получения доступа к элементам страницы и для какого-либо взаимодействия с ними.
Глобальный объект document
Чтобы обратиться к DOM используется объект document — это глобальный объект веб-страницы. Это и есть сама страница.
Об объекте document — читайте здесь и немного здесь (для лучшего понимания).
Если набрать в консоли браузера document. то мы увидим список всех свойств и методов глобального объекта document, которые можно использовать применительно к веб-странице.
Для практики, чтобы иметь навыки получения элементов с веб-страницы и взаимодействия с ними, мы будем работать с простой страницей — вот так она выглядит в браузере.
Это ссылка на архив с исходными файлами.
Методы для получения элементов с веб-страницы
Методы для получения элементов с веб-страницы можно разделить на 2 категории :
1) Это методы которые существуют уже давно. Они будут рассмотрены на этой странице.
2) Методы которые появились относительно недавно. О них читайте здесь.
Итак, начнем с 1-ой группы методов , которые существуют уже давно и используются для получения элементов с веб-страницы.
1) Это методы которые существуют уже давно. Они будут рассмотрены далее.
2) Методы которые появились относительно недавно.
Итак, начнем с 1-ой группы методов , которые существуют уже давно и используются для получения элементов с веб-страницы.
Метод getElementById — Выборка по id
Метод getElementById существуют уже давно и отвечает за выбор элемента страницы по id идентификатору.
Напомним, что id-идентификатор уникален и может быть только один на странице.
Дополнительно о методе getElementById читайте здесь.
Пример 1.1
Результат в консоли
В результате мы видим элемент страницы — это блок div с id="box" . Так работает метод getElementById. Это довольно простой метод.
Метод getElementsByTagName — Выборка по имени тега
Рассмотрим примеры того, как работает метод getElementsByTagName.
Метод getElementsByTagName существуют уже давно и отвечает за выбор элементов страницы по имени тега.
Таких элементов может быть не один, не два, а десятки, сотни и даже тысячи. Метод getElementsByTagName возвращает псевдомассив из указанных элементов.
Дополнительно о методе getElementsByTagName читайте здесь.
Продолжим работать с кодом из примера 1.1 и сделаем выборку всех кнопок — это тег button .
Пример 2.1
Результат в консоли
В результате мы получили HTMLCollection (HTML-коллекцию): псевдомассив из элементов button — из 5-ти кнопок.
Как получить доступ к конкретному элементу — к конкретной кнопке?
Для этого нужно обратиться к ней как к элементу массива .
Продолжим работать с html-кодом из примера 2.1.
И получим доступ ко 2-ой кнопке , то есть к элементу массива с индексом 1 .
Пример 2.2
Результат в консоли
Это был первый способ: на этапе формирования запроса при помощи метода getElementsByTagName, было указано, к какому элементу псевдомассива, мы хотим получить доступ.
Мы увидим тот же результат, если сделаем так:
Пример 2.3
Результат в консоли
Здесь мы с начала сформировали псевдомассив , сделав выборку всех кнопок. И после этого указали, какая кнопка (какой элемент массива) нас интересует.
Что если на странице будет один элемент/один тег? В данном случае — одна кнопка (один тег button). Что в этом случае возвращает метод getElementsByTagName?
Пример 2.4
Результат в консоли
В любом случае мы будем иметь дело с псевдомассивом. Поэтому для взаимодействия с конкретным элементом страницы, полученным в результате работы метода getElementsByTagName, к нему следует обращаться как к элементу массива.
Важно усвоить этот момент .
Следует понимать, как работает метод getElementsByTagName.
В реальной практике метод getElementsByTagName используется редко .
Метод getElementsByClassName — Использование классов
Помимо тегов для доступа к элементам страницы можно использовать и классы.
Метод getElementsByClassName существуют уже давно и отвечает за выбор элементов страницы по имени класса.
Метод getElementsByClassName работает также, как и метод getElementsByTagName и возвращает псевдомассив из элементов с указанным классом.
Продолжим работать с кодом из примера 2.1 и сделаем выборку всех элементов с классом circle .
Пример 3.1
Результат в консоли
В результате выборки по классу мы получили HTMLCollection (HTML-коллекцию): псевдомассив из 3-х элементов страницы — это теги div с классом circle .
Здесь была рассмотрена работа трех методов, предназначенных для получения элементов в веб-страницы: getElementById, getElementsByTagName и getElementsByClassName.
Далее читайте о получении элементов по CSS селектору : это методы queryselectorall и queryselector .
Универсальные списки в Битрикс24
Всё о применении универсальных списков в Битрикс24. Подробно на примерах разбираем механизм и тактику работы со списками.
Вот вы стали счастливым обладателем самого старшего тарифа облачного Битрикс24 (или коробки). Всё в нём хорошо, но не всё понятно. Так, например, в разделе «Сотрудники» вы нашли раздел «Списки». А в нём — ничего нет кроме кнопки «Создать новый». Но желания нажать на неё не появляется, потому что не понятно, зачем это делать. Давайте разберёмся с этим вопросом. Не зря же модуль «Универсальные списки» так ценится интеграторами Битрикс24.
В первую очередь модуль «Универсальные списки» нужен для хранения в себе информации. Какой — решать только вам. Примерно, как с Excel, только лучше. В момент создания списка, вы сами решаете какие данные и каких типов вы будете в нём хранить. По типам ограничений почти нет:
Привязка к другим спискам
Привязка к элементам CRM
Привязка к сотруднику
Привязка к Яндекс.Карте
По любому из полей вы сможете отфильтровать наполненный данными список и почти по всём — отсортировать.
Безусловным преимуществом универсальных списков является и то, что они позволяют настраивать права доступа к данным. Права могут быть настроены с точностью до элемента. Не получится, как с общей таблицей в excel: все всё видят и редактируют.
Так как списки являются частью инфраструктуры Битрикс24, то не использовать их в связке с другими элементами системы было бы преступлением. Если вы предусмотрите привязку элементов списка к карточкам CRM (в полях списка создадите поле с типом «Привязка к элементам CRM»), то в элементах CRM у вас появится вкладка с соответствующим списку названием. Это очень удобно, если нужно организовать связанное с элементами CRM хранилище каких-либо данных.
Ну и конечно, запуск бизнес-процессов. Универсальные списки позволяют настраивать алгоритмы автоматизированных операций с элементами списков. А это значит, что сценариев их использования становится намного больше.
Давайте рассмотрим наиболее популярные сценарии использования универсальных списков.
Быстрые ответы для открытых линий
Если вы являетесь активным пользователем открытых линий Битрикс24 и часто консультируете с внешними пользователями через чаты, то представляете, как много времени и фантазии может сэкономить список с заготовленными быстрыми ответами на часто задаваемые вопросы.
В открытых линиях Битрикс24 хранение таких фраз реализовано как раз в универсальных списках.
По кнопке «Создать» у вас создаётся список со всеми необходимыми полями, который вы просто заполняете различными вариантами ответов клиентам, группируя их по категориям. В итоге в чатах получаете прекрасную возможность не писать ответ каждый раз заново.
Хранение информации, разделённое по правам
Права доступа в списках настраиваются очень гибко. Допустим, у вас есть задача создать единое хранилище данных доступа ко всем сервисам компании (социальные сети, сервисы рассылок, программы учёта и так далее). Но хранить информацию в этом списке нужно так, чтобы маркетолог имел доступ к одним записям, а бухгалтер – к другим. А ещё они самостоятельно могли их вносить, если появляется что-то новое.
Реализуется это следующим образом: при добавлении списка или его редактировании переходите на вкладку «Доступ» и устанавливаете следующую конфигурацию.
Добавление — это значит, что сотрудник сможет добавить элементы.
Изменение у роли Автор значит, что то, что добавил – сможет изменить.
Далее в настройках каждого конкретного элемента списка проставляете, какие пользователи или отделы могут его читать. Так же, на вкладке «Доступ».
Записи, чтобы не забыть
Не редко появляется необходимость иметь возможность что-то быстро записать, чтобы не забыть. Списки помогут и в этом.
Так, например, у нас есть список «Бэклог», привязанный к контрагентам. Он позволяет записывать пожелания клиентов к функционалу системы, которые не срочные или просто не стоят в приоритете, но которые хотелось бы когда-нибудь выполнить. В момент, когда такое пожелание возникает, мы открываем карточку контрагента в CRM и на отдельной вкладке «Бэклог» записываем пожелания. Это занимает мало времени, а для собственного удобства мы добавили ещё «Статус» пожелания — отмечаем что реализовали, а что ещё ждёт.
Учёт связанной с CRM информации
Вообще, чем глубже вы работаете с CRM, тем больше связанной с клиентами и сделками информации вам захочется записывать. В полях сделки делать это не рационально, а вот создавать отдельные списки и прикладывать информацию в них – очень даже разумно.
Совсем свежий из реализованных примеров: информация об учащихся, прошедших обучение по сделке. Компания занимается сертификацией. На курсы к ним отправляют группы сотрудников. В контактах они не нужны, но учёт вести необходимо. Создан список, в котором указываются базовые данные об учащемся, а также результаты его сертификации. Элемент имеет одно из полей – привязка к сделкам. В результате, в сделках указывается, перечень всех учащихся по сделке, что очень удобно для анализа.
Хранение информации об объектах, требующих регулярности
Представьте, что у вас сотрудники получают сертификаты, а они имеют свой срок действия. Или клиенты приобретают товар (страховые полиса), которые требуют регулярного продления. В этом случае, такую информацию нужно сохранить. Да не просто так, а чтобы за некоторое время до превращения сертификата/полиса в тыкву, система напомнила, что нужно обратить на него внимание.
Такой функционал тоже реализуется с использованием универсальных списков. Вам нужно описать объект, установить срок его действия и реализовать простой бизнес-процесс напоминания
Бизнес-процесс в своей самой простой реализации может иметь следующий вид:
- Подождать, пока не наступит день Х минус Y дней (заранее напоминаем же)
- Поставить задачу
Списки для учёта и запуска процессов обработки документов
Из двух последних примеров просто напрашивается следующий пример. Если нужно помимо учёта каких-либо данных, ещё и выполнить по ним заданную последовательность действий, то тут опять помогают бизнес-процессы. Входящие и исходящие письма, договоры, рекламации великолепно перекладываются на учёт в универсальных списках, связанных с элементами CRM, и дают множество дополнительных возможностей.
1. Регистрация документа: зашёл в карточку клиента, открыл нужную вкладку и добавил документ
2. Автоматические действия: заполнил поля, сохранил, запустился процесс, который по данным из полей понял, что нужно делать и направил задачи, запросы и уведомления всем ролям. А потом ещё подготовил решение и отправил его клиенту
Внесение информации о связанных объектах и использование её при работе с процессами
Ещё более сложный сценарии – это сценарии организации взаимозависимых элементов CRM и списков. И по элементам CRM, и по элементам списков мы можем запускать бизнес-процессы. А в конструкторе процессов есть блок «Запуск бизнес-процесса». Тем самым, процесс по одному элементу может запустить процесс по-другому, передав ему необходимые данные.
Если конкретнее, то представьте, что у вас в список загружен перечень объектов недвижимости. В сделках вы эти объекты продаёте. Из сделки у вас должна быть возможность выбрать, какой объект клиент выбрал. Он должен быть помечен, как забронированный, а в сделку передаться ключевые данные из объекта для формирования документов. Это всё реализуется связанными процессами. Какие-то запускаются автоматически на добавление/изменение, а какие-то тем самым действием «Запуск бизнес-процесса». В итоге мы имеем целостную систему по работе с объектами, а также возможность удобного генерирования документов по сделке.
И ещё несколько простых и бытовых примеров использования списков.
Использование списков, как дополнительных сквозных справочников в процессах
Этот пример не связан с бизнес-процессами, но он связан с хранением и редактированием данных. В CRM карточке сотрудника и элементах списков есть поле с типом «Привязка к элементам» и «Привязка к разделам», речь идёт именно про привязку к элементам и разделам списков.
Удобство заключается в том, что если вам нужно организовать поле с выбором варианта, то чаще всего выбор упадёт на поле с типом «Список», в котором вы просто эти варианты перечислите. А что, если таких полей в разных элементах много, а список значений – один и тот же? Правильно: варианты значений нужно хранить в универсальном списке, а поле привязать к нему. Если что-то изменится, редактировать нужно будет в одном месте, а не во всех. Да и при работе с автоматизацией это намного удобнее, потому что идентификаторы значений одни и те же, а значит их проще анализировать.
«Привязка к элементам» отличается от «Привязки к разделам» тем, к какой сущности списка привязываетесь. На элементах хорошо строятся «плоские» списки, а на «разделах» — древовидные.
Нумераторы и роли в списках
Благодаря тому, что бизнес-процессы позволяют не только работать с объектом, на основании которого они запущены, но и получать информацию о других элементах, мы можем организовывать на универсальных списках хранилища констант и переменных, глобальных для всех процессов. От глобальных констант такая конструкция выгодно отличается тем, что глобальные константы может редактировать только администратор, а списки – тот, кому дали права.
Так, например, можно создать список с ролями сотрудников. Каждый элемент – роль. В роли указано её название и привязанный сотрудник. В процессе, когда нам нужно получить сотрудника для роли, мы выбираем данные по известному нам элементу списка действием «Чтение элемента списка».
Или другой пример – нумераторы. Создаётся список с нумераторами для различных типов документов. Его задача – только лишь хранить последнее значение номера. Когда нужно присвоить номер документу, запускается процесс, который получает данные из этого элемента, добавляет единичку и сохраняет новое значение в элемент списка действием «Изменение элемента списка». Полученный же номер обогащается по различным правилам данными используется, например, при генерации документа.
Ну и напоследок…
Каждая роль в Битрикс24 работает со своими инструментами. Для менеджеров это, конечно же, CRM. А вот для логистов или водителей-экспедиторов это могут быть и списки, в которые по заданным правилам из CRM подгружается информация о том, какие товары к какому дню нужно подготовить к отгрузке, а какие заказы по какому адресу и когда – доставить. Мы, опять же, используем в этом случае всё те же приёмы связи между собой списков и CRM, автоматизацию на процессах. В итоге получаем удобную передачу информации между отделами и формирование всех необходимых заявок и задач, чтобы никто ничего не забыл.
Примеров использования списков множество. Они, действительно, универсальные и очень функциональные. Нередко мы сталкиваемся с тем, что клиенты переходят на старший тариф только ради этого незаменимого инструмента. Обращайтесь за поддержкой, сопровождением и доработкой вашего портала, мы всегда рады помочь!
Что такое ID в «Телеграме» и какое у него назначение
Идентификатор в ТГ – это комбинация цифр, которая присваивается аккаунту, чату или каналу при регистрации. ID отвечает за корректное взаимодействие пользователей внутри мессенджера – загрузку диалогов, отправку сообщений, возможность вступать в группы, писать комментарии и пр.
Данные генерирует система. В отличие от ника, тегов или номера телефона, которые владелец аккаунта может редактировать, поменять код невозможно.
Идентификатор нельзя просмотреть в настройках профиля, эта информация скрыта. В старой версии мессенджера такая функция присутствовала, но затем разработчики убрали ее в целях повышения безопасности.
Однако бывают ситуации, когда знать комбинацию цифр необходимо – она потребуется при создании сообщества или настройки группового чата. Тогда и возникает вопрос, как посмотреть ID.
Легкие, небольшие, классические дачные дома. Строятся из бруса и по каркасной технологии. По вашему желанию они могут быть адаптированы и для зимнего проживания
Наши архитекторы воплотят в жизнь любые ваши идеи по проектированию дома и обустройству участка. Мы создадим для вас настоящий дом для жизни.
Станьте владельцем земельного участка и готового дома под ключ, получив преимущества заказа всех услуг в одной компании с гарантией до 25 лет.
Не нужно прилагать лишних усилий – обеспечить полноценную жизнь за городом с компаний «Теремъ» просто.
В готовый комплекс услуг уже входят обустроенный участок, огороженный по периметру забором с четырёхметровыми воротами и калиткой, в посёлке с полной инфраструктурой (дороги, вывоз мусора, магазины, охрана), и строительство комфортабельного современного дома, оснащённого водоснабжением, электричеством, отоплением и канализацией.