オリジナルのエラーページ

イントロダクション

【2009-11-06 追記】
勘違いがあったので全面書き直し

MTWriteToFileプラグインでフォルダアーカイブ特定のフォルダをフィルタリングという記事の続きです。

サーバーの出力するエラーページ(404.htmlなど)ではあまりにも淋しいので、検索窓や問い合わせ先が書いてあるオリジナルのエラーページをウェブページで作ることになりました。

(1)errorフォルダ(/error)を作ります。

(2)ここにウェブページでエラーページを作ります。

特定のフォルダをフィルタリングという記事のとおり、errorフォルダアーカイブは作成されません。
エラーページにはフォルダーアーカイブはいりませんから、errorフォルダにフィルタリングしたわけです。

(3).htaccessファイルに、以下の記述を加えてアップロードして完成です。

ErrorDocument 401 /error/401.html
ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html

次の課題

ところがいくつかのサーバーでは、エラーページがrootにいないと出力されませんでした。その場合、rootフォルダーに直接エラーページを作ることにします。また、.htaccessファイルも以下のようになります。

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

さらに、サードバーには目次やらなんやらと、エラーページには要らないウイジットがありますが、フォルダーでフィルタリングが出来ないので、カスタムフィールド(名前:目次に表示、ベースネーム:show_list、テンプレートタグpagedata_show_list、種類:チェックボックス)を作ります。エラーページの編集画面で出来たチェックボックスにチェックを入れます。

次にサイドバーのところで、これを利用して2段階のフィルタリングをかけます。

<mt:SetVarBlock name="showlist"><mt:pagedata_show_list></mt:SetVarBlock>
<mt:If name="showlist" eq="1">

でエラーページ以外のウェブページに目次を出力させます。カスタムフィールドの値が1(チエックボックスにチェックした状態)を上記のコードで取得してフルタリングします。

さらに、そのままではウェブページの目次にエラーページも出力されて並んでしまうので、

<mt:Pages field:show_list="1" lastn="10">
<li><a href="<$mt:PagePermalink$>"><$mt:PageTitle encode_html="1"$></a></li>
</mt:Pages>

とMTPagesタグにfield:カスタムフィールドのベースネームを使ったフィルタリングをします。

<mt:If name="page_template">
<mt:SetVarBlock name="showlist"><mt:pagedata_show_list></mt:SetVarBlock>
<mt:If name="showlist" eq="1">
<h2>目次</h2>
<div class="widget-content">
<ul>
<mt:Pages field:show_list="1" lastn="10">
<li><a href="<$mt:PagePermalink$>"><$mt:PageTitle encode_html="1"$></a></li>
</mt:Pages>
</ul>
</div>
<$mt:Include module="sh_ダウンロード"$>
</mt:If>
<mt:ElseIf name="entry_template">
以下続く...

これで、エラーページ以外には目次が出力されます。ポイントはカスタムフィールドのベースネームとテンプレートタグの使い分けです。