|
| 1 | +# Создание модуля |
| 2 | + |
| 3 | +Давайте создадим свой первый простой модуль. |
| 4 | +Это будет обычная простая страница контактов для связи с администрацией сайта. |
| 5 | + |
| 6 | +Как нам уже известно, модули располагаются в папке **modules** |
| 7 | + |
| 8 | +Сначала давайте создадим папку с модулем и назовем её **contacts** путь к папке получится такой: **modules/contacts** |
| 9 | + |
| 10 | +Пока создадим простой модуль без мультиязычности. |
| 11 | + |
| 12 | +Внутри папки **modules/contacts** создадим подпапку **templates** для шаблона нашей страницы. |
| 13 | +Дополнительные папки нам больше не понадобятся т.к. модуль у нас будет содержать всего лишь одну страницу. |
| 14 | +Создадим точку входа в модуль, которая будет открываться при запросе страницы контактов и в которой будет подключен наш шаблон. Для этого создадим файл **index.php** |
| 15 | + |
| 16 | +В этом файле поместим следующий код: |
| 17 | + |
| 18 | +```php |
| 19 | +<?php |
| 20 | + |
| 21 | +// Запрещаем прямой запрос к файлу модуля без подключенного ядра |
| 22 | +defined('_IN_JOHNCMS') || die('Error: restricted access'); |
| 23 | + |
| 24 | +// Инициализируем шаблонизатор |
| 25 | +$view = di(Johncms\System\View\Render::class); |
| 26 | + |
| 27 | +// Инициализируем хлебные крошки (цепочка навигации вверху всех страниц) |
| 28 | +$nav_chain = di(Johncms\NavChain::class); |
| 29 | + |
| 30 | +// Указываем шаблонизатору папку, из которой нужно загружать шаблоны нашего модуля |
| 31 | +$view->addFolder('contacts', __DIR__ . '/templates/'); |
| 32 | + |
| 33 | +// Добавляем ссылку Контакты в хлебные крошки |
| 34 | +$nav_chain->add('Контакты', '/contacts/'); |
| 35 | + |
| 36 | +// Собираем массив данных, который будет передан в шаблон |
| 37 | +$data = [ |
| 38 | + 'title' => 'Контакты', |
| 39 | + 'page_title' => 'Наши контакты', |
| 40 | +]; |
| 41 | + |
| 42 | +// Дополним массив $data нашими контактными данными, которые выведем дальше в шаблоне |
| 43 | +$data['contacts'] = [ |
| 44 | + [ |
| 45 | + 'name' => 'E-mail', // Название контакта |
| 46 | + 'value' => ' [email protected]', // Значение, которое будет отображаться |
| 47 | + ], |
| 48 | + [ |
| 49 | + 'name' => 'Номер телефона', |
| 50 | + 'value' => '+7 (999) 121-12-21', |
| 51 | + ], |
| 52 | + [ |
| 53 | + 'name' => 'Telegram', |
| 54 | + 'value' => '@johncms_official', |
| 55 | + ], |
| 56 | +]; |
| 57 | + |
| 58 | +// Подключаем шаблон index.phtml и передаем в него собранные выше данные |
| 59 | +echo $view->render('contacts::index', ['data' => $data]); |
| 60 | +``` |
| 61 | + |
| 62 | +В комментариях к каждой строке кода даны пояснения для чего она. |
| 63 | + |
| 64 | +Далее давайте создадим наш шаблон. Шаблон будет располагаться в папке **templates** и т.к. это основная страница контактов, назовем шаблон **index.phtml** |
| 65 | +В этом файле разместим следующий код: |
| 66 | + |
| 67 | +```php |
| 68 | +<?php |
| 69 | + |
| 70 | +// Подключаем основной шаблон сайта |
| 71 | +$this->layout( |
| 72 | + 'system::layout/default', |
| 73 | + [ |
| 74 | + 'title' => $data['title'], // Передаем заголовок страницы в тег title |
| 75 | + 'page_title' => $data['page_title'], // Передаем заголовок страницы в тег h1 |
| 76 | + ] |
| 77 | +); |
| 78 | +?> |
| 79 | + |
| 80 | +<div> |
| 81 | + Вы можете связаться с нами по любому из нижеперечисленных контактов: |
| 82 | +</div> |
| 83 | + |
| 84 | +<ul> |
| 85 | + <!-- Тут мы перебираем наш массив контактов и выводим название контакта и значение, разделяя их двоеточием --> |
| 86 | + <?php foreach ($data['contacts'] as $contact): ?> |
| 87 | + <li><?= $contact['name'] ?>: <b><?= $contact['value'] ?></b></li> |
| 88 | + <?php endforeach; ?> |
| 89 | +</ul> |
| 90 | +``` |
| 91 | + |
| 92 | +Наш модуль готов, но пока ещё не доступен в браузере. Давайте это исправим. |
| 93 | +Чтобы модуль стал доступен, нужно сообщить системе, что у нас есть такой модуль и мы хотим чтобы он был доступен по определенному адресу. |
| 94 | +Для этого давайте перейдем в папку **config** и в ней создадим файл **routes.local.php** если его ещё нет. Если есть, то откроем его и добавим маршрут для нашего модуля. |
| 95 | + |
| 96 | +```php |
| 97 | +<?php |
| 98 | + |
| 99 | +/** |
| 100 | + * /contacts/ - Это адрес страницы по которому будет доступен наш модуль |
| 101 | + * modules/contacts/index.php - Это путь к точке входа в наш модуль |
| 102 | + */ |
| 103 | +$map->addRoute(['GET', 'POST'], '/contacts/', 'modules/contacts/index.php'); |
| 104 | +``` |
| 105 | + |
| 106 | +Теперь наш модуль доступен по адресу ваш.сайт/contacts/ |
| 107 | + |
| 108 | +Теперь давайте сообщим модулю online, что у нас появился модуль контактов и нужно в списке пользователей онлайн отображать тех, кто смотрит контакты. |
| 109 | +Для этого давайте перейдем в папку **config** и в ней создадим файл **places.local.php** если его ещё нет. |
| 110 | + |
| 111 | +```php |
| 112 | +<?php |
| 113 | + |
| 114 | +return [ |
| 115 | + '/contacts' => '<a href="/contacts/">Смотрит контакты</a>', |
| 116 | +]; |
| 117 | +``` |
| 118 | + |
| 119 | +Отлично, наш модуль теперь полностью работоспособен, вам останется только добавить на него ссылку в основном шаблоне или на любой другой странице на ваше усмотрение. |
| 120 | + |
0 commit comments