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>
これでほぼ自動で遷移予告ページに対応することができました。
使用したモディファイア、タグについては以下のドキュメントを参照してください。
コメントを投稿する