PowerCMSはsel_loopモディファイアで複数文字を区切り文字として利用できる

投稿日:

「setl_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タグの同様に区切り文字に複数文字列を利用可能。)

関連するタグ

PowerCMS 5.13