アイネクシオWebサイトドクター

WebサイトやWebシステムの悩みを解決します

スキル

  • PHP
  • Python
  • C#
  • Java
  • Swift
  • Dart
  • HTML(CSS
  • Javascript
  • MySQL
  • PostgreSQL
  • Sqlite
  • Access
  • Redhat系 Linux
  • Debian系 Linux
  • CodeIgniter
  • fuelPHP
  • CakePHP
  • flutter

EC-CUBE PCとスマートフォンのデータを統一

2024/10/03 2015/07/13

Category:EC-CUBE, PHP, カスタマイズ Tag:, ,

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】->【ページ詳細設定】の内容をスマートフォンでも読み込めると思います。
もっともっとスマートな方法や、一般的な方法があったらぜひご教示ください。

アバター画像
プログラマーとして存在しています。 コーヒーとヌーノ・ベッテンコート、リッチーコッツェンが大好き。ボクシングも大好き。家族も音楽も好き。仕事もそれなりに好き。仕事ください。

https://lit.link/grooveline

執筆者:TAKAHIRO