- 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以查看随机页面,如下面的屏幕截图所示: