Ранее было рассмотрено добавление переменной запроса в ссылку меню, которое в свою очередь служит продолжением добавления типа меню для фронтенда на Joomla 4.
- Настройка базы данных для работы компонента на Joomla 4.x
- Необходимые изменения в коде файлов компонента Joomla 4
- Содержимое файлов компонента для Joomla 4.x
- Тестирование установки базы данных компонента Joomla 4
Настройка базы данных для работы компонента на Joomla 4.x
Наконец то мы, добрались до стадии разработки, на которой требуется создать таблицы базы данных, которые наш компонент будет использовать для хранения и извлечения данных. В зависимости от его назначения вашему расширению могут не потребоваться таблицы базы данных для работы, но, учитывая уровень сложности расширений компонентов Joomla 4, это маловероятно.
Установка, удаление и обновление версий в компоненте Joomla 4 выполняются с помощью сценариев SQL, размещенных в папке admin/sql
компонента. Сценарий SQL соответствует определенному ядру базы данных, например install.mysql.utf8.sql
будет выполняться только в том случае, если Joomla работает в базе данных MySQL. На момент написания статьи, Joomla 4 поддерживает MySQL и PostgreSQL, и мы рекомендуем писать сценарии SQL для обоих типов баз данных для максимальной совместимости. Однако для целей этого урока мы сосредоточимся на сценариях, основанных на MySQL.
Давайте продолжим и напишем сценарии SQL, которые понадобятся для создания таблицы базы данных для хранения настраиваемых сообщений для нашего компонента. В последующих разделах руководства мы создадим панель управления для управления этими сообщениями в админке.
Необходимые изменения в коде файлов компонента Joomla 4
Нам нужно будет создать пару файлов, дополняющих для установку и удаление компонента, в которых будет создаваться и удаляться таблица в базе данных с данными компонента. А также один файл обновления для подключения базы данных к работе компонента только с текущей разрабатываемой версией. Поскольку наш компонент уже установлен, для внесения необходимых изменений и необходим этот файл обновления.
- Новый файл:
admin/sql/install.mysql.utf8.sql
- Файл SQL, который запускается при установке компонента в базу данных MySQL.
- Новый файл:
admin/sql/uninstall.mysql.utf8.sql
- Файл SQL, который запускается при удалении компонента в базе данных MySQL.
- Новый файл:
admin/sql/mysql/0.0.7.sql
- Файл SQL, который запускается при обновлении компонента до/после версии 0.0.7 в базе данных MySQL.
- Обновления:
helloworld.xml
- Нам нужно будет добавить новый каталог
sql
в наш список копий файлов и добавить инструкции для Joomla 4 о том, где найти наши скрипты. Это всё должно быть прописано в файле манифеста нашего компонента.
- Нам нужно будет добавить новый каталог
Содержимое файлов компонента для Joomla 4.x
admin/sql/install.mysql.utf8.sql
Этот файл необходимо будет обновлять всякий раз, когда вы вносите изменения в схему базы данных компонента. Он запускается при установке компонента Joomla 4 в систему. Обратите внимание, что при создании таблиц вы должны ставить перед именем префикс #__
. Joomla автоматически заменит этот префикс префиксом таблицы базы данных, настроенной в системе. Вы должны убедиться, что имена ваших баз данных используют этот префикс всякий раз, когда вы их создаете или обновляете. Кроме того, мы настоятельно рекомендуем вам префиксировать все имена таблиц, имена ключей и т.д. именем вашего компонента (как показано в примерах этого мануала), чтобы предотвратить вероятность конфликтов между компонентами на сайте, работающем на CMS Joomla 4.
Обратите также внимание, что мы используем проверки IF EXISTS
для наших операторов DROP
и помещаем операторы DROP
перед операторами CREATE
. Хотя может показаться, что состояние базы данных предсказуемо - до ее создания не должно быть существующей таблицы с таким именем, - лучше никогда не предполагать, что предыдущая операция установки/удаления завершилась чисто и успешно. В редких случаях, когда такая ошибка возможна, наш код будет продолжать работать, выполнив все необходимые подготовительные операции.
Если бы этот файл был для базы данных PostgreSQL, он назывался бы install.postgresql.utf8.sql
.
DROP TABLE IF EXISTS `#__helloworld_greetings`; CREATE TABLE `#__helloworld_greetings` ( `id` SERIAL NOT NULL, `greeting` VARCHAR(200) NOT NULL, `published` BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (`id`) ) ENGINE = InnoDB; INSERT INTO `#__helloworld_greetings` (`greeting`) VALUES ('Hello World!'), ('Good bye World!');
admin/sql/uninstall.mysql.utf8.sql
Этот файл должен выполнить все действия, необходимые для удаления собственных данных этого компонента в базе данных сайта на CMS Joomla 4. В нашем случае это в настоящее время очень просто - если таблица helloworld_greetings
существует, удалите ее.
Если бы этот файл был для базы данных PostgreSQL, он назывался бы uninstall.postgresql.utf8.sql
.
DROP TABLE IF EXISTS `#__helloworld_greetings`;
admin/sql/mysql/0.0.7.sql
При создании новой версии компонента с соответствующими изменениями базы данных эти изменения должны быть внесены в файлы обновления базы данных. Имя файла - это просто номер версии компонента, требующий изменений, и файлы группируются в папки в соответствии с ядром базы данных, на котором они работают. Когда Joomla 4 обновляет компонент, она будет искать любые файлы обновления между ранее установленным номером версии и новым номером версии и запускать их последовательно.
В нашем случае, поскольку до нашей новой версии 0.0.7 у нас не было таблиц базы данных, этот файл идентичен установочному файлу.
Если бы этот файл был для базы данных PostgreSQL, он назывался бы так же, но был бы помещен в папку admin/sql/postgresql
.
DROP TABLE IF EXISTS `#__helloworld_greetings`; CREATE TABLE `#__helloworld_greetings` ( `id` SERIAL NOT NULL, `greeting` VARCHAR(200) NOT NULL, `published` BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY (`id`) ) ENGINE = InnoDB; INSERT INTO `#__helloworld_greetings` (`greeting`) VALUES ('Hello World!'), ('Good bye World!');
helloworld.xml
В нашем обновленном файле манифеста нам нужно указать Joomla 4, чтобы она скопировала нашу новую папку admin/sql
при установке/обновлении компонента. Нам также нужно сообщить ему, что у нашего компонента теперь есть файлы базы данных, какие из них нужно запустить для какого действия и где их найти.
Три новых элемента, <install />
, <uninstall />
и <update/>
, достаточно понятны. Хотя их структура немного отличаются, каждая из них по существу состоит из действия (элемента), типа базы данных (mysql/postgresql) и пути к файлу. Когда вы добавляете поддержку PostgreSQL в свой компонент, вы добавляете дополнительную строку в каждый элемент, чтобы направлять Joomla к нужным файлам.
<?xml version="1.0" encoding="utf-8"?> <extension type="component" method="upgrade"> <!-- атрибут 'version' для тега расширения больше не используется --> <name>Hello World</name> <!-- Следующие элементы являются необязательными и не содержат ограничений на форматирование --> <creationDate>May 2021</creationDate> <!-- Фиктивный автор, не стесняйтесь заменять его в любом месте, где вы его видите --> <author>John Smith</author> <authorUrl>https://mb4.ru</authorUrl> <copyright>Пётр Васечкин</copyright> <license>GPL v3</license> <!-- Строка 'version' записывается в таблицу компонентов --> <version>0.0.7</version> <!-- Описание является необязательным и по умолчанию используется имя сомпонента --> <description> A hello world component! </description> <!-- Это пространство имен PHP, в котором организован код расширения. Он должен следовать этому формату: Vendor\Component\ComponentName "Vendor" может быть названией компании или вашим собственным именем Раздел "ComponentName" ДОЛЖЕН соответствовать имени, используемому везде для вашего компонента. Каким бы ни было имя этого XML-файла, пространство имен должно совпадать (заглавные/прописные буквы не учитываются). --> <namespace path="src/">JohnSmith\Component\HelloWorld</namespace> <files folder="site/"> <folder>language</folder> <folder>src</folder> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">site/language/en-GB/en-GB.com_helloworld.ini</language> </languages> <administration> <!-- Ссылка, которая появится в меню админки Joomla "Components" --> <menu link="index.php?option=com_helloworld">Hello World</menu> <!-- Список файлов и папок для копирования. Обратите внимание на атрибут "folder". Это имя папки в пакете компонентов для копирования в CMS Joomla 4. --> <files folder="admin/"> <folder>language</folder> <folder>services</folder> <folder>sql</folder> <folder>src</folder> <folder>tmpl</folder> </files> <languages> <language tag="en-GB">admin/language/en-GB/en-GB.com_helloworld.ini</language> <language tag="en-GB">admin/language/en-GB/en-GB.com_helloworld.sys.ini</language> </languages> </administration> <install> <sql> <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file> </sql> </uninstall> <update> <schemas> <schemapath type="mysql">sql/updates/mysql</schemapath> </schemas> </update> </extension>
Обратите внимание на строки:
- стр.14 — меняется номер версии компонента.
- стр.52 — добавляем ещё одну папку с SQL-скриптами.
- стр.63..77 — добавляем информацию для операций с базой данных.
Тестирование установки базы данных компонента Joomla 4
Как всегда, заархивируйте новую версию компонента и загрузите ее в админ-панель установки Joomla 4. После установки/обновления вы должны увидеть сообщение о том, что установка прошла успешно. На самом деле сейчас ничто не использует созданную в базе данных таблицу, поэтому используйте предпочтительный клиент базы данных для подключения к базе данных Joomla и проверьте, существует ли новая таблица.
Далее мы начнем создавать админскую часть компонента, работающую в панели администратора Joomla 4 для создания и управления нашими записями приветствий.
На этом на 8 мая 2021 года руководство по созданию MVC компонента для Joomla 4 на официальном сайте обрывается. Ждём и верим, что его допишут!