Создание модуля
Last updated
Was this helpful?
Last updated
Was this helpful?
Давайте создадим свой первый простой модуль. Это будет обычная простая страница контактов для связи с администрацией сайта.
Как нам уже известно, модули располагаются в папке modules
Сначала давайте создадим папку с модулем и назовем её contacts путь к папке получится такой: modules/contacts
Пока создадим простой модуль без мультиязычности.
Внутри папки modules/contacts создадим подпапку templates для шаблона нашей страницы. Так же создадим папку Controllers для контроллеров. После выполнения этих действий у вас должна получиться такая структура:
Дополнительные папки нам больше не понадобятся.
Начиная с JohnCMS 9.4 появилась возможность использовать контроллеры. Контроллеры позволяют избавиться от большого количества базового кода, который необходимо написать для начала работы, а так же позволяют упростить настройку маршрутов и не писать самостоятельно логику по определению страницы, которую необходимо показать пользователю.
Контроллеры являются обычными php классами которые наследуют системный класс контроллера. В JohnCMS используется автозагрузка классов модулей. Чтобы она работала, нужно придерживаться некоторых правил:
Для работы автозагрузки классов модуль должен быть зарегистрирован в системе. Как это сделать рассмотрим ниже.
Для работы автозагрузки классов модули необходимо регистрировать в системе. Делается это с помощью конфигурационного файла.
Создайте в папке config/autoload файл с именем modules.local.php и следующим содержимым
В данном случае contacts это название папки с модулем. При добавлении дополнительных модулей просто добавьте их названия по аналогии с этим именем. После выполнения этих действий классы вашего модуля будут загружаться автоматически если их пространство имен это название папки с вашим модулем с заглавной буквы.
В нашем случае пространством имен будет Contacts
Создадим наш первый контроллер, который будет отвечать за отображение страницы контактов.
Контроллеры модуля должны наследовать Johncms\Controller\BaseController
Давайте наконец создадим наш контроллер. Создадим файл ContactsController.php со следующим содержимым:
Это минимальный набор кода, который понадобится для работы.
Далее давайте пошагово дополним наш контроллер и разберемся с тем кодом, который добавляем.
Для автоматической базовой настройки шаблонизатора и загрузки файлов локализации нам понадобится добавить свойство $module_name с названием папки модуля (в нашем случае contacts).
Теперь нам нужно дополнить метод index.
Далее давайте установим заголовок страницы в тегах title и h1. Для этого в шаблонизатор нужно добавить 2 переменные с именем title и page_title. Делается это следующим образом:
Далее нам нужно добавить нашу страницу в цепочку навигации.
Теперь нам нужно подготовить данные для шаблона. Давайте просто наполним один массив нашими контактами и передадим его в шаблон
Обратите внимание на последнюю строку. Шаблонизатор так же имеет свое пространство имен для шаблонов. Оно автоматически регистрируется в базовом контроллере и является названием папки с модулем. В нашем случае contacts это название нашего модуля, а index это название файла шаблона из папки templates. Вторым параметром ['data' => $data]
передается массив данных, которые будут доступны в шаблоне. Ключи этого массива будут использоваться как названия переменных, а значения в качестве значений. В данном примере в шаблоне у нас будет доступна переменная data и она будет содержать массив с контактными данными.
Далее давайте создадим наш шаблон. Шаблон будет располагаться в папке templates и т.к. это основная страница контактов, назовем шаблон index.phtml
Наш модуль готов, но пока ещё не доступен в браузере. Давайте это исправим. Чтобы модуль стал доступен, нужно сообщить системе, что у нас есть такой модуль и мы хотим чтобы он был доступен по определенному адресу. Для этого давайте перейдем в папку config и в ней создадим файл routes.local.php если его ещё нет. Если есть, то откроем его и добавим маршрут для нашего модуля.
Теперь наш модуль доступен по адресу ваш.сайт/contacts/
Теперь давайте сообщим модулю online, что у нас появился модуль контактов и нужно в списке пользователей онлайн отображать тех, кто смотрит контакты. Для этого давайте перейдем в папку config и в ней создадим файл places.local.php если его ещё нет.
Отлично, наш модуль теперь полностью работоспособен, вам останется только добавить на него ссылку в основном шаблоне или на любой другой странице на ваше усмотрение.
Классы модуля должны располагаться в папке с модулем, а должно быть именем папки модуля с заглавной буквы. Разрешено использовать любые директории в папке с модулем для логического разделения классов.
Исходя из типовой классы контроллеров должны располагаться в папке Controllers
Эта папка будет пространством имен для контроллеров. С учетом того, что модуль имеет пространство имен Contacts а папка Controllers расположена в модуле, то пространство имен для нашего контроллера будет такое: Contacts\Controllers