Smartyプリフィルタプラグインで全てのテンプレートファイルを置換する

Smarty web制作 アプリケーション別 プログラミング

広報:齊藤 メイ 広報:齊藤 メイ

Posted on 2016年11月01日(火)08:29


Smartyプリフィルタプラグインで全てのテンプレートファイルを置換する

今更Smartyネタではありますが、まだ使われているところもあるっちゃあるのです。本日は「Smartyプリフィルタプラグインで全てのテンプレートファイルを置換する」についてです。

こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。本日は、「Smartyプリフィルタプラグインで全てのテンプレートファイルを置換する」についてです。

Smartyとは...についてはあえて説明しません。今更知る必要もないかと思います。なお今回使用するバージョンは2.6.7になります。

Smartyプラグインとは

色々なタイミング(テンプレートを読み込む前・コンパイル直後など)で、色々な処理を行わせることができる機能です。以下はそのおおまかな種類です。

何となく名称で動きの想像がつくかと思いますが、詳しくは各リンクからご参照ください。

Smartyプラグインの作成ルール

Smartyプラグインは当然プラグインファイルを作って動作させる訳ですが、プラグインの作成・動作ルールを知っておく必要があります。適当に作ってプラグインディレクトリに放り込めばいいという訳でもないのです。

プラグインの動作

プラグインは任意のタイミングで動作させることはもちろん、有効・無効も設定できます。ただしプラグインの種類によっては多少の制約があります。詳しくは以下ページをご参照ください。
Chapter 16. プラグインによる Smarty の拡張 | Smarty

プラグインディレクトリ

自分で指定することも可能ですが、デフォルトは SMARTY_DIR 直下の plugins/ です。詳しくは以下ページをご参照ください。
$plugins_dir | Smarty

命名規則

プラグインファイルは適当なファイル名では動きません。ルールに従って命名する必要があります。またプラグイン関数名にも留意してください。詳しくは以下ページをご参照ください、ってさっきからこればかりで手抜きっぽいですね。
命名規約 | Smarty

サンプル

要件と制約

では早速プラグインを作ってみましょう。今回サンプルとして作るプラグインの要件と制約は以下の通りです。

  • 全てのページの</body>タグの前にJavaScriptコードを埋め込みたい
  • JavaScriptコードは外部ファイル
  • 実プログラムには1ミリも手を加えられない

プラグインディレクトリを確認

プラグインディレクトリを確認します。先に書いた通りですので確認しましょう。ここでは、
/Smarty/plugins/
とします。

JavaScript外部ファイルを用意する

要件ですので用意します。今回は、
/js/test.js
とします。

プラグインファイルを作成

まだ中身は書きません。ファイルを作るだけにします。今回の要件を技術的な要約をすると「コンパイル直前にテンプレートファイルを置換したい」ですので、プラグイン種別はプリフィルタとします。ですので以下のようにプラグインファイルを作ります。
/Smarty/libs/plugins/prefilter.nekoit.php

ファイル名は英数字とアンダーバーしか使えませんので、neko-itにはできません。残念、、、

プラグインを書く

それではコードを書きましょう。あ、少し補足です。プラグインの有効/無効は別ファイルの定数ANALYTICS_OTHERで設定しています。今回その別ファイルはもちろん定数は用意していません。そもそも意味不明な定数名ですね。しかしそこは華麗にスルーして適当に脳内置換した上で参考にしてください。

 

プラグインをいつでも実行させる

プラグインは各プログラム中から任意で呼び出したり、特定の動作で自動で動かしたり、常時動かしたりできます。それぞれのプラグインの制約にも寄りますが、今回は「いつでも実行させる」ということで設定します。

/Smarty/libs/Smarty.class.phpというファイルに記述します。

以上です。これで全てのテンプレートファイル中の</body>タグがJavaScriptコード+</body>として置換されます。

Smartyを使ったそれなりに規模が大きいプロジェクトにおいて全体的な修正をかけたい場合にはプラグインが便利ですね。


いかがでしたでしょうか?
猫ITソリューションズは、飼い主の皆さんにITを活用しあらゆるシーンで的確なアドバイスをいたします。それではまたお会いしましょう。

Smartyプリフィルタプラグインで全てのテンプレートファイルを置換する

see you!

 



Blog Categories

Member Profile

広報:齊藤 メイ

埼玉在住の三毛猫です。趣味は日向ぼっこ、好きな猫缶はカツオ系です。仲良くしてくださいね!

Facebook
Twitter

代表:齊藤 智宏

埼玉在住のWebデベロッパーです。80's洋楽、映画、レトロゲームが大好きです。よろしく!

Facebook
Twitter