Grav-プラグインチュートリアル

この章では、プラグインをセットアップおよび構成する方法について詳しく説明します。さらに、プラグインの構造とランダムなページを表示する方法についても理解します。プラグインは、Gravのコア機能では元々完成していなかった追加機能を提供するソフトウェアです。

この記事では、ランダムプラグインを使用してランダムページを表示します。このプラグインを使用する前に、ランダムプラグインのいくつかの重要なポイントを確認します。

  • このプラグインを使用すると、URIを次のように使用してランダムページを表示できます。 /random

  • ページで指定された分類法を利用するためのフィルターを作成します。あなたはとして作成することができますcategory : blog

  • フィルタオプションを使用して、ランダムなページを表示できます。これは、ランダムページに表示されるのと同じコンテンツを使用するようにGravに通知します。

セットアッププラグイン

実際のプラグインを使用する前に、次の手順に従ってプラグインの基本設定を作成してください。

  • と呼ばれるフォルダを作成します randomuser/plugins フォルダ。

  • user/plugins/random フォルダ、すなわち2つのファイルを作成します-

    • random.php プラグインコードに使用

    • random.yaml 構成に使用

プラグイン構成

ランダムプラグインを使用するには、いくつかの構成オプションが必要です。下に次の行を書きますrandom.yaml ファイル。

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

ランダムは、定義したルートを作成します。分類フィルターに基づいて、ランダムなアイテムを選択します。フィルタのデフォルト値は'category: blog' これはランダムな選択に使用されます。

プラグインの構造

次のコードは、プラグイン構造で使用できます。

<?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 {
   }
?>

プラグインで多数のクラスを使用しています。 use読みやすくし、スペースも節約するステートメント。ザ・namespace Grav\PluginPHPファイルの先頭に書き込む必要があります。プラグイン名はで書く必要がありますtitlecase を使用して拡張する必要があります Plugin

あなたは機能を購読することができます getSubscribedEvents()onPluginsInitializedイベント; これにより、プラグインがサブスクライブされるイベントが決まります。このように、イベントを使用して他のイベントをサブスクライブできます。

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

今使用しましょう onPluginInitialized 下のイベント RandomPlugin で構成されているページのルーティングに使用されるクラス random.yaml ファイル。

メソッド onPluginInitialized() 次のコードが含まれています-

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

ウリのオブジェクトは、現在のURI、ルートに関する情報が含まれています。設定オブジェクトは、ランダムなプラグインをルーティングするための設定値を指定し、ルートオブジェクトに格納します。

次に、構成されたルートを、プラグインにリッスンするように通知する現在のURIパスと比較します。 onPageInitialized イベント。

ランダムページの表示

次の方法でコードを使用してランダムページを表示できます-

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

コードに示されているように、

  • 分類オブジェクトを変数に割り当てます $taxonomy_map

  • を使用してプラグイン構成から構成された分類法を使用するフィルターの配列を取得します configオブジェクト。私たちはアイテムをとして使用していますcategory : blog

  • 使用しています collection ランダムページをに保存するには $collection。フィルタに一致するページをに追加します$collection 変数。

  • 現在のページオブジェクトの設定を解除し、コレクション内のランダムページとして表示するように現在のページを設定します。

最後に、以下に示すようにランダムなページを表示するプラグインの完全なコードが表示されます-

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

次のスクリーンショットに示すように、ブラウザを開いてlocalhost / folder_name / randomと入力すると、ランダムなページが表示されます。