利用中のPowerCMS X環境で利用可能なタグの仕様をMTMLReferenceプラグインによるタグリファレンス自動生成機能で把握する
ハマったのでメモ。
PowerCMS Xでは、任意のモデル(イメージとして、DBのテーブルに相当するもの)を作成して、そこに登録したオブジェクトを、ダイナミック・タグ(=モデル固有のCMSテンプレートタグ)で出力できる機能がある。
踏まえて、
CMS環境によってはカスタマイズによってモデル設定が異なる場合が想定され、そうなると環境によって使えるダイナミック・タグもそれに準じて異なる。
この時、モデルのカラムの命名規則がしっかりしてないと、ダイナミック・タグの仕様把握に難儀する場合がある。
例えば、
CMSの標準モデルである「entry」は、リレーション型のカラム「categories」が存在するが、案件によるカスタマイズでモデルentryに、categoriesと同様のリレーション型のカラムとして「channel」を新設した場合を考える。
なお、カラム「channel」はモデル「channel」とリレーションする。
この時ビューの処理にて、mt:entriesタグのループの中で、entryオブジェクトに紐づくカラム「categories」「channel」にて選択した全項目を出力するときは、次のようなコードになる。
<pre>
<mt:entries>
<mt:entrycategories glue=","><mt:categorylabel /></mt:entrycategories>
<mt:entrychannel glue=","><mt:channellabel /></mt:entryentrychannel>
</mt:entries>
</pre>
上記のコードを見ると、
カラム「categories」の方は、「mt:entrycategories」とタグ名は複数系の名称だが、
カラム「channel」の方は、「mt:entrychannel」とタグ名は単数形の名称である。
特にMovable Type/PowerCMSになじんでいる人だと分かると思うが、Movale Type/PowerCMSにおいて、次のタグは、タグ名が単数形か複数系かで、取得出来る値が違う。
MTEntryCategory ->記事のプライマリカテゴリを1つだけ取得する。
MTEntryCategories->記事に紐づく全てのカテゴリを取得する。
上記のような命名規則になじんでいると、「mt:entrychannel」タグの動作が、entryに紐づくプライマリのchannelオブジェクトを1つリストアップする、という動作じゃないのかよ!という話になる。
そういった事を防ぐには、CMS標準のMTMLReferenceプラグインの利用が有用と思われる。
当該プラグインを有効化すると、CMS環境用に最適化されたタグリファレンスを確認でき、どのようななタグが対象環境で利用できるか、またタグがどういう仕様かが分かる。
※詳細は後述参考のURL参照。
参考
すべてのテンプレート・タグのリファレンスの参照(MTMLReferenceプラグイン) | PowerCMS X