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 -