Итак, начну по порядку. Сначала нужно скачать последнюю версию библиотеки с GitHub . Библиотеки CMS “Joomla” хранятся в папке libraties, расположенной в корневой папке сайта. Создадим в ней папку, например, с названием qrlib и разархивируем в нее содержимое скачанного архива. Добавим в папку файл index.html, следующего содержания:
HTML
Его можно скопировать из любой папки, где содержатся библиотеки системы. Он защищает от прямого обращения к папке из браузера и просмотра ее содержимого. Основным файлом библиотеки является файл qrlib.php. Обратим на это внимание, потому что его имя пригодится для подключения библиотеки в коде модуля. Также в папке библиотеки PHP QR Code присутствует файл index.php. В этом файле находится примерный код работы с библиотекой. Его можно запустить для ознакомления с возможностями PHP QR Code. После ознакомления его можно удалить из папки /libraries/qrlib.
Теперь переходим в папку modules, в которой хранятся все модули CMS “Joomla”. Создаем там папку с именем mod_qrcode – в ней мы будем создавать файлы нашего модуля. Не забываем про файл index.html, упомянутый выше – скопируем его в папку модуля. У любого модуля в “Joomla” есть 2 обязательных файла: имя_модуля.xml и имя _модуля.php. В нашем случае – это будут mod_qrcode.xml и mod_qrcode.php. В mod_qrcode.xml будут храниться настройки модуля, а в mod_qrcode.php – код самого модуля. Остальные файлы модуля, кроме указанных, необязательны и могут отсутствовать.
Вообще, структура модуля в CMS “Joomla” следущая:
- index.html – файл-заглушка
- mod_имя_модуля.php – код модуля (обязательный)
- mod_имя_модуля.xml – описание и настройки модуля (обязательный)
- helper.php – в файле хранится код класса-помощника. Методы этого класса получают данные из БД и форматируют их для вставки в код шаблона.
- tmpl– папка для шаблонов
- default.php – шаблон для отображения результатов работы модуля
Кроме описанных файлов, мы создадим еще 2 языковых файла – они предназначены для отображения текста на разных языках в файлах модуля. Создадим пока файлы для русского языка. Их имена будут следующими: ru-RU.mod_qrcode.ini и ru-RU.mod_qrcode.sys.ini. Эти файлы нужно будет поместить в папку \language\ru-RU. По имени файла можно понять, что в нем указывается название модуля: ru-RU.имя_модуля.ini и ru-RU.имя_модуля.sys.ini. Эти файлы мы создадим позже, а сейчас переходим к созданию файла mod_qrcode.xml с описанием и настроками модуля.
XML
Файл mod_qrcode.xml состоит из блоков с описанием отдельных сущностей модуля: файлов, языковых настроек, общих параметров модуля и других. Если посмотреть на его содержимое внимательней, то можно без особого труда разобраться с описанием модуля. Я не буду останавливаться на этом и подробно описывать все настройки - объясню только некоторые моменты. Некоторые xml-элементы содержат текст, состоящий из заглавных букв и символов подчеркивания – это и есть наименования настроек из языковых файлов. В процессе работы с модулем, например, в административной части, вместо них вставляется фраза на языке, используемом системой для определенного сайта. В блоке config описываются параметры модуля для административной части. Здесь нужно обратить внимание на типы полей, в которых хранятся настройки.
В создаваемом нами модуле, предполагаются следующие обязательные параметры:
- Данные, на основе которых будет генерироваться QR-код;
- Уровень коррекции ошибок для сгенерированного штрих-кода;
- Размер каждого квадрата штрих-кода в пикселях;
Для первого параметра мы будем использовать поле типа текст (”text”), а для второго и третьего тип поле будет список (”list”). Ознакомиться с полным списком типов полей. .
Дополнительный параметр у нашего модуля будет всего один – «Суффикс класса модуля», текстового типа.
Теперь пришло время создать языковые файлы и разместить их в папке \language\ru-RU. Начнем с файла ru-RU.mod_qrcode.ini.
Также нужно создать файл ru-RU.имя_модуля.sys.ini.
Немного забегу вперед, чтобы показать результат проделанной на данный момент нами работы: после регистрации модуля в базе данных (или установки модуля), в административной части сайта мы сможем увидеть форму для ввода параметров. Эта форма создается системой на основе данных из созданных нами файлов.
А сейчас переходим к самому важному шагу – созданию файла mod_qrcode.php – в котором будет находиться код, описывающий работу нашего модуля.
PHP
Код работает следующим образом: В переменную $PNG_TEMP_DIR
сохраняем путь к временной папке – в нее будет размещаться сгенерированный файл с QR-кодом. Подключаем библиотеку – с помощью функции jimport()
. Аргумент, передаваемый этой функции, по сути, это путь к основному файлу библиотеки. Он состоит из имени папки и имени файла, разделенного точкой. Далее получаем значения всех параметров, необходимых модулю для работы. Это делается с помощью метода get()
класса JParameter. Как говорилось ранее, параметры устанавливаются в административной части сайта, на странице модуля. В случае, если поле с данными для генерации QR-кода не заполнено, создается исключение, которое выводит сообщение об этом. Код, расположенный ниже в этом случае не выполняется и QR-код не генерируется. Если же все нормально и поле непустое, вызывается статический метод QRcode::png()
библиотеки, который создает png-файл c QR-кодом.
Теперь остается только сохранить в переменной $qrImgUrl
URL png-файла и подключить шаблон модуля.
Код шаблона модуля (tmpl/default.php) у нас очень прост. Отмечу только то, что в нем можно обращаться к переменным, созданным в файле модуля. В нашем случае, это переменная $qrImgUrl
.
PHP
Итак, почти все готово: переходим к последнему этапу – регистрации модуля в базе данных CMS “Joomla”.
Для этого нужно открыть базу данных сайта (например, используя phpMyAdmin) и выполнить следующий SQL-запрос:
SQL
Символы «#__» в наименовании таблицы в запросе нужно заменить на префикс таблиц БД “Joomla”.
Если все сделано правильно, то при создании нового модуля в «Менеджере модулей» будет доступен наш модуль под названием «QR код». Теперь осталось только установить модуль, настроить его параметры и разместить в какой-нибудь позиции шаблона сайта.
При создании модуля мне очень помогли следующие материалы: