変数の命名規則を策定する、変数を定義する場所を策定する等、これまでにも様々な案が議論されてきたかと思います。ただ、関係者に周知徹底し確実に遵守してもらうのはなかなか難しいもので、複数人で作業していると一瞬にしてルールが破られてしまうこともあります。ESLintやStylelintのようなLinter(ソースコードの問題点を指摘する静的解析ツール)があれば自動的に問題点を抽出することができますが、現状PowerCMS XのテンプレートをチェックできるLinterは存在しません。
まずは分かりやすい変数名にする、そしてlet
モディファイア・MTLet
タグで変数の局所化(ローカル変数化)を進め、グローバル変数を削減するのが良いのではないかと考えます。(ただこの案もテンプレートの書き手次第になってしまうのですが…)
<mt:block>
<mt:let file_name="test" />
((<mt:var name="file_name" />)) <!-- testが表示される -->
</mt:block>
((<mt:var name="file_name" />)) <!-- 何も表示されない -->
<mt:setvar name="page_permalink" value="test.pdf" /> <!-- page_permalinkにtest.pdfをセット -->
<div>((<mt:var name="page_permalink" />))</div> <!-- test.pdfが表示される -->
<mt:entries id="4308">
<mt:entrypermalink let="page_permalink" /> <!-- page_permalinkにhttps://powercmsx.localhost/archive/test.htmlをセット -->
<mt:if name="page_permalink" match="/\.html$/">
<div>HTMLです。</div>
<div>((<mt:var name="page_permalink" />))</div> <!-- if文の中に入りhttps://powercmsx.localhost/archive/test.htmlが表示される -->
</mt:if>
</mt:entries>
<div>((<mt:var name="page_permalink" />))</div> <!-- test.pdfが表示される -->
ブロックタグを入れ子にした時の挙動も理解しておくと良いでしょう。
<mt:entries id="4308">
<mt:entrypermalink let="page_permalink" /> <!-- page_permalinkにhttps://powercmsx.localhost/archive/test.htmlをセット -->
<mt:entryassets>
<div>((<mt:var name="page_permalink" />))</div> <!-- https://powercmsx.localhost/archive/test.htmlが表示される -->
<mt:assetfileurl let="asset_url" /> <!-- asset_urlにhttps://powercmsx.localhost/assets/test.webpをセット -->
<div>((<mt:var name="asset_url" />))</div> <!-- https://powercmsx.localhost/assets/test.webpが表示される -->
</mt:entryassets>
<div>((<mt:var name="asset_url" />))</div> <!-- 何も表示されない -->
</mt:entries>