※これはPowerCMS X Advent Calendar 2024の19日目の記事です。
先日はMovable Typeでjson形式テキストから配列を作成してみました。
今回は同様のことをPowerCMS Xでやってみた場合をご紹介します。
「SET_記事データ」という配列に、記事タイトルとURLを格納して、その配列を「ARY_記事一覧」の値とします。
※以下サンプルです。実際はもっとフィルタリングを用意すると思いますがサンプルなので簡易的にしてあります。
<mt:Entries lastn="10"> <mt:SetVarBlock name="SET_KEY"><$mt:EntryDate format="YmdHis"$>_<$mt:EntryID zero_pad="8"$></mt:SetVarBlock> <$mt:Unset name="SET_記事データ"$> <mt:SetHashVar name="SET_記事データ"> <mt:SetVarBlock name="SET_タイトル"><$mt:EntryTitle remove_html$></mt:SetVarBlock> <mt:SetVarBlock name="SET_リンクURL"><$mt:EntryPermalink relative$></mt:SetVarBlock> </mt:SetHashVar> <$mt:SetVar name="ARY_記事一覧" key="$SET_KEY" value="$SET_記事データ"$> </mt:Entries>
※ <$mt:Unset$>で、変数を初期化(未定義)しています。
├ SET_KEY | ├ SET_タイトル | └ SET_リンクURL └ SET_KEY ├ SET_タイトル └ SET_リンクURL
※配列の中身は、<$mt:VarDump name="ARY_記事一覧"$> で確認することができます。
「ARY_記事一覧」をloopで回して、値(value)を出力します。
配列の中の配列を出力する場合は、Loopの入れ子でも可能です。
今回は、階層が深くないので「__value__」に「key」を添えて直接出力しています。
<mt:Loop name="ARY_記事一覧" limit="5" sort_by="key reverse"> <div> <a href="<$mt:Var name="__value__" key="SET_リンクURL"$>"> <span><$mt:Var name="__value__" key="SET_タイトル"$></span> </a> </div> </mt:Loop>
※ <$mt:Var name="__value__" key="SET_リンクURL"$>は、<$mt:Var name="__value__[SET_リンクURL]"$>とも書けます。
変数「SET_記事一覧_base」に、json形式でソート用の番号、記事タイトルとURLを追記(append)していきます。
<mt:Entries lastn="10"> <mt:SetVarBlock name="SET_KEY"><$mt:EntryDate format="YmdHis"$>_<$mt:EntryID zero_pad="8"$></mt:SetVarBlock> <mt:SetVarBlock name="SET_記事一覧_base" append> <mt:Unless trim_space="3"> { "SET_番号":"<$mt:Var name="SET_KEY"$>", "SET_タイトル":"<$mt:EntryTitle remove_html encode_json$>", "SET_リンクURL":"<$mt:EntryPermalink relative encode_json$>" }, </mt:Unless> </mt:SetVarBlock> </mt:Entries>
※ <mt:Unless>は、<mt:Block>でも代用できます。
※ 「trim_space="3"」は、文字列の先頭および末尾にある空白と改行文字が削除されます。
作成した「SET_記事一覧_base」を整形します。最初と最後に[]を追加します。 さらに、最後の項目のカンマ対策で、中身なしの{}を追加します。
<mt:SetVarBlock name="SET_記事一覧_json"> [ <$mt:GetVar name="SET_記事一覧_base" regex_replace="'/,$/',''"$> ] </mt:SetVarBlock>
※ グローバルモディファイア「regex_replace」:正規表現置換で末尾のカンマを削除しています。
※ 文字列型の値を呼び出す場合は <mt:Var>ではなく、<mt:GetVar> を使ったほうが処理が速くなります。
[ { "SET_番号":"20241025000000_00000000" , "SET_タイトル":"タイトル" , "SET_リンクURL":"http://www"}, { "SET_番号":"20241025000000_00000000" , "SET_タイトル":"タイトル" , "SET_リンクURL":"http://www"}, { "SET_番号":"20241025000000_00000000" , "SET_タイトル":"タイトル" , "SET_リンクURL":"http://www"} ]
グローバルモディファイア「from_json」を使用して、作成したjson形式のテキストを配列に変換します。
<$mt:Var name="SET_記事一覧_json" from_json="ARY_記事一覧"$>
※ 逆に、配列をjson形式に変換するには、グローバルモディファイア「to_json」を使います。
03で配列に変換したので、通常の配列同様にLoopタグで出力します。
<mt:Loop name="ARY_記事一覧" sort_by="key"> <div> <a href="<$mt:Var name="SET_リンクURL"$>"> <span><$mt:Var name="SET_タイトル"$></span> </a> </div> </mt:Loop>
前回同様の感想になりますが、
json形式のテキストから配列に変換したほうが、途中の値のチェックがしやすいのでデバッグしやすいなと個人的には思いました。
そして、同じMTMLでもMovableType、PowerCMS、PowerCMS Xではタグや書き方が微妙に違うので、
その環境にあったベストなコードで構築していきましょう。
※タグリファレンスを見ていると、使ったことのないタグがまだたくさん。。。。勉強します!
MONSTER DIVEでは、PowerCMSをはじめ、Movable TypeやWordPressなど、CMSを活用したWebサイト構築のご相談、承っています。
お気軽お問い合わせください。