EC-CUBE PCとスマートフォンのデータを統一
EC-CUBEのPCとスマートフォンの統一というか、デバイスをPCで固定などの方法はよく見つかったのですが、管理画面でのページ詳細を統一する方法は見つかりませんでした。
管理する人の立場だと、PCとスマートフォンの2箇所更新するのが面倒っていう話もあったし、レスポンシブにする場合とかに利用できるかなぁと思ったので、その方法をメモしておこうと考えました。
条件
- EC-CUBE 2.13.3で試した
- /data/class_extends/helper_extends/SC_Helper_PageLayout_Ex.phpに追記
拡張クラスでカスタマイズ
基本クラスをそのままカスタマイズしても良いでしょうけど、とりあえず拡張クラスに記述します。
「/data/class/helper/SC_Helper_PageLayout.php」ファイルを開き、「sfGetPageLayout」メソッドをまるまるコピーして、拡張クラス「/data/class_extends/helper_extends/SC_Helper_PageLayout_Ex.php」にペーストします。
そして3行ほどの処理を追加します。
以下コードの「2~8行目」と「25行目~28行目」を追加しました。
public function sfGetPageLayout(&$objPage, $preview = false, $url = '', $device_type_id = DEVICE_TYPE_PC) { // ここから追加 // 通常のデバイスIDを保存しておく $tmp_device_type_id = $device_type_id; // デバイスIDを一時的にPCに設定 $device_type_id = DEVICE_TYPE_PC; // ここまで追加 // URLを元にページ情報を取得 if ($preview === false) { $url = preg_replace('|^' . preg_quote(ROOT_URLPATH) . '|', '', $url); $arrPageData = $this->getPageProperties($device_type_id, null, 'url = ?', array($url)); // プレビューの場合は, プレビュー用のデータを取得 } else { $arrPageData = $this->getPageProperties($device_type_id, 0); } if (empty($arrPageData)) { trigger_error('ページ情報を取得できませんでした。', E_USER_WARNING); } $objPage->tpl_mainpage = $this->getTemplatePath($device_type_id) . $arrPageData[0]['filename'] . '.tpl'; // ここから追加 // 変更したデバイスIDを元に戻す $device_type_id = $tmp_device_type_id; // ここまで追加 if (!file_exists($objPage->tpl_mainpage)) { $msg = 'メイン部のテンプレートが存在しません。[' . $objPage->tpl_mainpage . ']'; trigger_error($msg, E_USER_WARNING); } $objPage->arrPageLayout =& $arrPageData[0]; if (strlen($objPage->arrPageLayout['author']) === 0) { $arrInfo = SC_Helper_DB_Ex::sfGetBasisData(); $objPage->arrPageLayout['author'] = $arrInfo['company_name']; } // ページタイトルを設定 if (SC_Utils_Ex::isBlank($objPage->tpl_title)) { $objPage->tpl_title = $objPage->arrPageLayout['page_name']; } // 該当ページのブロックを取得し, 配置する $masterData = new SC_DB_MasterData_Ex(); $arrTarget = $masterData->getMasterData('mtb_target'); $arrBlocs = $this->getBlocPositions($device_type_id, $objPage->arrPageLayout['page_id']); // 無効なプラグインのブロックを取り除く. $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); $arrBlocs = $objPlugin->getEnableBlocs($arrBlocs); // php_path, tpl_path が存在するものを, 各ターゲットに配置 foreach ($arrTarget as $target_id => $value) { foreach ($arrBlocs as $arrBloc) { if ($arrBloc['target_id'] != $target_id) { continue; } if (is_file($arrBloc['php_path']) || is_file($arrBloc['tpl_path'])) { $objPage->arrPageLayout[$arrTarget[$target_id]][] = $arrBloc; } else { $error = "ブロックが見つかりません\n" . 'tpl_path: ' . $arrBloc['tpl_path'] . "\n" . 'php_path: ' . $arrBloc['php_path']; trigger_error($error, E_USER_WARNING); } } } // カラム数を取得する $objPage->tpl_column_num = $this->getColumnNum($objPage->arrPageLayout); }
PCとスマートフォンのデータを統一
それぞれ処理は調整する必要はありますが、とりあえずこれで問題なさそうです。
管理画面、【デザイン管理】->【PC】->【ページ詳細設定】の内容をスマートフォンでも読み込めると思います。
もっともっとスマートな方法や、一般的な方法があったらぜひご教示ください。