Grav - Tutorial sui plugin

In questo capitolo, approfondiremo come impostare e configurare un plugin. Inoltre, capiremo anche la struttura di un plugin e come visualizzare una pagina casuale. Plugin è un software che fornisce funzionalità aggiuntive che non erano state originariamente completate dalle funzionalità principali di Grav.

In questo articolo, visualizzeremo la pagina casuale utilizzando il plug-in casuale. Prima di utilizzare questo plugin, vedremo alcuni punti importanti del plugin casuale.

  • È possibile utilizzare questo plug-in per visualizzare la pagina casuale utilizzando URI come /random.

  • Crea il filtro per utilizzare la tassonomia specificata nelle pagine. Puoi creare comecategory : blog.

  • È possibile visualizzare una pagina casuale utilizzando l'opzione di filtro; questo informa Grav di utilizzare lo stesso contenuto che deve essere visualizzato nella pagina casuale.

Plugin di installazione

Segui questi passaggi per creare una configurazione di base per il plug-in prima di utilizzare il plug-in effettivo.

  • Crea cartella chiamata random sotto il user/plugins cartella.

  • Sotto il user/plugins/random cartella, crea due file ovvero:

    • random.php utilizzato per il codice del plugin

    • random.yaml utilizzato per la configurazione

Configurazione plug-in

Per utilizzare il plug-in casuale, abbiamo bisogno di alcune opzioni di configurazione. Scriveremo le seguenti righe sottorandom.yaml file.

enabled:true
route:/random
filters:
   category:blog

Random crea un percorso che definisci. In base ai filtri della tassonomia, seleziona un elemento casuale. Il valore predefinito del filtro è'category: blog' che viene utilizzato per la selezione casuale.

Struttura del plugin

Il codice seguente può essere utilizzato nella struttura del 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 {
   }
?>

Stiamo usando un sacco di classi nel plugin usando il usedichiarazioni che lo rendono più leggibile e consente anche di risparmiare spazio. Ilnamespace Grav\Plugindeve essere scritto all'inizio del file PHP. Il nome del plugin dovrebbe essere scritto in formatotitlecase e dovrebbe essere esteso usando Plugin.

Puoi iscriverti alla funzione getSubscribedEvents() al onPluginsInitializedevento; questo determina a quali eventi il ​​plugin è iscritto. In questo modo, puoi utilizzare l'evento per iscriverti ad altri eventi.

public static function getSubscribedEvents() {
   return [
      'onPluginsInitialized' => ['onPluginsInitialized', 0],
   ];
}

Usiamo ora il file onPluginInitialized evento sotto il RandomPlugin classe usata per instradare la pagina che è configurata in random.yaml file.

Il metodo onPluginInitialized() contiene il codice seguente -

public function onPluginsInitialized() {
   $uri = $this->grav['uri'];
   $route = $this->config->get('plugins.random.route');
   
   if ($route && $route == $uri->path()) {
      $this->enable([
         'onPageInitialized' => ['onPageInitialized', 0]
      ]);
   }
}

L' oggetto Uri include l'URI corrente, informazioni sul percorso. L' oggetto config specifica il valore di configurazione per l'instradamento del plug-in casuale e lo memorizza nell'oggetto route.

Ora confronteremo il percorso configurato con il percorso URI corrente che informa il plugin di ascoltare il file onPageInitialized evento.

Visualizzazione di una pagina casuale

È possibile visualizzare la pagina casuale utilizzando il codice con il seguente metodo:

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();
      }
   }
}

Come mostrato nel codice,

  • Assegna l'oggetto tassonomia alla variabile $taxonomy_map.

  • Ottieni l'array di filtri che utilizza la tassonomia configurata dalla configurazione del plugin usando configoggetto. Stiamo usando l'articolo comecategory : blog.

  • Stiamo usando collection per memorizzare la pagina casuale nel file $collection. Aggiungi la pagina a cui corrisponde il filtro$collection variabile.

  • Annulla l'impostazione dell'oggetto pagina corrente e imposta la pagina corrente in modo che venga visualizzata come pagina casuale nella raccolta.

Infine, vedremo il codice completo del plugin per visualizzare una pagina casuale come mostrato di seguito -

<?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();
         }
      }
   }
}

Apri il browser e digita localhost / nome_cartella / random per vedere la pagina casuale come mostrato nello screenshot seguente -