Grav - Учебники по плагинам
В этой главе мы углубимся в то, как можно установить и настроить плагин. Кроме того, мы также разберемся в структуре плагина и способах отображения случайной страницы. Плагин - это часть программного обеспечения, которое обеспечивает дополнительные функции, которые изначально не были выполнены основными функциями Grav.
В этой статье мы собираемся отображать случайную страницу с помощью плагина random. Прежде чем использовать этот плагин, мы увидим некоторые важные моменты случайного плагина.
Вы можете использовать этот плагин для отображения случайной страницы, используя URI как /random.
Создайте фильтр, чтобы использовать таксономию, указанную на страницах. Вы можете создать какcategory : blog.
Вы можете отобразить случайную страницу, используя опцию фильтра; это сообщает Grav использовать тот же контент, который должен отображаться на случайной странице.
Плагин установки
Выполните следующие действия, чтобы создать базовую настройку для плагина перед тем, как использовать фактический плагин.
Создайте папку под названием random под user/plugins папка.
Под user/plugins/random папку, создайте два файла, а именно -
random.php используется для кода плагина
random.yaml используется для конфигурации
Конфигурация плагина
Чтобы использовать случайный плагин, нам нужны некоторые параметры конфигурации. Мы напишем следующие строки подrandom.yaml файл.
enabled:true
route:/random
filters:
category:blog
Random создает маршрут, который вы определяете. На основе фильтров таксономии выбирается случайный элемент. Значение фильтра по умолчанию:'category: blog' который используется для случайного выбора.
Структура плагина
Следующий код можно использовать в структуре плагина.
<?php
namespace Grav\Plugin;
use Grav\Common\Page\Collection;
use Grav\Common\Plugin;
use Grav\Common\Uri;
use Grav\Common\Taxonomy;
class RandomPlugin extends Plugin {
}
?>
Мы используем несколько классов в плагине, используя useоператоры, которые делают его более читабельным и экономят место. Вnamespace Grav\Pluginдолжен быть написан в верхней части файла PHP. Название плагина должно быть написано вtitlecase и должен быть расширен с помощью Plugin.
Вы можете подписаться на функцию getSubscribedEvents() к onPluginsInitializedсобытие; это определяет, на какие события подписан плагин. Таким образом, вы можете использовать событие для подписки на другие события.
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
Давайте теперь воспользуемся onPluginInitialized мероприятие под RandomPlugin класс, используемый для маршрутизации страницы, настроенной в random.yaml файл.
Метод onPluginInitialized() содержит следующий код -
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
Объект Uri включает текущий uri, информацию о маршруте. Объект config указывает значение конфигурации для маршрутизации случайного плагина и сохраняет его в объекте маршрута.
Теперь мы сравним настроенный маршрут с текущим путем URI, который информирует плагин о прослушивании onPageInitialized событие.
Отображение случайной страницы
Вы можете отобразить случайную страницу, используя код со следующим методом -
public function onPageInitialized() {
$taxonomy_map = $this->grav['taxonomy'];
$filters = (array) $this->config->get('plugins.random.filters');
$operator = $this->config->get('plugins.random.filter_combinator', 'and');
if (count($filters)) {
$collection = new Collection();
$collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray());
if (count($collection)) {
unset($this->grav['page']);
$this->grav['page'] = $collection->random()->current();
}
}
}
Как показано в коде,
Назначьте объект таксономии переменной $taxonomy_map.
Получите массив фильтров, который использует настроенную таксономию из конфигурации плагина, используя configобъект. Мы используем товар какcategory : blog.
Мы используем collection сохранить случайную страницу в $collection. Добавить страницу, которая соответствует фильтру, в$collection переменная.
Отмените установку объекта текущей страницы и задайте отображение текущей страницы как случайную страницу в коллекции.
Наконец, мы увидим полный код плагина для отображения случайной страницы, как показано ниже -
<?php
namespace Grav\Plugin;
use Grav\Common\Page\Collection;
use Grav\Common\Plugin;
use Grav\Common\Uri;
use Grav\Common\Taxonomy;
class RandomPlugin extends Plugin {
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
public function onPageInitialized() {
$taxonomy_map = $this->grav['taxonomy'];
$filters = (array) $this->config->get('plugins.random.filters');
$operator = $this->config->get('plugins.random.filter_combinator', 'and');
if (count($filters)) {
$collection = new Collection();
$collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray());
if (count($collection)) {
unset($this->grav['page']);
$this->grav['page'] = $collection->random()->current();
}
}
}
}
Откройте браузер и введите localhost / имя_папки / random, чтобы увидеть случайную страницу, как показано на следующем снимке экрана -