PowerCMSはset_loopモディファイアで複数文字を区切り文字として利用できる
「set_loop」というグローバルモディファイアがあり、テンプレート変数に指定した文字列を区切り文字を指定して分割し、配列に入れてくれる。
set_loopモディファイア
https://www.powercms.jp/products/document/modifiers/set_loop.html
似たもので「MTSplitVars」タグがあるが、これはDynamicMTMLでのみサポートされている。
(ただ実際の動作では静的生成でも使える。サポート外なので注意。)
MTSplitVars
https://www.powercms.jp/products/document/template-tags/splitvars.html
本題に戻り、区切り文字はおそらくカンマ「,」が使われる事が多いが、では「<br/></br/>」など複数文字列はどうか。
末尾に複数改行のある1行テキストをpタグに変換して出力する試行を以降の前提と試行内容で行い、結果を確認する。
前提
- スニペット型のカスタムフィールドにてtextareaタグを設ける。
- textareaタグの入力内容は、出力を行うCMSテンプレート上で、変数「_txt」より取得できる。
施工内容
スニペットのtextareaには、次のような内容でテキストを入力する。
テストA
テストテストテストB
テストC
出力側のテンプレートでコードを次のように組み、出力結果を確認する。
<mt:var name="_txt" nl2br="xhtml" set_loop="hash__txt","<br /><br />" />
<mt:loop name="hash__txt">
<p><mt:var name="__value__" /></p>
</mt:loop>
結果
次のような出力となった。
<p>テストA</p>
<p>テストテストテストB<br />テストC</p>
処理の分析
処理の流れを見ると、まず、変数_txtには、nl2br="xhtml"モディファイアの処理がかかり、次のように変換される。
テストA<br /><br />テストテストテストB<br />テストC
「テストA」と「テストテストテストB」の間には改行が2つ入ってたので、brタグが2つ入ってる。
これにset_loopモディファイアが適用され、次のように分割される。
要素1:テストA
要素2:テストテストテストB<br />テストC
これをmt:loopタグで出力すると、先述の結果が得られる。
結論
以上より、set_loopモディファイアは区切り文字に複数文字列を利用可能と言える。
(ちなみに、MTSplitVarsタグの同様に区切り文字に複数文字列を利用可能。)