Разработка простейшего лендинга на OctoberCMS. Часть 2.
На чем мы остановились в предыдущей части? Мы создали следующее:
- плагин landing и миграцию
- проработали модель Page
- настроили поля формы и колонки для списка
В итоге на финальном этапе первого урока у нас была следующая картина:
Мы сделали один вариант страницы лендинга и заполнили его тестовым содержимым.
Компонент
Компоненты, в рамкам OctoberCms это настраиваемые элементы, которые могут быть прикреплены к любой странице или шаблону. Мы можем создавать любое количество компонентов для любых задач, которые могут быть использованы на фронте.
Тут снова без выкрутасов - всё очень подробно расписано в документации OctoberCms - https://octobercms.com/docs/plugin/components
Для нашей задачи нам предстоит создать всего один компонент. Назовем его Page.
Для создания компонента воспользуемся следующей командой:
php artisan create:component sandbox.landing page
В результате выполнения команды в директории нашего плагина будет создан компонент Page с подобной структурой
Поправим файл Page.php под наши нужды
И самое главное - не забыть зарегистрировать компонент в нашем плагине, для этого откроем Plugin.php и добавим следующее:
Итак, мы создали простейший компонент, который берет из настроек идентификатор страницы и отдает ее в переменную landing.
На самом деле, даже этот вариант можно улучшать и улучшать, но цель уроков - ознакомление с возможностями.
Тема для лендинга.
Для нашей лендинговой темы, мы не будем изобретать велосипед и возьмем, уже полюбившуюся всем, стартовую тему demo - просто скопируем ее в папку landing.
Поправим файл themes/landing/theme.yaml
Далее подправим файл шаблона themes/landing/pages/home.htm
, подготовив его для дальнейшей работы.
Готово. Теперь наш сайт выглядит примерно так:
Не очень круто =)
Подключение компонента и еще немного правок шаблона.
В панели управления переходим в раздел CMS, открываем шаблон нашей темы и бросаем туда компонент Landing.
В настройках компонента выбираем страницу, содержимое которой хотим отображать.
Страницу South Park: The Fractured but Whole мы создали и наполнили контентом в первой части этого повествования.
Компонент подключен к шаблону, соответственно свойства и методы его теперь доступны на всех страницах, которые используют этот шаблон.
Далее отредактируем файл themes/landing/partials/site/header.htm
Удалим всё - добавим такое содержимое:
{{ landing.title }} - это название нашей страницы
После чего, наш сайт стал выглядеть так:
Уже лучше!
Группы контента
Приступим к самому интересному - будем оживлять динамические блоки с содержимым, которые мы уже давным давно создали и даже заполнили контентом.
Группы мы определили при создании модели и формы - это:
- text
- image
- features
- slider
Чтобы убедиться - вернемся к файлу plugins/sandbox/landing/models/page/groups.yaml
В нашей теме в разделе в themes/landing/partials
создадим папку content
, где сложим шаблоны для каждой группы контента.
В папке themes/landing/partials/content
создадим следующие файлы:
- text.htm
- image.htm
- features.htm
- slider.htm
Должна получиться такая структура:
Далее вернемся в файлу themes/landing/pages/home.htm
и отредактируем его следующим образом.
Что означает эта конструкция:
В цикле мы перебираем содержимое landing.content, это содержимое состоит из именованных групп и содержимого этих групп.
Иными словами зная, что это за группа (из свойства _group), мы можем динамически отправить ключ и содержимое группы в соответствующую партиалку.
Партиалим!
text.htm
Начнем с файла themes/landing/partials/content/text.htm
Приведем его к следующему виду:
image.htm
Партиалку для отображения картинки themes/landing/partials/content/image.htm
приведем к следующему виду:
features.htm
Партиалку для отображения преимуществ themes/landing/partials/content/features.htm
тоже модифицируем:
slider.htm
И наконец слайдер themes/landing/partials/content/slider.htm
мы поправим в два этапа.
Для примера слайдера используем библиотеку https://github.com/kenwheeler/slick
Как и написано в документации, подключим стили в файл шаблона themes/landing/layouts/default.htm
в раздел head
и в конец шаблона добавим js-библиотеку:
Далее отредактируем файл themes/landing/partials/content/slider.htm
и приведем его к следующему виду:
Немного CSS
Мы не зря добавили css-классы в наши partial-файлы. Приправим наш урок небольшой порцией css.
В конец файла themes/landing/assets/css/theme.css
добавим немного своего:
Что в итоге?
В итоге у нас должно получиться следующее:
Выглядит вполне приемлемо!
Немного универсализации
Что же мы хотим - мы хотим в дальнейшем посадить на один движок OctoberCMS несколько лендингов, чем больше - тем лучше!
Можно заморочиться и написать свой плагин для мультисайта, но в рамках урока используем готовые наработки из маркетплейса OctoberCms - плагин Multiple Websites Manager Lite - простой, понятный и бесплатный.
Что нужно сделать:
- установить плагин
Briddle.Multisite
- суметь настроить домен третьего уровня (об этом не в этом уроке)
- отредактировать конфиг плагина
/plugins/briddle/multisite/config
Для примера мы скопируем нашу тему landing
и назовем ее landing2
Не забываем отредактировать файл themes/landing2/theme.yaml
Далее отредактируем /plugins/briddle/multisite/config
В админке сайта добавляем новый материал:
Теперь заходим в админку сайта, но уже по адресу landing2.sandbox.test
Переходим в раздел CMS и отредактируем файл шаблона layouts/default.htm
Выбираем новую созданную страницу.
Результат
По итогу этого небольшого гайда у нас должно быть в наличии:
- плагин для создания лендинговых страниц
- две темы (сайта) , которые работают с одним движком
- и такой результат:
Ссылки
https://github.com/gromitsoft/sandbox - репозиторий с исходным кодом
https://blog.grom-it.ru/N9epRWxGX - первая часть урока