2021/05/10

MovableTypeのウェブページでルート階層を相対参照するタグ

どこかで既出だろうけど、仕事中に必要に迫られて発見したので書いておく。

  • MTウェブサイト/ブログのルート階層と作業対象サイトのルート階層が同じ場合
    <MTParentFolders glue="./">.</MTParentFolders>./
  • MTウェブサイト/ブログのルート階層が作業対象サイトの第2階層である場合
    <MTParentFolders>../</MTParentFolders>../
    (第3階層以上のときは、最後の「../」の数を階層数-1になるよう増やしていけばよい)

大学のホームページなど、普段の新着記事はCMS上でメンテされていて、固定ページは年に1回程度、ローカルで確認をしながらやるような大きな修正(共通部分は据え置きでコンテンツのみ)が入るようなサイトの場合、サーバからFTPで落としてきたファイルのサイト内リンクが全部絶対パスだったり、スラッシュから始まるルート相対だったりするのがとても厄介。

MTParentFoldersを使ったこの記述を変数にセットして、ヘッダやフッタのモジュールでナビゲーションのリンクや外部CSS/JSファイル参照箇所に使うと、ダウンロードした静的ファイルがそのままローカルでも使えて大変便利。
リッチテキストで本文欄に画像を貼り込んでしまっている場合も、ウェブページのテンプレートでMTPageBodyにregex_replaceモディファイアを加えて置換すれば問題なし。その際、

<MTSetVars>
replaceUrl =/https://example.com/g
relativePath =<MTParentFolders glue="./">.</MTParentFolders>./
</MTSetVars>
<$MTPageBody regex_replace="$replaceUrl","$relativePath"$>

というように、置換対象に正規表現の「/~/g」をあらかじめ変数に含める。(regex_replace=""内には変数名と文字列を組み合わせて書けないため)
以上です。