Grav - Tutorial Plugin

Dalam bab ini, kita akan mempelajari bagaimana plugin dapat diatur dan dikonfigurasi. Selain itu, kita juga akan memahami struktur plugin dan cara menampilkan halaman acak. Plugin adalah perangkat lunak yang menyediakan fungsionalitas tambahan yang awalnya tidak dilengkapi dengan fungsionalitas inti Grav.

Pada artikel ini, kita akan menampilkan halaman acak menggunakan plugin acak. Sebelum menggunakan plugin ini, kita akan melihat beberapa poin penting dari plugin acak.

  • Anda dapat menggunakan plugin ini untuk menampilkan halaman acak dengan menggunakan URI sebagai /random.

  • Buat filter untuk menggunakan taksonomi yang ditentukan di halaman. Anda dapat membuat sebagaicategory : blog.

  • Anda dapat menampilkan halaman acak dengan menggunakan opsi filter; ini memberitahu Grav untuk menggunakan konten yang sama yang akan ditampilkan di halaman acak.

Setup Plugin

Ikuti langkah-langkah berikut untuk membuat pengaturan dasar untuk plugin sebelum menggunakan plugin yang sebenarnya.

  • Buat folder bernama random di bawah user/plugins map.

  • Di bawah user/plugins/random folder, buat dua file yaitu -

    • random.php digunakan untuk kode plugin

    • random.yaml digunakan untuk konfigurasi

Konfigurasi Plugin

Untuk menggunakan plugin acak, kita perlu memiliki beberapa opsi konfigurasi. Kami akan menulis baris berikut di bawahrandom.yaml mengajukan.

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

Random membuat rute yang Anda tentukan. Berdasarkan filter taksonomi, ia mengambil item secara acak. Nilai default filter adalah'category: blog' yang digunakan untuk seleksi acak.

Struktur Plugin

Kode berikut dapat digunakan dalam struktur 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 {
   }
?>

Kami menggunakan banyak kelas di plugin menggunakan usepernyataan yang membuatnya lebih mudah dibaca dan menghemat ruang juga. Itunamespace Grav\Pluginharus ditulis di bagian atas file PHP. Nama plugin harus ditulistitlecase dan harus diperpanjang menggunakan Plugin.

Anda dapat berlangganan fungsi tersebut getSubscribedEvents() ke onPluginsInitializedperistiwa; ini menentukan acara mana yang berlangganan plugin. Seperti ini, Anda dapat menggunakan acara tersebut untuk berlangganan acara lainnya.

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

Sekarang mari kita gunakan onPluginInitialized acara di bawah RandomPlugin kelas yang digunakan untuk merutekan halaman yang dikonfigurasi di random.yaml mengajukan.

Metode onPluginInitialized() berisi kode berikut -

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

The Uri objek termasuk saat uri, informasi tentang rute. The config objek menentukan nilai konfigurasi untuk routing plugin acak dan menyimpannya dalam objek rute.

Sekarang kita akan membandingkan rute yang dikonfigurasi dengan jalur URI saat ini yang memberi tahu plugin untuk mendengarkan onPageInitialized peristiwa.

Menampilkan Halaman Acak

Anda dapat menampilkan halaman acak dengan menggunakan kode dengan metode berikut -

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

Seperti yang ditunjukkan pada kode,

  • Tetapkan objek taksonomi ke variabel $taxonomy_map.

  • Dapatkan berbagai filter yang menggunakan taksonomi terkonfigurasi dari konfigurasi plugin menggunakan configobyek. Kami menggunakan item sebagaicategory : blog.

  • Kami menggunakan collection untuk menyimpan halaman acak di $collection. Tambahkan halaman yang cocok dengan filter$collection variabel.

  • Hapus objek halaman saat ini dan setel halaman saat ini untuk ditampilkan sebagai halaman acak dalam koleksi.

Terakhir, kita akan melihat kode lengkap plugin untuk menampilkan halaman acak seperti gambar di bawah ini -

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

Buka browser Anda dan ketik localhost / folder_name / random untuk melihat halaman acak seperti yang ditunjukkan pada gambar berikut -