PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > テンプレート作成Tips > DynamicMTMLを使用して遷移予告ページを実装する

2018年08月03日

DynamicMTMLを使用して遷移予告ページを実装する

自サイト内から外部のサイトへリンクする際に、リンク先は自サイトではないということを案内するために以下のような遷移予告ページを挟む場合があります。この遷移予告ページを手動で運用すると手間がかかり意外と大変です。PowerCMSには遷移予告ページを実現するための為の直接の機能はありませんが、DynamicMTMLとregex_replaceモディファイアとを組み合わせることで実現することができますのでその方法をご紹介します。

遷移予告ページの作成

まず、DynamicMTMLを使用して遷移予告ページを作成します。このページはパラメータ「url」に指定されたURLへのリンクを表示するページとして実装します。
インデックステンプレートを追加し、出力ファイル名を「/link.html」、公開ステータスを「ダイナミック」にします。URLのパラメータはMTQueryタグを使用することで取得することができますので、このタグを使用して以下のようにテンプレート記述します。

<MTDynamicMTML>
<p>これより先は当ウェブサイトではありません。<br>
外部のウェブサイトに移動します。</p>
<p><a href="<mt:Query key="url" escape="html">"><mt:Query key="url" escape="html"> へ移動する</a></p>
</MTDynamicMTML>

DynamicMTMLを有効にし、「/link.html?url=http://exapmle.com」にアクセスすると以下のように表示されます。

[表示例]

また、MTEntriesタグではカスタムフィールドの値を使用して絞り込むことができる為、サイト名などの情報を記事として登録しておくことで追加の情報を遷移予告ページに表示することもできます。まずURLを入力する項目としてベースネーム「entry_link_url」のカスタムフィールドを作成します。そして以下のようにMTEntriesタグにfield:entry_link_urlモディファイアを指定することで該当する記事の内容を参照することができます。

<MTDynamicMTML>
<mt:Query key="url" setvar="url">

<mt:Entries field:entry_link_url="$url" limit="1">
<p>これより先は当ウェブサイトではありません。<br>
「<mt:EntryTitle escape="html">」に移動します。</p>
<p><a href="<mt:Var name="url" escape="html">"><mt:Var name="url" escape="html"> へ移動する</a></p>

<mt:Ignore>※該当するURLがなかった場合</mt:Ignore>
<mt:Else>
<p><a href="<mt:Var name="url" escape="html">"><mt:Var name="url" escape="html"> へ移動する</a></p>
</mt:Entries>
</MTDynamicMTML>

タイトルに「exapmle.com」を、カスタムフィールド「entry_link_url」に「http://exapmle.com」を記入した記事を作成し、先程と同様に「/link.html?url=http://exapmle.com」にアクセスすると、以下のように記事タイトルが表示されるようになります。

[表示例]

リンクの置き換え

次にページ内のリンクを遷移予告ページへのリンクに置き換えます。regex_replaceモディファイアを使用してリンクを外部遷移予告ページへのリンクに置き換えます。たとえば記事本文内のリンクを置き換えるには以下の様にします。

<mt:EntryBody regex_replace='/\shref\s*=\s*"([^"\s]+)"/g',' href="/link.html?url=$1"'>

カスタムフィールドでリンクを表示しているなど本文以外の部分も置換を行いたい場合は、対象となる部分をmt:Forタグでくくり、そこにregex_replaceモディファイアを指定します。

<mt:For regex_replace='/\shref\s*=\s*"([^"\s]+)"/g',' href="/link.html?url=$1"'>
   ...
</mt:For>

これでほぼ自動で遷移予告ページに対応することができました。

使用したモディファイア、タグについては以下のドキュメントを参照してください。


カテゴリー
DynamicMTML
サイト制作全般
テンプレート作成Tips
技術情報
投稿者
Sakai Ryuji

Recent Entries