備忘録:MTIfの比較対象に変数は使えない
あるカテゴリ以下のサブカテゴリーリストを出力したいと思い
こんな感じで組んだ。
<ul>
<MTTopLevelCategories>
<MTSetVarBlock name="parent">
<MTCategoryLabel trim_to="3">
</MTSetVarBlock>
<MTHasSubCategories>
<MTIf name="parent" eq="000">
<MTSubCategories>
<li>
<a href="<MTCategoryArchiveLink>">
<MTCategoryLabel cutbefore="_"></a>
</li>
</MTSubCategories>
</MTIf>
</MTHasSubCategories>
</MTTopLevelCategories>
</ul>
トップカテゴリから全カテゴリーを参照しつつカテゴリ名先頭3文字を取得し、サブカテゴリーがある場合に、取得した文字列が「000」かを判別する。「000」の場合はサブカテゴリー一覧を出す、という処理。
(なぜかTopLevelCategoriesを使うとSubCatsIsFirstで正常に出力されないので<ul>はベタ書き)
で、
ここのeq="000"を変数にすりゃモジュール化してウハウハじゃね?と思ったので
<MTIf name="parent" eq="000">
こんな感じで試してみた。
<MTSetVar name="catNum" value="000">
〜上記同様〜
<MTIf name="parent" eq="catNum">
〜上記同様〜
読み通りなら前者と同じ結果が返ってくるはずだったのだけれど、結果は何も出力されず。つまりエラー。
参照方法が悪かっただけで、下記のように変数名文頭に「$」を付けることで参照可能。
<MTSetVar name="catNum" value="000">
〜上記同様〜
<MTIf name="parent" eq="$catNum">
〜上記同様〜
<MTSetVarBlock>が面白いのでやたらに使ってたけど、単純に<MTIfCategory>使えばもっと短くなった。嫌いなので使わなすぎて存在忘れてた。