Grav - Tutoriels de plugins

Dans ce chapitre, nous allons explorer comment un plugin peut être installé et configuré. De plus, nous comprendrons également la structure d'un plugin et comment afficher une page aléatoire. Plugin est un logiciel qui fournit des fonctionnalités supplémentaires qui n'étaient pas à l'origine complétées par les fonctionnalités de base de Grav.

Dans cet article, nous allons afficher une page aléatoire à l'aide du plugin random. Avant d'utiliser ce plugin, nous verrons quelques points importants du plugin random.

  • Vous pouvez utiliser ce plugin pour afficher la page aléatoire en utilisant l'URI comme /random.

  • Créez le filtre pour utiliser la taxonomie spécifiée dans les pages. Vous pouvez créer commecategory : blog.

  • Vous pouvez afficher une page aléatoire en utilisant l'option de filtre; cela informe Grav d'utiliser le même contenu qui doit être affiché dans la page aléatoire.

Plugin d'installation

Suivez ces étapes pour créer une configuration de base pour le plugin avant d'utiliser le plugin réel.

  • Créer un dossier appelé random sous le user/plugins dossier.

  • Sous le user/plugins/random dossier, créez deux fichiers à savoir -

    • random.php utilisé pour le code du plugin

    • random.yaml utilisé pour la configuration

Configuration du plugin

Pour utiliser le plugin aléatoire, nous avons besoin de quelques options de configuration. Nous écrirons les lignes suivantes sous lerandom.yaml fichier.

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

Random crée un itinéraire que vous définissez. Basé sur des filtres de taxonomie, il sélectionne un élément aléatoire. La valeur par défaut du filtre est'category: blog' qui est utilisé pour la sélection aléatoire.

Structure du plugin

Le code suivant peut être utilisé dans la structure du 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 {
   }
?>

Nous utilisons un tas de classes dans le plugin en utilisant le useinstructions qui le rendent plus lisible et économise de l'espace aussi. lenamespace Grav\Plugindoit être écrit en haut du fichier PHP. Le nom du plugin doit être écrittitlecase et devrait être étendu en utilisant Plugin.

Vous pouvez vous abonner à la fonction getSubscribedEvents() à la onPluginsInitializedun événement; cela détermine les événements auxquels le plugin est abonné. De cette manière, vous pouvez utiliser l'événement pour vous abonner à d'autres événements.

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

Utilisons maintenant le onPluginInitialized événement sous le RandomPlugin classe utilisée pour acheminer la page qui est configurée dans le random.yaml fichier.

La méthode onPluginInitialized() contient le code suivant -

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' objet Uri comprend l'URI actuel, des informations sur l'itinéraire. L' objet config spécifie la valeur de configuration pour acheminer le plugin aléatoire et le stocker dans l'objet route.

Nous allons maintenant comparer la route configurée avec le chemin URI actuel qui informe le plugin d'écouter le onPageInitialized un événement.

Affichage d'une page aléatoire

Vous pouvez afficher la page aléatoire en utilisant le code avec la méthode suivante -

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

Comme indiqué dans le code,

  • Affectez l'objet de taxonomie à la variable $taxonomy_map.

  • Obtenez le tableau de filtre qui utilise la taxonomie configurée à partir de la configuration du plugin en utilisant configobjet. Nous utilisons l'article commecategory : blog.

  • Nous utilisons collection pour stocker la page aléatoire dans le $collection. Ajouter la page qui correspond au filtre à$collection variable.

  • Annuler la définition de l'objet de page actuel et définir la page actuelle pour qu'elle s'affiche en tant que page aléatoire dans la collection.

Enfin, nous verrons le code complet du plugin pour afficher une page aléatoire comme indiqué ci-dessous -

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

Ouvrez votre navigateur et tapez localhost / nom_dossier / aléatoire pour voir la page aléatoire comme indiqué dans la capture d'écran suivante -