Grav-plugin-tutorials

提供:Dev Guides
移動先:案内検索

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

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

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

  • URIを /random として使用することにより、このプラグインを使用してランダムページを表示できます。 フィルターを作成して、ページで指定された分類法を使用します。 category:blog *として作成できます。
  • フィルタオプションを使用して、ランダムなページを表示できます。これにより、ランダムページに表示されるのと同じコンテンツを使用するようGravに通知します。

セットアッププラグイン

実際のプラグインを使用する前に、以下の手順に従ってプラグインの基本セットアップを作成してください。

  • user/plugins フォルダーの下に random というフォルダーを作成します。
  • 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 \ Plugin は、PHPファイルの先頭に記述する必要があります。 プラグイン名は titlecase で記述し、 Plugin を使用して拡張する必要があります。

関数* getSubscribedEvents()を *onPluginsInitialized イベントにサブスクライブできます。これにより、プラグインがサブスクライブされるイベントが決まります。 このように、イベントを使用して他のイベントをサブスクライブできます。

public static function getSubscribedEvents() {
   return [
      'onPluginsInitialized' => ['onPluginsInitialized', 0],
   ];
}
*random.yaml* ファイルで設定されたページのルーティングに使用される *RandomPlugin* クラスの下で *onPluginInitialized* イベントを使用しましょう。

メソッド* 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、ルートに関する情報が含まれます。 _config_オブジェクトは、ランダムプラグインをルーティングするための構成値を指定し、それをルートオブジェクトに格納します。

ここで、設定されたルートを現在の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_と入力して、次のスクリーンショットに示すようにランダムページを表示します-

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