- Grav 插件
- Grav - 插件基础
- Grav 插件教程
- Grav - 事件钩子
- Grav 管理面板
- Grav - 管理面板简介
- Grav - 管理面板仪表盘
- Grav - 配置系统
- Grav - 站点配置
- Grav - 管理面板页面
- Grav - 页面编辑器选项
- Grav - 页面编辑器高级
- Grav 高级
- Grav - 蓝图
- Grav - 性能和缓存
- Grav - 调试和日志
- Grav - 命令行界面 (CLI)
- Grav - GPM (Grav 包管理器)
- Grav - 开发
- Grav - 生命周期
- Grav - YAML 语法
- Grav - 表单
- Grav 托管
- Grav - 网络托管
- Grav 故障排除
- Grav - 服务器错误
- Grav - 权限
- Grav 有用资源
- Grav - 面试问题
- Grav - 快速指南
- Grav - 有用资源
- Grav - 讨论
Grav 插件教程
本章我们将深入探讨如何设置和配置插件。此外,我们还将了解插件的结构以及如何显示随机页面。插件是一段软件,它提供Grav核心功能原本未包含的附加功能。
在本文中,我们将使用random插件来显示随机页面。在使用此插件之前,我们将了解random插件的一些重要点。
您可以使用此插件通过URI /random 来显示随机页面。
创建过滤器以利用页面中指定的分类法。您可以创建如下分类:category : blog。
您可以使用过滤器选项显示随机页面;这指示Grav使用要在随机页面中显示的相同内容。
插件设置
在使用实际插件之前,请按照以下步骤创建插件的基本设置。
在user/plugins文件夹下创建一个名为random的文件夹。
在user/plugins/random文件夹下,创建两个文件:
random.php 用于插件代码
random.yaml 用于配置
插件配置
要使用random插件,我们需要一些配置选项。我们将在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语句在插件中使用了一组类,这使得代码更易读,也节省了空间。必须在PHP文件的顶部编写namespace Grav\Plugin。插件名称应使用标题大小写编写,并应使用Plugin扩展。
您可以将函数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对象指定random插件路由的配置值,并将其存储在route对象中。
现在我们将配置的路由与当前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/folder_name/random以查看随机页面,如下面的屏幕截图所示: