メール不達のお知らせ

2018年11月1日まで、本サイトのお問い合わせメールが機能しておらず、メールを受け取ることができませんでした。この期間内にお問い合わせ頂いた方は、大変お手数ではございますが、再度お問い合わせページからご連絡ください。

Joomla! Tips

カスタム404ページをメインコンテンツ部分に表示する

tips_custom404

既に削除されたページ、存在しないURLが指定された時に表示するのが404ページです。Joomla!の場合、標準で次の様なページが表示されます。
tips_custom404_00

このままでも問題はありませんが、サイトのデザインを反映しつつ404ページが表示できたら、他のページへ訪問者を誘導する事ができます。ここでは404ページをサイトの中へ組み込み、さらに検索ボックスも合わせて表示する方法を説明します。

検索モジュールの準備

404ページへ埋め込む検索モジュールを用意します。検索モジュールを作成(またはコピー)し、「有効」を「はい」に、「配置」にはテンプレートに存在しないポジション名を入力します。ここでは「404search」にしました。
tips_custom404_search

404ページの作成

通常の記事を作成するように404ページを作成します。WYSIWYGエディタを使用して自由に編集して構いません。先ほど作成した検索モジュールを読み込むため、loadpositionタグを文末に記述します。セクションを「未分類」、カテゴリを「未分類」にして保存して下さい。
tips_custom404_01

404ページへリンクするメニューアイテムの作成

上記で作成した404記事へリンクするためのメニューアイテムを作成します。このメニューアイテムは非公開にするため、作成するメニューはどこでも構いません(例えばメインメニューなど)。

メニューアイテム作成画面から「新規」→「記事」→「スタンダード記事レイアウト」を選択します。
tips_custom404_02

タイトルやエイリアス(別名)を入力し、公開を「いいえ」に設定します。
tips_custom404_02_1

先ほど作成した記事を選択したら「適用」をクリックします。
tips_custom404_03

次に「リンク」の欄に表示されたURLをコピーします。このURLは後で必要になりますので、メモ帳などに貼り付けておくと良いでしょう。
tips_custom404_04

エラーページのオーバーライド

Joomla!では存在しないURLが指定された場合、/templates/system/error.phpファイルを返す仕組みになっています。このファイルをテンプレート側でオーバーライドして利用します。

/templates/system/error.phpを使用中のテンプレートディレクトリ直下にコピーして下さい(/templates/テンプレート名/error.phpとなるように)。

error.phpの編集

2009/12/01追記 以前記載していたfile_get_contents関数を使用した方法は、PHP設定のallow_url_fopenがONでないと使用できません。またallow_url_fopenをONにした場合セキュリティ上のリスクがあるため、cURL関数を使用した方法に修正しました。問題があればご指摘ください。

コピーしたerror.phpファイルを開き、13行目付近を次の様に編集します。

編集前

 

defined( '_JEXEC' ) or die( 'Restricted access' );

?>

 

編集後(2009/12/01修正)

 

defined( '_JEXEC' ) or die( 'Restricted access' );
if (($this->error->code) == '404') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, JURI::root().'上記でコピーしたURL');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
} else {
?>

 

「上記でコピーしたURL」の部分は、先ほどコピーしておいたURLと置き換えて下さい。

また最終行へ以下の様に追加します。

編集前

 

</body>
</html>

 

編集後

 

</body>
</html>
}
?>

 

ちなみに・・・

  • SEFコンポーネント(sh404sef、JoomSEF、AceSEFなど)を利用すると、こんな面倒な事をしなくても同じ事ができます。
  • FirefoxのLive HTTP Headersでステータスコードを確認すると、正しく404を返しているようですがその後の文字列が文字化けしています。なんでだろう?問題はなさそうなので様子見です。
【Joomla!が使えるレンタルサーバー】
 

タグ: カスタマイズ

自分用のリンク

ちょくちょくアクセスするページ。自分用です。

お仕事募集

Joomla!に関するお仕事の依頼、エクステンションの翻訳、トラブルシューティングなどございましたら、こちらからお問い合わせください。