エラーページのカスタマイズ

通常のEC-CUBEでは、存在しないURLに直接とんだ場合は、サーバのデフォルトの404ページが表示される。
これの対処としては、ページを新しく作成→.htaccessで404に作成したページを指定、というやり方が一般的(たぶん)。
参考:http://www.md-systems.net/case004/
ただしこれの場合、「http://www.abc.com/products/detail.php?product_id=」みたいな、存在しない商品IDを指定するエラーの時には、EC-CUBEが作成するエラーページが表示されるため、対応できない。
同じ文言のページを2回も作るのは面倒くさいし、何よりもEC-CUBEが吐き出すエラーページはヘッダーとフッターのみのデザインのため、統一感がなくなる。左カラムが表示されないから、ユーザの誘導もしにくいし。
ので、404のときもシステムのエラーページを表示させ、かつデザインを普通のやつにする。
参考:http://kaerucreate.com/wp/webd/ec-cube/160
まず、htaccessに以下を追加する。

ErrorDocument 404 /index.php?error=404

次に、data/class_extends/page_extends/LC_Page_Index_Ex.phpの42行目から始まる部分を

    function init()
    {
		if ($_GET['error'] == '404') {
			SC_Utils_Ex::sfDispSiteError(PRODUCT_NOT_FOUND);
		}
        parent::init();
    }

と書き換える。
このままだとデザインはやっぱりヘッダー・フッターのみなので、最後にdata/class/pages/error/LC_Page_Error.phpの59行目あたりからの部分

$this->tpl_mainpage = 'error.tpl';

のところを

// レイアウトデザインを取得
$device_type = SC_Display_Ex::detectDevice();
if($device_type == DEVICE_TYPE_PC){
	$layout = new SC_Helper_PageLayout_Ex();
	$layout->sfGetPageLayout($this, false, DEF_LAYOUT);
};
$this->tpl_mainpage = 'error.tpl';

と書き加える。
バイスタイプによる分岐を仕込まないと、スマートフォンで閲覧時にPC用のヘッダー・フッターが表示されるので、PC時には左カラム含むページレイアウトを、それ以外の端末の時にはデフォルト表示(ヘッダー・フッターのみ)という風に切り分けました。
たぶんこれでいいと思いますが、しばらく様子見。