Grav - Tutoriales de complementos

En este capítulo, profundizaremos en cómo se puede instalar y configurar un complemento. Además, también entenderemos la estructura de un complemento y cómo mostrar una página aleatoria. El complemento es una pieza de software que proporciona una funcionalidad adicional que no fue completada originalmente por la funcionalidad principal de Grav.

En este artículo, vamos a mostrar una página aleatoria utilizando el complemento aleatorio. Antes de usar este complemento, veremos algunos puntos importantes del complemento aleatorio.

  • Puede usar este complemento para mostrar la página aleatoria usando URI como /random.

  • Cree el filtro para utilizar la taxonomía especificada en las páginas. Puedes crear comocategory : blog.

  • Puede mostrar una página aleatoria utilizando la opción de filtro; esto le informa a Grav que use el mismo contenido que se mostrará en la página aleatoria.

Complemento de configuración

Siga estos pasos para crear una configuración básica para el complemento antes de usar el complemento real.

  • Crear carpeta llamada random bajo la user/plugins carpeta.

  • Bajo la user/plugins/random carpeta, cree dos archivos a saber:

    • random.php utilizado para el código del complemento

    • random.yaml utilizado para la configuración

Configuración del complemento

Para usar el complemento aleatorio, debemos tener algunas opciones de configuración. Escribiremos las siguientes líneas debajo delrandom.yaml archivo.

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

Aleatorio crea una ruta que usted define. Según los filtros de taxonomía, elige un elemento aleatorio. El valor predeterminado del filtro es'category: blog' que se utiliza para la selección aleatoria.

Estructura del complemento

El siguiente código se puede utilizar en la estructura del complemento.

<?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 un montón de clases en el complemento usando el usedeclaraciones que lo hacen más legible y también ahorra espacio. losnamespace Grav\Plugindebe escribirse en la parte superior del archivo PHP. El nombre del complemento debe escribirse entitlecase y debe extenderse usando Plugin.

Puedes suscribirte a la función getSubscribedEvents() al onPluginsInitializedevento; esto determina a qué eventos está suscrito el complemento. De esta manera, puede utilizar el evento para suscribirse a otros eventos.

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

Usemos ahora el onPluginInitialized evento bajo el RandomPlugin clase utilizada para enrutar la página que está configurada en el random.yaml archivo.

El método onPluginInitialized() contiene el siguiente 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]
      ]);
   }
}

El objeto Uri incluye el uri actual, información sobre la ruta. El objeto de configuración especifica el valor de configuración para enrutar el complemento aleatorio y almacenarlo en el objeto de ruta.

Ahora compararemos la ruta configurada con la ruta URI actual que informa al complemento que escuche el onPageInitialized evento.

Visualización de una página aleatoria

Puede mostrar la página aleatoria utilizando el código con el siguiente 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();
      }
   }
}

Como se muestra en el código,

  • Asignar el objeto de taxonomía a la variable $taxonomy_map.

  • Obtenga la matriz de filtro que usa la taxonomía configurada de la configuración del complemento usando configobjeto. Estamos usando el artículo comocategory : blog.

  • Estamos usando collection para almacenar la página aleatoria en el $collection. Agregue la página que coincide con el filtro$collection variable.

  • Desactive el objeto de la página actual y configure la página actual para que se muestre como una página aleatoria en la colección.

Finalmente, veremos el código completo del complemento para mostrar una página aleatoria como se muestra a continuación:

<?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 su navegador y escriba localhost / folder_name / random para ver la página aleatoria como se muestra en la siguiente captura de pantalla: