1с битрикс создание модуля
Всем привет, давно хотел написать данную простенькую статейку, но все не находил времени.
Итак, всем известно (или почти всем), что уже в продукте есть и новое ядро, ORM и все это постепенно улучшается. Так вот, сегодня я вам расскажу какая примерно последовательность создания модулей на новом ядре с использованием ORM. Отчасти затрону использование amCharts , который идет в поставке как КП, так и БУС, и вы можете использовать его в полном объеме.
Структура файлов
Так как модуль для локального использования, то будем использовать папку local в корне сайта, которая стала доступна с 14 версии ядра.
Мой модуль называется my.ticketstat, так и называется папка модуля, размещенная в /local/modules/. В ней у нас примерно стандартный набор, это папки: admin, install, lang, lib. Отдельно заострим внимание на lib - теперь никаких папок classes и прочего. Тут у нас будет хранится основная логика модуля, и это нам позволит использовать namespace с автоподгрузкой при вызове.
Логика работы модуля
Логика будет достаточно простая:
1. Принять данные.
- данные будут приходить из внешнего источника, поэтому будет использоваться публичный скрипт.
2. Отдать обработанные данные.
- данные отдаются в виде json, с последующей обработкой и построением графика в amCharts.
База данных
База у нас будет очень простая, всего с двумя полями (integer и datetime).
Для её описания в ORM воспользуется пока скрытыми возможностями модуля производительности, а именно, работы с таблицами.
Добавляем GET параметр orm=y и у каждой таблицы в контекстном меню добавляется пункт ORM.
На выходе получаем почти готовые данные для описания таблицы. После некоторых изменений, у нас остается:
Работа с данными
Для начала нам надо получить данные, и записать их в нашу базу данных.
За это у нас будет отвечать файл tools/stat_add.php.
Необходимые значения будут передаваться через GET, поэтому будем использовать объект запроса:
Для записи в базу, нам не надо придумывать велосипеды, методы ORM у нас уже есть на вооружении, достаточно ими воспользоваться:
Как видно, все гениальное - просто!
Теперь на очереди получение данных, за это у нас отвечает файл tools/get_stat.php.
Данные могут отдаваться за определенный день:
так и от определенного времени:
И фильтр идет в наш GetList, который мы также сами не писали:
Тут мы используем наш конвертер данных, чтобы они у нас получались сразу в нужном формате.
Сам конвертер у нас определен в файле lib/testconverter.php:
как видно, ничего сложного.
В начале я упоминал про amCharts . Вот его то мы и будем использовать для вывода наших данных.
Честно говоря, мне сильно наскучили графики, которые выводятся как единая картинка. А тут у нас готовая библиотека для построения красивых и динамичных графиков и прочего.
Всего-то нам надо подключить:
/bitrix/js/main/amcharts/3.3/amcharts.js
/bitrix/js/main/amcharts/3.3/serial.js
Поигравшись с желаемым видом графика, настройками и темой, мы можем получить приятный результат подобного вида:
Цитатник веб-разработчиков.
Степан Овчинников: Удивительно, но платность Битрикса вызывает почему-то гнев тех, кто за него никогда не платил.
Основа работ по созданию собственных продуктов для Маркетплейс - создание собственных модулей. В курсе рассказано, как расширять функционал проектов на основе Bitrix Framework с помощью сторонних модулей и решений.
С версии главного модуля 16.5.11 коробочные продукты поддерживают REST API. Коробочному порталу, который использует работающие через REST API приложения нужен SSL сертификат. Без него работа приложений не гарантируется. Так же рекомендуется разворачивание портала в кодировке UTF-8. Перед созданием приложений с использованием REST ознакомьтесь с курсом Приложения Битрикс24.
Перед прохождением курса рекомендуется сначала пройти курс Разработчик Bitrix Framework.
Начальные требования к подготовке
Для изучения курса и овладения мастерством работы с собственными приложениями для Битрикс24 освойте (хотя бы на начальном уровне):
- основы PHP;
- основы HTML, CSS;
- опыт работы с API и REST API.
Курс учебный, контрольные тесты и сертификация по нему не предусмотрены.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат - это если общее число набранных Вами баллов отличается от максимального на 1-2%.
Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
В сети легко можно найти мануал по созданию модулей с пользовательскими компонентами, но не рассматриваются другие типичные ситуации. А между тем, это могло бы помочь развитию разработчиков и улучшению общего уровня кода под Битрикс.
Можно много спорить о самом Битриксе, но он продолжает существовать, и разработчикам нужны знания. Я опишу создание модулей на примере шуточного модуля “Почта России”. Он запретит редактирование элементов инфоблоков в субботу, воскресенье и в обед.
Методика решения
1. Мы воспользуемся хэндлерами, чтобы поймать и заблокировать событие редактирования элемента.
2. Мы обернём эти хэндлеры в модуль, чтобы наш функционал можно было использовать на любом сайте.
Этот подход будет полезен, когда
1. При сохранении элемента инфоблока нужно специфически проверять данные (и это повторяется из раза в раз, на различных проектах)
2. При сохранении или изменении одной сущности, нужно задействовать другую, например:
— запостили веб-форму — изменили что-то в инфоблоках
— изменили секцию — необходимо изменить что-то в её элементах или других секциях и т.п.)
— изменили элемент в инфоблоке — необходимо создать агент, который в указанное время отправит письма.
и т.п.
3. По достижению некоего события, нужно бросить событие в модуль статистики.
4. Вы хотите научиться делать модули для 1С-Битрикс и выкладывать их на Маркетплэйс.
Шуточный модуль «Почта России»
Шаг 1: пишем хэндлер
На этом шаге всё до банальности просто и качественно задокументировано.
Пользуясь хэндлером OnBeforeIBlockElementAdd
и близких к нему мы создаём функцию, блокирующую редактирование в определённое время
Вынесем надпись в настройки модуля, чтобы научиться это делать.
Итак, для хранения настроек модулей существует класс COption. Добавим это в нашу функцию:
Памятка:
После того, как напишете код, который собираетесь обернуть в компонент — выделите в нём настройки.
Разумеется, ниже мы рассмотрим, как сделать админку, позволяющую редактировать настройки модуля. Также хочется предупредить, что класс COption умеет хранить только два типа настроек — integer и string. К сожалению, поддержки массивов не существует и в случае необходимости её придётся реализовывать окольными путями, например, с помощью таблицы.
Шаг 2: создадим “болванку” модуля.
Возможные ошибки:
Если Вы создадите модуль и в названии будет присутствовать точка, возможно Вы не увидите его в списке модулей в админке. Битрикс преобразует точку в подчёркивание в названии класса и функций. Внимательно изучите исходники Битрикса и/или чужие модули, если собираетесь использовать точку.
Итак, заменив в вышеприведённой “болванке” название модуля на russianpostjoke везде, где это необходимо, мы получили нашу заготовку.
Перейдём к наполенению её необходимым функционалом.
Шаг 3: наполняем модуль функционалом
Создадим класс cBlocker и разместим его в папке russianpostjoke/classes/general/cMainRPJ.php — туда мы внедрим наш хэндлер в качестве метода.
Памятка:
Старайтесь размещать классы, используемые в своём модуле именно в папке /classes/, следуя стандартам, заданным уже стандартными модулями Битрикс.
Обратите внимание, что этот вызов должен осуществляться последним, прямо перед конструкции return.
В результате, Вы должны увидеть у себя в админке нечто подобное:
Появившийся модуль можно установить и сразу после установки наш заявленный функционал будет работать.
Шаг 4: админка
Вместо заключения
Мы рассмотрели самый простейший модуль, есть о чём рассказать ещё минимум на 3 статьи. Если тебе, %username%, оказался полезным этот материал, или ты, как и я, хочешь улучшения уровня разработчиков под 1С-Битрикс, поддержи статью. Спасибо.
Наш модуль после установки добавляет на страницы сайта кнопку плавной прокрутки страницы вверх. Какие файлы и папки могут и должны быть, можно изучить в соответствующем разделе документации Битрикс. Модуль разместим в директории local/modules и создадим такую файловую структуру:
Как видите, внутри local/modules/scrollup у нас:
- install — набор скриптов для установки и удаления модуля;
- lang — набор языковых файлов модуля;
- lib — набор файлов, в которых реализуется логика решения;
- include.php — файл, подключаемый при вызове модуля в коде;
- options.php — страница настроек, подключаемая в административной части.
Рассмотрим подробнее папку install :
- assets — содержит JavaScript и CSS кнопки, которые будут подключаться в пользовательской части;
- index.php — файл, в котором содержится описание модуля и реализуется его установка и удаление;
- step.php и unstep.php — соответственно шаги установки и удаления, их может быть несколько;
- version.php — файл содержит версию и время обновления нашего модуля.
Теперь нам нужно написать класс, в котором будет реализована установка и удаление модуля. Имя класса должно совпадать с директорией модуля и являться наследником от CModule . Метод doInstall() вызывается при установке модуля из панели управления, метод doUninstall() — при деинсталляции модуля. Метод doInstall() подключает файл step.php , а метод doUninstall() — файл unstep.php
Теперь в панели управления на странице «Настройки • Настройки продукта • Модули» мы видим наш модуль:
И можем установить его:
Создадим страницу настроек для модуля. Через панель управления контент менеджер сможет:
- Включать/выключать модуль;
- Подключать библиотеку jQuery, если она еще не подключена;
- Изменять ширину/высоту/радиус и цвет кнопки;
- Менять положение кнопки и скорость анимации.
Когда мы описывали код установки модуля, то привязались к событию OnBeforeEndBufferContent и указали метод appendJavaScriptAndCSS() класса Main как обработчик. Теперь настало время его написать:
Осталось только написать js-код для прокрутки страницы наверх и задать css-стили для кнопки:
Дополнительно
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Совсем недавно, а точнее несколько месяцев назад, моя деятельность переплелась с системой управления содержимым 1С-Битрикс. И хотя в начале я был не восторге, а многие вещи мне казались запутанными и местами нелогичными, но чем дольше я работал с 1С-Битрикс, тем больше убеждался, что 1С-Битрикс – это система, которая позволяет реализовать проект любого уровня сложности. Если после установки одной из редакций движка, возникает необходимость в дополнительной функциональности, её можно расширить при помощи платных или бесплатных модулей. Сегодня же я расскажу, как написать такой модуль самому.
После прочтение документации, статей и просмотра видео уроков можно определено сказать, что после написания собственного модуля – степень понимания работы 1С-Битрикс вырастит на существенный уровень. По крайней мере, раньше я считал Битрикс просто CMS, но сейчас, он развивается как платформа для разработки веб-приложений - Bitrix Framework. Поработав определенное время с относительно крупными проектами на 1С-Битрикс, могу сказать, что как по мне, мало «это» напоминает фреймворк, больше мешанину (эта одна из причин по которой многие из моих знакомых отказываются работать с Битрикс), особенно, где код не переработан под новое ядро D7.
Итак, давайте притупим, и для начала нужно определиться, что и как писать. Первое и самое важное - разрабатывать модуль мы будем с максимальным использованием нового ядра D7, поэтому я не поленюсь потратить время на документацию. Использование D7 делает код более красивым и логичным. Во-вторых, в этой статье мы рассмотрим создание простого модуля, а в будущем эти наработки я хочу использовать для написания более интересных штук.
Что же написать? Тут я решил не мудрить и залез на маркетплейс и наткнулся:
Что интересно, казалось бы, добавить к себе кнопку наверх по сути пару минут, но есть платные решения и у некоторых из них более 300 скачек. В общем, говоря, выбор у меня для первого модуля пал именно на данную кнопку с набором настроек, которые можно будет менять через админку сайта.
Структура модуля
Разрабатываемый модуль рекомендуется помещать в папку local, так мы и поступим, это позволит его отделить от других решений и работать будет немного приятнее и проще. Какие файлы и папки могут и должны быть, можно изучить в соответствующем разделе документации Битрикс . Для реализации нашей задумки структура будет выглядеть так:
- Пака модуля falbar.totop – название её в системе используется как индификатор, так что рекомендуется добавлять помимо названия и имя партнера. Соответственно falbar – имя партнера, totop – название модуля;
- Внутри лежат три папки: install – набор скриптов для установки и удаления модуля, lang – набор языковых файлов, lib – набор файлов, в которых реализуется логика решения;
- И осталось два файла: include.php – файл, подключаемый при вызове модуля в коде (его мы использовать не будем и оставим пустым), options.php – страница настроек, подключаемая в административной части.
Теперь рассмотрим папку install поподробнее:
- assets – в этой папке я разместил JavaScript и CSS нашей кнопки, которые будут подключаться в пользовательской части;
- index.php – файл в котором содержится описание модуля и реализуется установка и удаление его;
- step.php и unset.php – соответственно шаги установки и удаления, их может быть сколько угодно, а также мы можем и не использовать их;
- version.php – в нем указывается версия и время обновления нашего модуля.
Для нашего решения все языковые параметры я вынес в соответствующие ленговые файлы, хотя можно было бы их и сократить, но для меня удобнее делать так. В дальнейшем в статье я буду приводить примеры только для русской локализации во избежание дублирования кода в статье.
Модуль кнопка наверх не требует сложной логики, мы больше будем заниматься оформлением его для системы, но параметры, которые нам нужны для настройки кнопки на стороне клиента необходимо как то получить, вот для этого и понадобиться класс Main, который мы разместим в соответствующем файле Main.php.
Установка и удаление модуля Битрикс
Вот мы и приступили непосредственно к написанию кода. Первое, что стоит заполнить это файл version.php:
Указываем в массиве два параметра версию и время обновление модуля и переходим к описанию главного файла index.php:
В новом ядре D7 широко используются пространства имен, поэтому подключаем все необходимые для нашего файла. Далее загружаем языковые файлы:
Теперь нам нужно написать класс, в котором будет реализована установка и удаление модуля:
Имя класса должно соответствовать папке модуля и являться наследником от CModule, только вместо точки стоит прописать нижние подчеркивание, после чего в адмике мы увидим, что система определила наш модуль:
Двигаемся дальше и сообщим системе больше информации, о нашем модуле, указав основные свойства, делать это я буду в конструкторе класса:
Рассмотрев несколько примеров решений, я пришел к выводу, что конструктор лучше всего подходит для выполнения такого рода задач. В нем мы подключили наш файл version.php и заполнили основные свойства для нашего класса. Перед тем, как посмотреть результат этих действий, нам нужно заполнить соответствующий языковой файл:
Вернемся в админку и посмотрим, как теперь выглядит модуль:
Следующий метод, который мы напишем, реализует процесс установки:
Добавим ещё несколько переменных в языковой файл:
Опишем три метода, к которым мы обратились из установочного DoInstall():
Копируем наши скрипты и стили в систему.
Так как мы не работаем с базой, оставляем этот метод пустым.
Регистрируем событие OnBeforeEndBufferContent. Перед тем, как страница будет отрисоваться, мы добавим свой HTML код, в котором сохраним настройки для нашей кнопки. Этот весь механизм далее напишем в файле Main.php.
С установкой мы закончили теперь опишем процесс удаления, заключаться он будет в нескольких методах:
Вызываем uninstall методы, удаляем регистрационную запись о модуле из базы данных и подключаем файл unstep.php, о котором мы выше уже говорили.
Мы описали ещё одну языковую переменную, добавим её в соответствующий файл:
А теперь поговорим о методах:
Удаляем добавленные скрипты и стили из системы.
Удаляем из базы настройки нашего модуля.
И в последнем методе удаляем регистрационную запись обработчика события OnBeforeEndBufferContent. Чтобы увидеть результат нам осталось описать два файла step.php и unstep.php так и сделаем.
И посмотрим, что получилось:
В принципе, он не сильно отличается от варианта в первом файле, добавим новые языковые переменные в соответствующий файл и проверим удаление модуля Битрикс:
Пишем страницу настроек для модуля Битрикс
Выше мы уже узнали, что страница настроек находится в файле options.php, сейчас он пуст и в административной части эта страница выглядит так:
Первым делам подключим все необходимые классы, языковые файлы и получим id модуля.
Что теперь? Надо описать настройки модуля и поместить их в массив.
Через административную часть мы позволим пользователю изменять:
- Включать/выключать модуль;
- Изменять ширину/высоту/радиус кнопки;
- Менять цвет;
- Менять положение кнопки и скорость анимации.
Для примера думаю, этих параметров хватит с головой, напишем массив настроек:
Вот у нас получился такой массив, со значениями по умолчанию. Как его заполнять можно изучить в документации, но там информации мало. Из примеров чуть больше можно найти на этой странице . Добавим в соответствующий языковой файл новые элементы массива MESS:
Нам осталось отрисовать форму, для этого создадим новый экземпляр класса CAdminTabControl, куда и передаём массив с настройками:
И обозначим конец отрисовки формы:
У нас появилось ещё две языковые переменные, добавим и их:
Скажу сразу, такой способ формирования формы один из самых простых, фактически, мы можем создать любой вариант форм, не пользуясь для этого Битриксовым функционалом. Вернемся в админку и посмотрим теперь на нашу страницу:
Как видите, получилось весьма годно, нам осталось только добавить код для сохранения настроек. Поместим его после массива с параметрами:
В обработчике мы также используем массив с параметрами для удобства сохранения, хотя это один из способов, в конце, конечно, нужно сделать редирект. Все настройки мы сохраняем при помощи статического метода set() у класса Option, который нужен именно для работы с настройками модуля. Вот мы и закончили со страницей настроек, теперь нам осталось подкинуть их в пользовательскую часть и обработать на стороне клиента.
Подключаем скрипты и стили кнопки, передаем настройки на страницу пользователя
Тут могут быть разные пути для решения этой задачи. В самом начале статьи, когда мы описывали код установки модуля, мы привязались к событию перед отрисовкой страницы и указали метод appendScriptsToPage() класса Main как обработчик. Теперь нам его нужно написать:
В методе мы определили, что он будет отрабатывать только на стороне клиента. Далее сформировали HTML код с набором настроек в json формате для удобства и добавили его в HEAD документа. В конце подключили скрипты и стили нашего Битрикс модуля кнопка наверх.
Вот и всё - параметры переданы, осталось их обработать на стороне клиента.
JavaScript и CSS кнопки наверх Битрикс модуля
Вот мы и подобрались к финальной части и осталось самое простое, на мой взгляд. Опишем стандартные стили нашей кнопки по умолчанию:
Незабываем код упаковать и добавить в style.min.css. Для работы кнопки нам нужна библиотека jQuery, качаем её с официального сайта и также добавляем её в соответствующий файл. Теперь напишем JavaScript, который и будет добавлять кнопку с учетом настроек:
В результате у нас получился такой код. Сам принцип написания кнопки я уже рассматривал в статье: Плавная кнопка прокрутки «Наверх», если вам интересен сам механизм. Осталось увидеть плоды нашей работы:
Казалось бы, столько времени потратили на добавление кнопки, но после прочтения этой статьи, я думаю, написать более сложный модуль не составит труда, а на этом я ставлю точку.
Читайте также: