-
Notifications
You must be signed in to change notification settings - Fork 63
Виджеты
Модуль виджеты используется для вывода данных из разделов Админ панели в шаблон страниц сайта.
Шаблон страницы в KodiCMS представляет собой HTML каркас в котором размечены блоки для вставки данных.
<!DOCTYPE html>
<html lang="en">
<head>
{!! Meta::build() !!}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="header clearfix">
@block('header')
</div>
@block('content.before')
<div class="row marketing">
@block('content', ['comments' => false])
</div>
@block('content.after')
<footer class="footer">
@block('footer')
</footer>
</div>
</body>
</html>
@block...
будет интерпретироваться системой как место, куда можно поместить виджеты, которые могут представлять из себя как HTML
так и php
код.
Блоки можно размечать двумя способами:
<?php Block::run('block_name', array $params)
-
@block('block_name', array $params)
используется дляBlade
шаблонизатора
array $params
- параметры, которые можно передать в шаблон виджета, они могут влиять на вывод данных из шаблона (Например: выключение кеширования виджетов в блоке или отключение комментариев обрамляющих HTML код).
Чтобы упростить механизм вставки данных в блоки были придуманы виджеты. Виджет представляет из себя класс, который содержит в себе логику, он имеет шаблон в который из класса передаются данные и далее сгенерированный HTML код из шаблона виджета выводится в размеченный блок шаблона страницы.
Виджеты в системе разделяются на типы и каждый тип соотносится с классом через конфиг файл modulename/config/widgets.php
(Пример), что позволяет делать разные типы виджетов выполняющие различные логические операции и следовательно выводить в шаблон страницы информацию в зависимости от типа.
В качестве шаблонов используются также PHP
файлы или Blade
шаблоны, которые по умолчанию располагаются в папке /resources/snippets
- Widget данные интерфейс должны реализовать все виджеты системы
- WidgetCacheable - используется для виджетов, содержимое которых можно кешировать
- WidgetCorrupt - интерфейс дает понять, что виджет поврежден, (например он загружен из БД, но для него не найден класс или тип)
- WidgetDatabase - данные виджета хранятся в БД
-
WidgetHandler - виджет обработчик, виджет который не может иметь шаблона и не может быть выведен на страницу, а имеет свой уникальный URL на который необходимо передать
POST|GET|...
данные для последующий обработки их (Например отправить письмо, сохранить данные в БД и т.д.) - WidgetPaginator - виджет выводит список документов и он может иметь постраничную навигацию
-
WidgetRenderable - виджет имеет шаблон и его можно вывести как
HTML
- Trait WidgetCache - реализует кеширование виджета
- Trait WidgetHandler - реализует обработчик виджета
- Trait WidgetPaginator - реализует постраничную навигацию
- Trait WidgetRender - реализует рендеринг шаблона
- Decorator Decorator - содержит в себе всю основную логику виджета, от него можно наследовать все будущие виджеты
<?php namespace KodiCMS\Widgets\Widget;
use KodiCMS\Widgets\Contracts\WidgetCacheable;
use KodiCMS\Widgets\Traits\WidgetCache;
class HTML extends DatabaseDecorator implements WidgetCacheable
{
use WidgetCache;
/**
* @return array
*/
public function prepareData()
{
return [
];
}
}
<?php namespace KodiCMS\Widgets\Widget;
use KodiCMS\Widgets\Contracts\WidgetHandler as WidgetHandlerInterface;
use KodiCMS\Widgets\Traits\WidgetHandler;
class Handler extends Decorator implements WidgetHandlerInterface
{
use WidgetHandler;
/**
* @return array
*/
public function prepareData()
{
return [
];
}
}
- Запрос страницы
- Если страница найдена запуск события и создание коллекции виджетов
PageWidgetCollection
- Инициализация класс
Block
и помещение в него коллекции виджетов и и затем вызов методаplaceWidgetsToLayoutBlocks
, который распределяет виджеты по блокам шаблона. - Срабатывание в шаблоне
Block::run
, которые по названию блока ищет связанные с ним виджеты - Рендеринг виджетов