https://getgrav.org/
Twig テンプレートが書けて、Twig Extension も追加できるので、今回、追加してみようと思います。
公式のドキュメントを参考に、GRAV に、Hello World を出力するプラグインを書いてみたいと思います。
https://learn.getgrav.org/17/cookbook/twig-recipes
1.GRAV CMS インストール
https://getgrav.org/ からダウンロードして、Document Root に解凍したら終了。驚くほど簡単です。
※ちなみに、Document Root 直下じゃなくても、フォルダ作って解凍しても動きます。
2.プラグイン用の環境を作成
以下、Grav を解凍したフォルダで実行します。GRAV CMS の開発用ツールがインストールされます。
> php bin/gpm install devtools
3.プラグインのひな型作成
以下のコマンド実行してプラグインに関する、いくつか質問に回答します。
※公式サイトには、bin/plugin devtools newplugin と書いてあるのですが、new-plugin が正解のようです。
>php bin/plugin devtools new-plugin
Enter Plugin Name:
> hello
Enter Plugin Description:
> output hello world
Enter Developer Name:
> yossy
Enter GitHub ID (can be blank):
> (任意の GitHub ID ※未入力も可能)
Enter Developer Email:
> (任意のメールアドレス)
SUCCESS plugin hello -> Created Successfully
これで、雛形作成完成です。Plugin Name を Hello としたので、\user\plugins\hello フォルダ以下に、作成されたプラグインの雛形保存されています。
フォルダに移動して、
composer update を実行しておきます。Composer によって、Plugin 用に、Autoloader やライブラリなどが読み込まれますので、実行しておかないとエラーになります。
4.コードを書いていきます。
\user\plugins\hello\hello.php に、以下のコードを追記します。
public function onPluginsInitialized(): void
{
// Don't proceed if we are in the admin plugin
if ($this->isAdmin()) {
return;
}
// Enable the main events we are interested in
$this->enable([
'onTwigInitialized' => ['onTwigInitialized', 0]
]);
}
public function onTwigInitialized()
{
$this->grav['twig']->twig()->addFunction(
new \Twig_SimpleFunction('hello', [$this, 'hello'], array('is_safe' => array('html')))
);
}
public function hello() {
return 'Hello World.';
}
GRAV で動作するときの、おおまかな流れとしては、onPluginsInitialized() が呼び出され plugin の初期化処理の登録を求められますので、onTwigInitialized() を登録します。
初期化処理 onTwigInitialized() で、Twig Extension を登録します。
これで、ページを表示するとき、hello() が呼び出されて、その return 値の内容が表示されます。
今回は、HTML エスケープ不要なので、Extension 登録時に、array('is_safe' => array('html')) を入れています。
Extension の登録は、Twig の機能なので、Twig のドキュメントを参照すると、より理解が深まります。
https://twig.symfony.com/doc/2.x/advanced.html#functions
これで、Hello World. が出力されるプラグイン完成したので、動作テストを行います。
4.動作前に、コンテンツに twig が書けるように設定します。
\user\config\system.yaml の以下の twig の部分を true にします。これで、markdown に加えて、Twig 構文を本部内に書けるようになります。
pages:
theme: quark
markdown:
extra: false
process:
markdown: true
twig: true <---- ここを、true に設定
これで、ページファイルの default.md などに、Twig のお作法に従って書いてみます。
{{ hello() }}
出力結果
正しく表示されています。こちら参考に、便利関数を作ってみてください。他えば、 みたいな関数を作って、商品マスタ情報が表示されるとか、色々使い道はあるんじゃないかなと思います。
なお、キャッシュをクリアしないと、プログラムの修正内容が反映されない時があるので、php bin/grav cacheでキャッシュクリアしてみてください。\user\config\system.yaml でキャッシュを無効化してもいいかもですね。