Grav - Tutoriais de plug-in
Neste capítulo, vamos nos aprofundar em como um plugin pode ser instalado e configurado. Além disso, também entenderemos a estrutura de um plugin e como exibir uma página aleatória. Plugin é um software que fornece funcionalidade adicional que não foi originalmente completada pela funcionalidade central do Grav.
Neste artigo, vamos exibir uma página aleatória usando o plugin aleatório. Antes de usar este plugin, veremos alguns pontos importantes do plugin aleatório.
Você pode usar este plugin para exibir a página aleatória usando URI como /random.
Crie o filtro para fazer uso da taxonomia especificada nas páginas. Você pode criar comocategory : blog.
Você pode exibir uma página aleatória usando a opção de filtro; isso informa ao Grav para usar o mesmo conteúdo que deve ser exibido na página aleatória.
Plugin de configuração
Siga estas etapas para criar uma configuração básica para o plugin antes de usar o plugin real.
Crie uma pasta chamada random debaixo de user/plugins pasta.
Debaixo de user/plugins/random pasta, crie dois arquivos, a saber -
random.php usado para código de plugin
random.yaml usado para a configuração
Configuração de Plugin
Para usar o plugin aleatório, precisamos ter algumas opções de configuração. Vamos escrever as seguintes linhas sob orandom.yaml Arquivo.
enabled:true
route:/random
filters:
category:blog
Random cria uma rota que você define. Com base em filtros de taxonomia, ele escolhe um item aleatório. O valor padrão do filtro é'category: blog' que é usado para seleção aleatória.
Estrutura do Plugin
O código a seguir pode ser usado na estrutura do plugin.
<?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 {
}
?>
Estamos usando um monte de classes no plugin usando o usedeclarações que o tornam mais legível e economizam espaço também. onamespace Grav\Plugindeve ser escrito no início do arquivo PHP. O nome do plugin deve ser escrito emtitlecase e deve ser estendido usando Plugin.
Você pode assinar a função getSubscribedEvents() ao onPluginsInitializedevento; isso determina em quais eventos o plugin está inscrito. Assim, você pode usar o evento para se inscrever em outros eventos.
public static function getSubscribedEvents() {
return [
'onPluginsInitialized' => ['onPluginsInitialized', 0],
];
}
Vamos agora usar o onPluginInitialized evento sob o RandomPlugin classe usada para rotear a página que está configurada no random.yaml Arquivo.
O método onPluginInitialized() contém o seguinte código -
public function onPluginsInitialized() {
$uri = $this->grav['uri'];
$route = $this->config->get('plugins.random.route');
if ($route && $route == $uri->path()) {
$this->enable([
'onPageInitialized' => ['onPageInitialized', 0]
]);
}
}
O objeto Uri inclui o uri atual, informações sobre a rota. O objeto config especifica o valor de configuração para rotear o plugin aleatório e armazená-lo no objeto de rota.
Iremos agora comparar a rota configurada com o caminho URI atual que informa o plugin para ouvir o onPageInitialized evento.
Exibindo página aleatória
Você pode exibir a página aleatória usando o código com o seguinte método -
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();
}
}
}
Conforme mostrado no código,
Atribua o objeto de taxonomia à variável $taxonomy_map.
Obtenha o conjunto de filtros que usa a taxonomia configurada a partir da configuração do plugin usando configobjeto. Estamos usando o item comocategory : blog.
Nós estamos usando collection para armazenar a página aleatória no $collection. Anexe a página que corresponde ao filtro para$collection variável.
Remova a definição do objeto da página atual e defina a página atual para ser exibida como uma página aleatória na coleção.
Finalmente, veremos o código completo do plugin para exibir uma página aleatória, conforme mostrado abaixo -
<?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();
}
}
}
}
Abra seu navegador e digite localhost / folder_name / random para ver a página aleatória, conforme mostrado na imagem a seguir -