PowerCMS Xのタグの基本的な記法について

こんにちは。エンジニアのmasuzakaです。
PowerCMS Xのタグの基本的な記法について紹介します。
PowerCMS Xをこれから使い始める方の参考になれば幸いです。

目次
・変数宣言
・条件分岐
・繰り返し処理
・モジュール化(コンポーネント化)

変数宣言

まずは変数宣言です。
ファンクションタグでの変数宣言とブロックタグでの変数宣言があります。
ブロックタグでまとめて変数宣言する方法がおすすめです。
変数名と値が見やすいですし、変数も追加が後からしやすいです。

・ブロックタグでの変数宣言

<mt:setvars>
title=マイロプス
category=PowerCMS X
</mt:setvars>

・ファンクションタグでの変数宣言

<mt:setvar name="category" value="PowerCMS X">
<mt:setvar name="title" value="マイロプス">

ちなみに変数宣言した内容は下記のように書くことで出力することができます。

<mt:var name="category">
<mt:var name="title">

条件分岐

次は条件分岐です。条件タグと呼ばれているようです。
特定の文字列や数値同士を比較して分岐させたい時、私の場合は下記のように書いています。タグ属性のeqやneを使って分岐するのが私の好みの書き方です。

・通常の分岐

<!-- usernameがjohnの場合hogeを出力 -->
<mt:if name="username" eq="john">
 <div>hoge</div>
</mt:if>

・否定系

<!-- usernameがjohnではない場合hogeを出力 -->
<mt:if name="username" ne="john">
 <div>hoge</div>
</mt:if>

・elseif、elseで分岐

elseif-elseも同様にタグ属性のeqやneを使って分岐を設定します。

<!-- usernameがjohnの場合hoge1を出力 -->
<mt:if name="username" eq="john">
 <div>hoge1</div>
<!-- usernameがharryの場合hoge2を出力 -->
<mt:elseif name="username" eq="harry">
 <div>hoge2</div>
<!-- usernameがjohnでもharryでもない場合hoge3を出力 -->
<mt:else>
 <div>hoge3</div>
</mt:if>

・数値の比較

数値の大小で分岐させたい時は下記のように設定します。

<!-- idが100より大きい場合hogeを出力 -->
<mt:if name="id" gt="100">
 <div>hoge</div>
</mt:if>

<!-- idが100以上の場合hogeを出力 -->
<mt:if name="id" ge="100">
 <div>hoge</div>
</mt:if>

<!-- idが100未満の場合hogeを出力 -->
<mt:if name="id" lt="100">
 <div>hoge</div>
</mt:if>

<!-- idが100以下の場合hogeを出力 -->
<mt:if name="id" le="100">
 <div>hoge</div>
</mt:if>

少し複雑な条件を設定したい場合は下記のように設定します。
※AND条件だけはスマートな書き方ではないので、いい書き方があれば教えていただきたいです。

・OR条件

<!--usernameが「john」または「harry」の場合 -->
<mt:if name="username" match="/^john$|^harry$/">
 <div>hoge</div>
</mt:if>

<!--usernameにjohnまたはharryを含む場合 -->
<mt:if name="username" match="john|harry">
 <div>hoge</div>
</mt:if>

<!--usernameにjohnまたはharryを含む場合 -->
<mt:if name="username" match="john|harry">
 <div>hoge</div>
</mt:if>
<!--※この場合、usernameがjohnnyの場合でも<div>hoge</div>が出力されます。 -->

・AND条件

<!--flg1とflg2、flg3が1の場合 -->
<mt:if name="flg1" eq="1">
<mt:if name="flg2" eq="1">
<mt:if name="flg3" eq="1">
 <div>hoge</div>
</mt:if>
</mt:if>
</mt:if>

繰り返し処理

次は繰り返し処理です。
モデル内のオブジェクトを出力するブロックタグをよく使います。
その際、繰り返し処理で必要なオブジェクトのみを出力するために、フィルタリングを設定します。
※ここではニュースを管理する下記のような構造をしたnewsモデルを作成しているという前提で説明します。
名前-ラベル-タイプ
id-ID-数値
title-Title-テキスト(255)

・カラムの値によるフィルタ

<!--ニュースを管理するnewsモデルのtitleカラムの値が「マイロプス」のオブジェクトのみを出力する -->
<mt:newses title="マイロプス">
<newsモデルのファンクションタグを使って出力>
</mt:newses>

余談ですが、PowerCMS Xが提供するタグだけで条件の絞り込みがうまくいかない時は、
タグ内部でphpが使えるタグを使いSQLでDBから直接データを取得しechoで表示する方法があります。
PowerCMS Xが提供するタグではどうしようもなくなった時は検討してみてください。

<mt:phpstart /><!--:phpの開始タグを出力 -->
<mt:phpend /><!--:phpの終了タグを出力 -->

・参考記事
https://powercmsx.jp/about/class_pado.html

モジュール化(コンポーネント化)

最後はモジュール化したビューを呼び出す書き方です。
クラスに「モジュール」を設定したモジュール用のビューを作成します。

PowerCMS Xモジュール化説明用画像

その後、先ほど作成したビューを別のビューで下記のように呼び出すことができます。

<mt:include module="モジュール用のビューの名前">

同じ処理はまとめる方が後々楽なので、積極的に使っていきたいですね。

以上です。最後まで読んでいただきありがとうございます。

Masuzaka

エンジニア

埼玉県出身。
書店の孫。
サウナは週3回。

関連記事

お仕事のご相談、採用についてなど、お気軽にお問い合わせください。