%{UA_GROUP} 表示はされるがinclude用途で問題 ver3.0.11

50 views
Skip to first unread message

鈴木孝明

unread,
Jun 14, 2022, 4:42:57 AM6/14/22
to a-blog cms forum
お世話になります。ルーコ鈴木です。
バージョン    3.0.11
PHPのバージョン    7.4.23

グローバル変数「%{UA_GROUP}」について質問です。
テンプレートに下記の記述をしたとき、意図したとおり動作しません。

@include("/include/hoge-%{UA_GROUP}.html")

たとえば、PCでアクセスすると、%{UA_GROUP}が解決されて
hoge-PC.html
になるのですが、hoge-PC.htmlが読み込まれません。

%{UA_GROUP}を使わずに「hoge-PC.html」とテンプレートに書き込めば、hoge-PC.htmlが読み込まれます。

なお
Command + K
にて%{UA_GROUP}の値を確認すると「PC」と表示されます。
includeで使わず、単に表示するだけならhoge-PC.htmlと表示されます。

デバッグモードがONのときは、上記現象が発生しません。
意図したとおり動作し、hoge-PC.htmlが読み込まれます。
※「PC」に限らず、他の%{UA_GROUP}も問題なく動作する

デバッグモードをOFFにすると、上記現象が発生します。
ページキャッシュの有効/無効は無関係のようです。

そのためデバッグモードをOFFにできない状況です。


この現象は、そちらでも再現されるでしょうか?
また解決策があれば、ご教示くださいませ。

よろしくお願いいたします。

山本一道@アップルップル

unread,
Jun 15, 2022, 12:40:24 AM6/15/22
to a-blog cms forum
3.0.0 からテンプレートキャッシュ機能というものが追加されており、これが有効になっているとインクロード機能が動作した後のタイミングのテンプレートがキャッシュされます。その関係で今回のような処理が正常に動作しなくなります。例外的にいくつかのグローバル変数は除外されていますので詳しくは <https://developer.a-blogcms.jp/document/cache/template-cache.html> をご覧ください。

また、このテンプレートキャッシュをオフにする。 private/config.system.yaml に template_cache: off と記述すれば、テンプレートキャッシュ機能が無い状態になりますので、これまで通りに動作します。

開発時にはデバッグモード ON で、本番公開時に デバッグモード を OFF にする事で発生するということになるので、トラブル防止のためにも何らか事前に知ることができるようなことを考えてみたいと思っております。
2022年6月14日火曜日 17:42:57 UTC+9 鈴木孝明:

鈴木孝明

unread,
Jun 15, 2022, 6:39:37 PM6/15/22
to a-blog cms forum
山本様

ありがとうございます!
テンプレートキャッシュ機能について、十分に理解できていませんでした。

>本番公開時に デバッグモード を OFF にする事で発生するということになるので

たしかに、私はそのタイミングで問題を認識しました。
テンプレートをさわる人みんながテンプレートキャッシュについて把握していないと、公開タイミングで慌ててしまうかもしれないですね。

2022年6月15日水曜日 13:40:24 UTC+9 山本一道@アップルップル:

鈴木孝明

unread,
Jun 15, 2022, 7:00:04 PM6/15/22
to a-blog cms forum
すみません。
念のため1点確認させてください。

たとえば、今回の質問と同じケースで、どうしても%{UA_GROUP}で出し分けたい場合は
下記のようにIFブロックを使うのがVer.3系からは最適と考えて良いでしょうか?

<!-- BEGIN_IF [%{UA_GROUP}/eq/PC] -->
@include("/include/hoge-PC.html")
<!-- ELSE_IF [%{UA_GROUP}/eq/SmartPhone] -->
@include("/include/hoge-SmartPhone.html")
<!-- ELSE -->
@include("/include/hoge.html")
<!-- END_IF -->

もちろんIFブロックの使いぶりによるとは思うのですが、
テンプレートキャッシュは全体のパフォーマンスを上げられるので、
基本的に活かした方が良いと考えました。
その上で、部分的に余分なincludeが動くのは仕方ないのかな・・・と考え質問いたしました。


よろしくお願いいたします。

2022年6月15日水曜日 13:40:24 UTC+9 山本一道@アップルップル:
3.0.0 からテンプレートキャッシュ機能というものが追加されており、これが有効になっているとインクロード機能が動作した後のタイミングのテンプレートがキャッシュされます。その関係で今回のような処理が正常に動作しなくなります。例外的にいくつかのグローバル変数は除外されていますので詳しくは <https://developer.a-blogcms.jp/document/cache/template-cache.html> をご覧ください。

伊藤淳

unread,
Jun 16, 2022, 4:29:45 AM6/16/22
to a-blog cms forum
お世話になっております。

> たとえば、今回の質問と同じケースで、どうしても%{UA_GROUP}で出し分けたい場合は
> 下記のようにIFブロックを使うのがVer.3系からは最適と考えて良いでしょうか?

おっしゃる通り、テンプレートキャッシュ時にインクルード文で使用できないグローバル変数の場合は、
IFブロックで分けていただくことになると思います。ただそのぞれのインクルード文で大量のモジュールを読み込んでいる場合は、
テンプレートキャッシュを諦めるか、カスタムタッチモジュールを作成して対応するほうがパフォーマンスが出る場合はあるかと思います。

どうぞよろしくお願いいたします。

2022年6月16日木曜日 8:00:04 UTC+9 鈴木孝明:

鈴木孝明

unread,
Jun 16, 2022, 7:57:01 PM6/16/22
to a-blog cms forum
伊藤さま

ありがとうございます!

>カスタムタッチモジュールを作成して対応するほうがパフォーマンスが出る場合はあるかと

カスタムタッチモジュールという手段があるのですね!
そういえばずいぶん前に一度、独自のタッチモジュールを導入したことがありました。
思いついていなかったので、質問してよかったです。

2022年6月16日木曜日 17:29:45 UTC+9 伊藤淳:
Reply all
Reply to author
Forward
0 new messages