Давайте создадим свой первый простой модуль.
Это будет обычная простая страница контактов для связи с администрацией сайта.
Как нам уже известно, модули располагаются в папке modules
Сначала давайте создадим папку с модулем и назовем её contacts путь к папке получится такой: modules/contacts
Пока создадим простой модуль без мультиязычности.
Внутри папки modules/contacts создадим подпапку templates для шаблона нашей страницы.
Дополнительные папки нам больше не понадобятся т.к. модуль у нас будет содержать всего лишь одну страницу.
Создадим точку входа в модуль, которая будет открываться при запросе страницы контактов и в которой будет подключен наш шаблон. Для этого создадим файл index.php
В этом файле поместим следующий код:
<?php// Запрещаем прямой запрос к файлу модуля без подключенного ядраdefined('_IN_JOHNCMS')||die('Error: restricted access');// Инициализируем шаблонизатор$view=di(Johncms\System\View\Render::class);// Инициализируем хлебные крошки (цепочка навигации вверху всех страниц)$nav_chain=di(Johncms\NavChain::class);// Указываем шаблонизатору папку, из которой нужно загружать шаблоны нашего модуля$view->addFolder('contacts',__DIR__.'/templates/');// Добавляем ссылку Контакты в хлебные крошки$nav_chain->add('Контакты','/contacts/');// Собираем массив данных, который будет передан в шаблон$data=['title'=>'Контакты','page_title'=>'Наши контакты',];// Дополним массив $data нашими контактными данными, которые выведем дальше в шаблоне$data['contacts']=[['name'=>'E-mail',// Название контакта'value'=>'[email protected]',// Значение, которое будет отображаться],['name'=>'Номер телефона','value'=>'+7 (999) 121-12-21',],['name'=>'Telegram','value'=>'@johncms_official',],];// Подключаем шаблон index.phtml и передаем в него собранные выше данныеecho$view->render('contacts::index',['data'=>$data]);
В комментариях к каждой строке кода даны пояснения для чего она.
Далее давайте создадим наш шаблон. Шаблон будет располагаться в папке templates и т.к. это основная страница контактов, назовем шаблон index.phtml
В этом файле разместим следующий код:
Наш модуль готов, но пока ещё не доступен в браузере. Давайте это исправим.
Чтобы модуль стал доступен, нужно сообщить системе, что у нас есть такой модуль и мы хотим чтобы он был доступен по определенному адресу.
Для этого давайте перейдем в папку config и в ней создадим файл routes.local.php если его ещё нет. Если есть, то откроем его и добавим маршрут для нашего модуля.
Теперь наш модуль доступен по адресу ваш.сайт/contacts/
Теперь давайте сообщим модулю online, что у нас появился модуль контактов и нужно в списке пользователей онлайн отображать тех, кто смотрит контакты.
Для этого давайте перейдем в папку config и в ней создадим файл places.local.php если его ещё нет.
Отлично, наш модуль теперь полностью работоспособен, вам останется только добавить на него ссылку в основном шаблоне или на любой другой странице на ваше усмотрение.
<?php
// Подключаем основной шаблон сайта
$this->layout(
'system::layout/default',
[
'title' => $data['title'], // Передаем заголовок страницы в тег title
'page_title' => $data['page_title'], // Передаем заголовок страницы в тег h1
]
);
?>
<div>
Вы можете связаться с нами по любому из нижеперечисленных контактов:
</div>
<ul>
<!-- Тут мы перебираем наш массив контактов и выводим название контакта и значение, разделяя их двоеточием -->
<?php foreach ($data['contacts'] as $contact): ?>
<li><?= $contact['name'] ?>: <b><?= $contact['value'] ?></b></li>
<?php endforeach; ?>
</ul>
<?php
/**
* /contacts/ - Это адрес страницы по которому будет доступен наш модуль
* modules/contacts/index.php - Это путь к точке входа в наш модуль
*/
$map->addRoute(['GET', 'POST'], '/contacts/', 'modules/contacts/index.php');