親、ルートテーマへのグローバル変数の実装について
a-blog cmsユーザーの方から、%{CURRENT_THEMES_DIR} :表示中ページで使用されているテーマのパスを表すグローバル変数、がありますが、これの親ブログ版、ルートブログ版が欲しいといった要望を頂いております。
a-blog cmsユーザーの方から、%{CURRENT_THEMES_DIR} :表示中ページで使用されているテーマのパスを表すグローバル変数、がありますが、これの親ブログ版、ルートブログ版が欲しいといった要望を頂いております。
ver2.0からの機能、IFブロックの利用事例を紹介します。
IFブロックの説明についてはドキュメントページを参考にしてください。
モジュールの変数を使う例
<!-- BEGIN_MODULE Category_EntryList id="clinicTop" --> <!-- BEGIN categoryEntryList:loop --> <!-- BEGIN category:loop --><!-- BEGIN entry:veil --><!-- BEGIN entry:loop --> <!-- BEGIN_IF [{entryCode}/eq/state.html] --> <p class="icon_camera">{entryTitle}</p> <!-- ELSE_IF [{entryCode}/eq/access.html] --> <p class="icon_pin">{entryTitle}</p> <!-- ELSE --> <p>{entryTitle}</p> <!-- END_IF --> <!-- END entry:loop --><!-- END entry:veil --><!-- END category:loop --> <!-- END categoryEntryList:loop --> <!-- END_MODULE Category_EntryList -->
上記の例では、特定のエントリーコードの場合に、表示するアイコンを変えています。IFブロックを使わずに、カスタムフィールドにクラス名を登録し、それを表示するような方法も可能です。
<!-- BEGIN_IF [{url_a}{url_b}/nem/] --> <h2>リンク</h2> <!-- BEGIN url_a:veil --><p><a href="{url_a}" class="acms-btn">リンクA</a></p><!-- END url_a:veil --> <!-- BEGIN url_b:veil --><p><a href="{url_b}" class="acms-btn">リンクB</a></p><!-- END url_b:veil --> <!-- END_IF -->
上記の例では、カスタムフィールド「url_a」「url_b」があり、どちらか一方でも値がセットされていれば表示されるようになっています。
{url_a}{url_b}と値をつなげて、nem(値が空ではない)かどうかを判断しています。
このように、複数のフィールドを文字列としてつなげて使うことも可能です。
また、nemのように比較対象がない記述は”{hoge}/nem”ではなく”{hoge}/nem/”と最後の/が必要になります。
<!-- BEGIN pager:veil --> <div> <!-- BEGIN page:loop --><span <!-- BEGIN_IF [%{PAGE}/eq/{page}] -->class="itemPagerActive"<!-- END_IF -->> <!-- BEGIN link#front --><a href="{url}"><!-- END link#front -->{page}<!-- BEGIN link#rear --></a><!-- END link#rear --> </span><!-- END page:loop --> </p> </div> <!-- END pager:veil -->
上記の例では、今見ているページ(グローバル変数の%{PAGE})とページャーのページ番号(モジュール変数の{page})が一致した時だけクラスがセットされるようにしています。
グローバル変数をIFブロックに使うことができます、比較対象は必ずしも固定値である必要はなく、モジュール変数との比較にも利用できます。
<!-- BEGIN_IF [%{CID}/re/^(31|44)$] --> <!-- END_IF -->
正規表現を使って、複数の値を許可する場合にも利用できます。
IFブロックはとても便利な機能ですが、いくつかのデメリットもあります。
テンプレートファイルに直接条件を記入するため、FTPでテンプレートファイルを確認・変更できる方でないと修正ができません。サイト構築時には大きな問題ではありませんが、お客様での運用時に柔軟な調整ができません。
モジュールIDでの調整でしたら、管理ページから変更が可能です。
実行順序の関係で、IFブロックは最後に処理されます(これによって柔軟な条件分岐処理が可能になります)
そのため、テンプレート処理が一通り動いてから条件分岐処理が行われます。
例えば、エントリー一覧に出ている100件のエントリーからある1件だけを表示するような処理をIFブロックで行いますと、ページ表示には不要な99件のエントリーも一旦テンプレートに書きだされます。そのため表示速度は低下します。こういった用途でのIFブロックの利用はお勧めできません。
今回は、どこどこ.jpというサービスを使い、アクセスしている地域により表示するコンテンツを制御してみたいと思います。
例えば、制作会社一覧ページにアクセスした時にアクセスしている県で絞り込んで表示しています。
a-blog cmsでは、検索窓や、URLコンテキストでのkeywordを使った検索、モジュールIDの設定でも検索ワードを指定したりと、検索機能に対応しております。この時に検索対象となるテキストデータをフルテキスト(fulltext)と呼んでいます。
検索時には、フルテキストのデータを対象にしますので、もしもDBのエントリータイトルなどを直接変更しますと、エントリータイトルと、フルテキストの中のエントリータイトルが違う状態になり、検索時のヒットに影響がでますので注意が必要です。
次に、フルテキストのデータとして扱われる項目についてまとめます。
※この記事の内容は2015年11月に開催された a-blog cms Training Camp 2015 Autumn の中で行われたグローバル変数の作り方講座の内容です。
グローバル変数は、テンプレートに記述することで、表示中のページが持つ情報を出力します。テンプレート上、モジュールやインクルードよりも先に処理されます。
利用できるグローバル変数の一覧