📅  最后修改于: 2020-10-25 05:25:42             🧑  作者: Mango
在本章中,我们将深入研究如何设置和配置插件。此外,我们还将了解插件的结构以及如何显示随机页面。插件是一款提供其他功能的软件,而Grav的核心功能最初并未完成这些功能。
在本文中,我们将使用random插件显示随机页面。在使用此插件之前,我们将了解随机插件的一些重要方面。
您可以使用URI作为/ random使用此插件显示随机页面。
创建过滤器以利用页面中指定的分类法。您可以创建以下类别:博客。
您可以使用filter选项显示随机页面;这将通知Grav使用与随机页面中显示的内容相同的内容。
在使用实际的插件之前,请按照以下步骤为插件创建基本设置。
在user / plugins文件夹下创建一个名为random的文件夹。
在user / plugins / random文件夹下,创建两个文件,即-
用于插件代码的random.php
用于配置的random.yaml
要使用随机插件,我们需要一些配置选项。我们将在random.yaml文件下编写以下行。
enabled:true
route:/random
filters:
category:blog
随机创建您定义的路线。基于分类过滤器,它会选择一个随机项目。过滤器的默认值为“类别:博客” ,用于随机选择。
可以在插件结构中使用以下代码。
我们正在使用use语句在插件中使用一堆类,这使它更具可读性并且也节省了空间。名称空间Grav \ Plugin必须写在PHP文件的顶部。插件名称应使用大写字母写,并应使用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对象指定用于路由随机插件的配置值,并将其存储在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对象从插件配置中获取使用已配置分类法的过滤器数组。我们使用该项目作为类别:Blog 。
我们正在使用collection将随机页面存储在$ collection中。将与过滤器匹配的页面追加到$ collection变量。
取消设置当前页面对象,并将当前页面设置为在集合中显示为随机页面。
最后,我们将看到插件的完整代码以显示随机页面,如下所示:
['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以查看随机页面,如以下屏幕截图所示-