Меню Рубрики

Bitrix как написать модуль

Как сделать модуль 1С-Битрикс

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

Можно много спорить о самом Битриксе, но он продолжает существовать, и разработчикам нужны знания. Я опишу создание модулей на примере шуточного модуля “Почта России”. Он запретит редактирование элементов инфоблоков в субботу, воскресенье и в обед.

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

Этот подход будет полезен, когда
1. При сохранении элемента инфоблока нужно специфически проверять данные (и это повторяется из раза в раз, на различных проектах)
2. При сохранении или изменении одной сущности, нужно задействовать другую, например:
— запостили веб-форму — изменили что-то в инфоблоках
— изменили секцию — необходимо изменить что-то в её элементах или других секциях и т.п.)
— изменили элемент в инфоблоке — необходимо создать агент, который в указанное время отправит письма.
и т.п.
3. По достижению некоего события, нужно бросить событие в модуль статистики.
4. Вы хотите научиться делать модули для 1С-Битрикс и выкладывать их на Маркетплэйс.

Шуточный модуль «Почта России»

Шаг 1: пишем хэндлер

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

Вынесем надпись в настройки модуля, чтобы научиться это делать.
Итак, для хранения настроек модулей существует класс COption. Добавим это в нашу функцию:

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

Разумеется, ниже мы рассмотрим, как сделать админку, позволяющую редактировать настройки модуля. Также хочется предупредить, что класс COption умеет хранить только два типа настроек — integer и string. К сожалению, поддержки массивов не существует и в случае необходимости её придётся реализовывать окольными путями, например, с помощью таблицы.

Шаг 2: создадим “болванку” модуля.

Создайте в папке bitrix/modules папку russianpostjoke. Это будет папка нашего модуля.
О том, какие файлы и почему нужно создать в папке можно прочитать в официальной документации.
Дабы не засорять статью листингами, предлагаю изучить исходники на гитхабе: https://github.com/may-cat/bitrix-dull-module

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

Итак, заменив в вышеприведённой “болванке” название модуля на russianpostjoke везде, где это необходимо, мы получили нашу заготовку.
Перейдём к наполенению её необходимым функционалом.

Шаг 3: наполняем модуль функционалом

Создадим класс cBlocker и разместим его в папке russianpostjoke/classes/general/cMainRPJ.php — туда мы внедрим наш хэндлер в качестве метода.

Памятка:
Старайтесь размещать классы, используемые в своём модуле именно в папке /classes/, следуя стандартам, заданным уже стандартными модулями Битрикс.

Теперь, нам необходимо прописать установку модуля. Воспользуемся файлом
russianpostjoke/install/index.php в котором есть методы DoInstall() и DoUninstall().
При этом в нашем случае необходимо выполнить три условия:
а) Воспользоваться функцией RegisterModuleDependences, чтобы установить в систему наш хэндлер из класса cBlocker, привязав его к штатным OnBeforeIBlockElementAdd и подобным.
б) Сообщить системе, что модуль установлен. Нам поможет RegisterModule($this->MODULE_ID);
в) Вызвать вывод сообщения для пользователя:

Обратите внимание, что этот вызов должен осуществляться последним, прямо перед конструкции return.

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

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

Шаг 4: админка

Если сейчас зайти в административной панели Битрикса на страницу Настройки / Настройки продукта / Настройки модулей / %Заглавие нашего модуля% то можно увидеть… ничего. А между тем, именно на этой странице должны находиться настройки нашего модуля.
Интересующая нас страница задаётся файлом russianpostjoke/options.php, и с этим связаны хорошие и плохие новости.
Плохая новость — все настройки, включая сохранение настроек, на данном этапе развития Битрикса, задаются этим файлом, зачастую в виде “простыни”.
Хорошая новость — многое уже сделали до вас, и можно воспользоваться существующими наработками. Рекомендую обратить внимание на то, как описаны настройки “Монитора производительности” (perfmon) — они достаточно просты для понимания.
Нам необходимо создать настройки одного-единственного поля WE_ARE_CLOSED_TEXT, которое мы использовали на шаге №1.
Полные исходники модуля выложены на гитхабе: https://github.com/may-cat/bitrix-russianpostjoke

Вместо заключения

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

Источник статьи: http://habr.com/ru/post/196376/

Пишем первый модуль для 1С-Битрикс с использованием ядра D7

Совсем недавно, а точнее несколько месяцев назад, моя деятельность переплелась с системой управления содержимым 1С-Битрикс. И хотя в начале я был не восторге, а многие вещи мне казались запутанными и местами нелогичными, но чем дольше я работал с 1С-Битрикс, тем больше убеждался, что 1С-Битрикс – это система, которая позволяет реализовать проект любого уровня сложности. Если после установки одной из редакций движка, возникает необходимость в дополнительной функциональности, её можно расширить при помощи платных или бесплатных модулей. Сегодня же я расскажу, как написать такой модуль самому.

После прочтение документации, статей и просмотра видео уроков можно определено сказать, что после написания собственного модуля – степень понимания работы 1С-Битрикс вырастит на существенный уровень. По крайней мере, раньше я считал Битрикс просто CMS, но сейчас, он развивается как платформа для разработки веб-приложений — Bitrix Framework. Поработав определенное время с относительно крупными проектами на 1С-Битрикс, могу сказать, что как по мне, мало «это» напоминает фреймворк, больше мешанину (эта одна из причин по которой многие из моих знакомых отказываются работать с Битрикс), особенно, где код не переработан под новое ядро D7.

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

Что же написать? Тут я решил не мудрить и залез на маркетплейс и наткнулся:

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

Структура модуля

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

  1. Пака модуля falbar.totop – название её в системе используется как индификатор, так что рекомендуется добавлять помимо названия и имя партнера. Соответственно falbar – имя партнера, totop – название модуля;
  2. Внутри лежат три папки: install – набор скриптов для установки и удаления модуля, lang – набор языковых файлов, lib – набор файлов, в которых реализуется логика решения;
  3. И осталось два файла: include.php – файл, подключаемый при вызове модуля в коде (его мы использовать не будем и оставим пустым), options.php – страница настроек, подключаемая в административной части.

Теперь рассмотрим папку install поподробнее:

  1. assets – в этой папке я разместил JavaScript и CSS нашей кнопки, которые будут подключаться в пользовательской части;
  2. index.php – файл в котором содержится описание модуля и реализуется установка и удаление его;
  3. step.php и unset.php – соответственно шаги установки и удаления, их может быть сколько угодно, а также мы можем и не использовать их;
  4. version.php – в нем указывается версия и время обновления нашего модуля.

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

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

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

Вот мы и приступили непосредственно к написанию кода. Первое, что стоит заполнить это файл version.php:

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

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

Теперь нам нужно написать класс, в котором будет реализована установка и удаление модуля:

Имя класса должно соответствовать папке модуля и являться наследником от CModule, только вместо точки стоит прописать нижние подчеркивание, после чего в адмике мы увидим, что система определила наш модуль:

Двигаемся дальше и сообщим системе больше информации, о нашем модуле, указав основные свойства, делать это я буду в конструкторе класса:

Рассмотрев несколько примеров решений, я пришел к выводу, что конструктор лучше всего подходит для выполнения такого рода задач. В нем мы подключили наш файл version.php и заполнили основные свойства для нашего класса. Перед тем, как посмотреть результат этих действий, нам нужно заполнить соответствующий языковой файл:

Вернемся в админку и посмотрим, как теперь выглядит модуль:

Следующий метод, который мы напишем, реализует процесс установки:

Уже с первого взгляда можно увидеть, что остались элементы старого ядра, но, увы, пока без них не обойтись. Так как мы используем функционал нового ядра D7, нам нужно проверить — поддерживает ли его система (переход был с 14 версии). Если нет, то выдать сообщение пользователю, если да, то продолжить работу. Это значит добавить нужные для работы в систему файлы, подкинуть события и добавить новые таблицы в БД. Так же при помощи метода ModuleManager::registerModule() зарегистрировать модуль в системе. В конце подключить файл step.php о котором выше я уже писал.

Добавим ещё несколько переменных в языковой файл:

Опишем три метода, к которым мы обратились из установочного DoInstall():

Копируем наши скрипты и стили в систему.

Так как мы не работаем с базой, оставляем этот метод пустым.

Регистрируем событие OnBeforeEndBufferContent. Перед тем, как страница будет отрисоваться, мы добавим свой HTML код, в котором сохраним настройки для нашей кнопки. Этот весь механизм далее напишем в файле Main.php.

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

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

Мы описали ещё одну языковую переменную, добавим её в соответствующий файл:

А теперь поговорим о методах:

Удаляем добавленные скрипты и стили из системы.

Удаляем из базы настройки нашего модуля.

И в последнем методе удаляем регистрационную запись обработчика события OnBeforeEndBufferContent. Чтобы увидеть результат нам осталось описать два файла step.php и unstep.php так и сделаем.

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

И посмотрим, что получилось:

Если вы все проделали, как описано в статье, вы увидите сообщение — значит всё работает и можно двигаться дальше. Перейдем ко второму файлу:

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

Пишем страницу настроек для модуля Битрикс

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

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

Что теперь? Надо описать настройки модуля и поместить их в массив.

Через административную часть мы позволим пользователю изменять:

  1. Включать/выключать модуль;
  2. Изменять ширину/высоту/радиус кнопки;
  3. Менять цвет;
  4. Менять положение кнопки и скорость анимации.

Для примера думаю, этих параметров хватит с головой, напишем массив настроек:

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

Нам осталось отрисовать форму, для этого создадим новый экземпляр класса CAdminTabControl, куда и передаём массив с настройками:

И обозначим конец отрисовки формы:

У нас появилось ещё две языковые переменные, добавим и их:

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

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

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

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

Тут могут быть разные пути для решения этой задачи. В самом начале статьи, когда мы описывали код установки модуля, мы привязались к событию перед отрисовкой страницы и указали метод appendScriptsToPage() класса Main как обработчик. Теперь нам его нужно написать:

В методе мы определили, что он будет отрабатывать только на стороне клиента. Далее сформировали HTML код с набором настроек в json формате для удобства и добавили его в HEAD документа. В конце подключили скрипты и стили нашего Битрикс модуля кнопка наверх.

Вот и всё — параметры переданы, осталось их обработать на стороне клиента.

JavaScript и CSS кнопки наверх Битрикс модуля

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

Незабываем код упаковать и добавить в style.min.css. Для работы кнопки нам нужна библиотека jQuery, качаем её с официального сайта и также добавляем её в соответствующий файл. Теперь напишем JavaScript, который и будет добавлять кнопку с учетом настроек:

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

Перед тем, как смотреть, нужно удалить и заново установить модуль

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

Источник статьи: http://falbar.ru/article/pishem-pervyj-modul-dlya-1s-bitriks-s-ispolzovaniem-yadra-d7


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии