【Movable Type】MTの書き出すURLをルートパスにする

トライムではMovable TypeやWordPressを使ったサイト制作を沢山お受けしています。
ここ数年、WordPressを使う機会が増えた一方、MTを使う機会は減ってきてはいますが、それでもMTを使う際の大きな理由は、やはり生成されるファイルが静的であることです。

この特長の優れたところはMTのコアファイルが公開サーバーに無くても良いため、ステージング環境を簡単に作れるところです。WordPressだとステージング環境を作成するのは不可能ではないものの、そこはMTの方が得意です。

ただし、URLを書き出す下記のようなタグ、

<$mt:EntryPermalink$>
<$mt:CategoryArchiveLink$>
<$mt:ArchiveLink$>
<$mt:AuthorAuthIconURL$>

などなど(他にもたくさんありますが)は、そのまま公開してしまうとステージング環境のURLになってしまいます。

これは「Abs2Rel」というプラグインを使うことで簡単に解決できます。
しかしセキュリティが厳しい案件で、プラグインを自由にインストールできなかったりする場合もあり、難しいことではないので、うちではプラグインを使わずに対応してます。

プラグインを使わずにルートパス化する

手順1 モジュールを作る

まずは、下記の内容でモジュールを作ります。
名前はお好みですが、ここでは「vars」としました。
このモジュールはシステムに作るのが一番ですが、場合によってはウェブサイトでも大丈夫です。

<mt:SetVars name="site_info">
  site_url=<$mt:WebsiteURL$>
  site_path=<$mt:WebsiteRelativeURL$>
</mt:SetVars>

「site_url」という変数にMTで設定されているウェブサイトURLが入ります。
「site_path」にはルートパスが入ります。イメージとしては下記のような感じです。

<!-- ルート直下がウェブサイトURLの場合 -->
site_url = http://example.com/  
site_path = /

<!-- サブディレクトリの場合 -->
site_url = http://example.com/example/  
site_path = /example/

手順2 モジュールを読み込む

続いて、作成したモジュールを使用するテンプレートで読み込みます。

<!-- システムにモジュールを作った場合 -->
<$mt:Include module="vars"$>

<!-- ウェブサイトにモジュールを作った場合 -->
<$mt:Include module="vars" parent="1"$>

手順3 MTタグにreplaceモディファイアを追記

あとは、replaceモディファイアを使い下記のように記述すればOKです。

<!-- 通常のタグ -->
<$mt:EntryPermalink$>

<!-- 下記のように変更 -->
<$mt:EntryPermalink replace="$site_url","$site_path"$>

まとめ

タグのひとつひとつに設定していかなくてはならないので、少し手間ではありますが、それは「Abs2Rel」でも同じなので、トライムではこのやり方を採用しています。

最後に書き出されたファイルをエディタで一括検索して見落としの無いようにしてください。

PowerCMSやMTCMSにはステージング運用に便利な機能があり、このような手間を掛けずに済むのですが、コスト面などで使えないケースも多いです。
そんな時にこの方法が役に立つと思います。

トフはシックス・アパートの公式キャラクターです。CC BY-NC-SA 4.0 の下でライセンスされており、オリジナルは シックス・アパートのウェブサイトで入手可能です。

Writer

ko

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Page Topへ