Grav - 插件教程

在本章中,我们将深入研究如何设置和配置插件.此外,我们还将了解插件的结构以及如何显示随机页面.插件是一个软件,提供了Grav的核心功能最初未完成的附加功能.

在本文中,我们将使用随机插件显示随机页面.在使用此插件之前,我们将看到随机插件的一些重要内容.

  • 您可以使用此插件显示随机页面使用URI作为/random .

  • 创建过滤器以使用页面中指定的分类法.您可以创建为类别:博客.

  • 您可以使用过滤器选项显示随机页面;这通知Grav使用随机页面中显示的相同内容.

安装插件

在使用实际插件之前,请按照以下步骤为插件创建基本设置.

  • 创建名为<的文件夹 user/plugins 文件夹下的b> random .

  • user/plugins/random 文件夹,创建两个文件即 :

    • random.php 用于插件代码

    • random.yaml 用于配置

插件配置

要使用随机插件,我们需要一些配置选项.我们将在 random.yaml 文件下写下以下行.

enabled:true
route:/random
filters:
   category:blog

随机创建您定义的路线.基于分类过滤器,它选择一个随机项.过滤器的默认值为'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 语句在插件中使用了一堆类,这使得它更具可读性并节省空间. 命名空间Grav \Plugin 必须写在PHP文件的顶部.插件名称应该用标题编写,并且应该使用插件进行扩展.

您可以订阅函数 getSubscribedEvents( ) onPluginsInitialized 事件;这决定了插件订阅的事件.像这样,您可以使用该事件订阅其他事件.

public static function getSubscribedEvents() {
   return [
      'onPluginsInitialized' => ['onPluginsInitialized', 0],
   ];
}

现在让我们使用 RandomPlugin 类下的 onPluginInitialized 事件路由在 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 对象从插件配置中获取使用已配置分类的过滤器数组.我们将该项目用作类别:博客.

  • 我们正在使用集合来存储随机 $ 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/folder_name/随机查看随机页面,如下面的截图所示 :

Grav插件教程