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, чтобы увидеть случайную страницу, как показано на следующем снимке экрана -