Давайте создадим свой первый простой модуль.
Это будет обычная простая страница контактов для связи с администрацией сайта.
Как нам уже известно, модули располагаются в папке 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' => 'admin@example.com', // Значение, которое будет отображаться
],
[
'name' => 'Номер телефона',
'value' => '+7 (999) 121-12-21',
],
[
'name' => 'Telegram',
'value' => '@johncms_official',
],
];
// Подключаем шаблон index.phtml и передаем в него собранные выше данные
echo $view->render('contacts::index', ['data' => $data]);
В комментариях к каждой строке кода даны пояснения для чего она.
Далее давайте создадим наш шаблон. Шаблон будет располагаться в папке templates и т.к. это основная страница контактов, назовем шаблон index.phtml
В этом файле разместим следующий код:
<?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>
Наш модуль готов, но пока ещё не доступен в браузере. Давайте это исправим.
Чтобы модуль стал доступен, нужно сообщить системе, что у нас есть такой модуль и мы хотим чтобы он был доступен по определенному адресу.
Для этого давайте перейдем в папку config и в ней создадим файл routes.local.php если его ещё нет. Если есть, то откроем его и добавим маршрут для нашего модуля.
<?php
/**
* /contacts/ - Это адрес страницы по которому будет доступен наш модуль
* modules/contacts/index.php - Это путь к точке входа в наш модуль
*/
$map->addRoute(['GET', 'POST'], '/contacts/', 'modules/contacts/index.php');
Теперь наш модуль доступен по адресу ваш.сайт/contacts/
Теперь давайте сообщим модулю online, что у нас появился модуль контактов и нужно в списке пользователей онлайн отображать тех, кто смотрит контакты.
Для этого давайте перейдем в папку config и в ней создадим файл places.local.php если его ещё нет.
Отлично, наш модуль теперь полностью работоспособен, вам останется только добавить на него ссылку в основном шаблоне или на любой другой странице на ваше усмотрение.