[EC-CUBE カスタマイズ日誌] 第 3 回 まずは EC-CUBE の全体像を把握しよう!(2)
EC-CUBE の各種設定ファイル
どの情報がのファイルに設定されているかを把握しておくと、カスタマイズの作業効率がアップすると思います。
おもだったものは次のとおりです。
data フォルダ内の設定ファイル
- data/install.php
- インストール画面からのインストールの際に生成される DB への接続情報等、最もコアな定数が設定されたファイルです。
<?php
define ('ECCUBE_INSTALL', 'ON');
define ('HTML_PATH', '/var/www/eccube-2.4.1/html/');
define ('SITE_URL', 'http://eccube.example.com/');
define ('SSL_URL', 'http://eccube.example.com/');
define ('URL_DIR', '/');
define ('DOMAIN_NAME', );
define ('DB_TYPE', 'mysql');
define ('DB_USER', 'eccube_db_user');
define ('DB_PASSWORD', 'PASSWORD');
define ('DB_SERVER', '127.0.0.1');
define ('DB_NAME', 'eccube_db');
define ('DB_PORT', );
define ('DATA_PATH', '/var/www/eccube-2.4.1/data/');
define ('MOBILE_HTML_PATH', HTML_PATH . 'mobile/');
define ('MOBILE_SITE_URL', SITE_URL . 'mobile/');
define ('MOBILE_SSL_URL', SSL_URL . 'mobile/');
define ('MOBILE_URL_DIR', URL_DIR . 'mobile/');
?>
- data/mtb_constants_init.php
- 管理画面 -> システム設定 -> パラメータ設定 のデフォルト初期値が記載されたファイルです。
- data/require_base.php
- ヘルパー等の部品をまとめて読み込むファイル。仮に新しいヘルパー等を作った場合はここで読み込むといいです。
<?php
$require_base_php_dir = realpath(dirname( __FILE__));
if (!defined("CLASS_PATH")) {
/** クラスパス */
define("CLASS_PATH", $require_base_php_dir . "/class/");
}
if (!defined("CLASS_EX_PATH")) {
/** クラスパス */
define("CLASS_EX_PATH", $require_base_php_dir . "/class_extends/");
}
if (!defined("CACHE_PATH")) {
/** キャッシュ生成ディレクトリ */
define("CACHE_PATH", $require_base_php_dir . "/cache/");
}
require_once(CLASS_EX_PATH . "SC_Initial_Ex.php");
// アプリケーション初期化処理
$objInit = new SC_Initial_Ex();
$objInit->init();
require_once($require_base_php_dir . "/include/module.inc");
require_once(CLASS_EX_PATH . "util_extends/GC_Utils_Ex.php");
require_once(CLASS_EX_PATH . "util_extends/SC_Utils_Ex.php");
require_once(CLASS_EX_PATH . "db_extends/SC_DB_MasterData_Ex.php");
require_once(CLASS_EX_PATH . "db_extends/SC_DB_DBFactory_Ex.php");
require_once(CLASS_PATH . "SC_View.php");
require_once(CLASS_PATH . "SC_DbConn.php");
require_once(CLASS_PATH . "SC_Session.php");
require_once(CLASS_PATH . "SC_Query.php");
require_once(CLASS_PATH . "SC_SelectSql.php");
require_once(CLASS_PATH . "SC_CheckError.php");
require_once(CLASS_PATH . "SC_PageNavi.php");
require_once(CLASS_PATH . "SC_Date.php");
require_once(CLASS_PATH . "SC_Image.php");
require_once(CLASS_PATH . "SC_UploadFile.php");
require_once(CLASS_PATH . "SC_SiteInfo.php");
require_once(CLASS_EX_PATH . "SC_SendMail_Ex.php");
require_once(CLASS_PATH . "SC_FormParam.php");
require_once(CLASS_PATH . "SC_CartSession.php");
require_once(CLASS_PATH . "SC_SiteSession.php");
require_once(CLASS_PATH . "SC_CampaignSession.php");
require_once(CLASS_PATH . "SC_Customer.php");
require_once(CLASS_PATH . "SC_CustomerList.php");
require_once(CLASS_PATH . "SC_Cookie.php");
require_once(CLASS_PATH . "SC_Pdf.php");
require_once(CLASS_PATH . "SC_MobileUserAgent.php");
require_once(CLASS_PATH . "SC_MobileEmoji.php");
require_once(CLASS_PATH . "SC_MobileImage.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_PageLayout_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_DB_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_Session_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_Mail_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_Mobile_Ex.php");
include_once($require_base_php_dir . "/require_plugin.php");
// セッションハンドラ開始
$objSession = new SC_Helper_Session_Ex();
// インストールチェック
SC_Utils_Ex::sfInitInstall();
// セッション初期化・開始
require_once CLASS_PATH . 'session/SC_SessionFactory.php';
$sessionFactory = SC_SessionFactory::getInstance();
$sessionFactory->initSession();
// 絵文字変換 (除去) フィルターを組み込む。
ob_start(array('SC_MobileEmoji', 'handler'));
?>
- data/require_plugin.php
- plugin を読み込む為のファイル。デフォルト未使用。
- data/class/SC_Initial.php
- 設定ファイルではないが、各種設定の初期化を行うファイル。
設定ファイルの読み込み、DB 接続情報の読み込み、php マルチバイト関連の設定等を行っている。 - data/class/pages/LC_Page.php
- こちらも設定ファイルではないが、data/class/pages/ 以下のファイルで共通して使用する機能をまとめたファイル。
cakePHP で言うところの appController.php のような存在になります。
html フォルダ内の設定ファイル
- html/define.php
- data ディレクトリ、 html ディレクトリの場所を定義したファイルです。
<?php
/** HTMLディレクトリからのDATAディレクトリの相対パス */
define("HTML2DATA_DIR", "/../data/");
/** DATA ディレクトリから HTML ディレクトリの相対パス */
define("DATA_DIR2HTML", "/../html/");
/*
* Local variables:
* coding: utf-8
* tab-width: 4
* c-basic-offset: 4
* c-hanging-comment-ender-p: nil
* End:
*/
?>
- html/require.php
- define.php や data/require_base.php を読み込むファイルです。
<?php
$require_php_dir = realpath(dirname( __FILE__));
require_once($require_php_dir . "/define.php");
require_once($require_php_dir . HTML2DATA_DIR . "require_base.php");
// 携帯端末の場合は mobile 以下へリダイレクトする。
if (SC_MobileUserAgent::isMobile()) {
$url = "";
if (SC_Utils_Ex::sfIsHTTPS()) {
$url = MOBILE_SSL_URL;
} else {
$url = MOBILE_SITE_URL;
}
if (preg_match('|^' . URL_DIR . '(.*)$|', $_SERVER['REQUEST_URI'], $matches)) {
$path = $matches[1];
} else {
$path = ;
}
header("Location: ". SC_Utils_Ex::sfRmDupSlash($url . $path));
exit;
}
?>
EC-CUBE の DB 構成
ここでは、基本的に MySQL について解説します。MySQL と PostgreSQL での違いについても説明します。
テーブルの種類
テーブルは、大きく 2 種類のテーブルに分かれています。
dtb_ から始まるテーブルは顧客情報や商品情報等の可変的なデータを扱います。
一方、mtb_ から始まるテーブルは性別や都道府県等のマスターデータを保持するのに使われます。
マスターデータテーブルは一部を除いて管理画面の『システム管理』->『パラメータ設定』から変更可能です。
商品情報まわりのデータ構成
ECサイトの要である商品情報および在庫情報がどのようにEC-CUBEで保持されるか、テーブルごとに簡単に説明します。
- 商品情報テーブル dtb_products
- 商品のマスタ情報は dtb_products に保存されます。
商品名、カテゴリ、ステータス、コメント、画像情報等、規格に左右されない情報がここに入ります。 - 商品とカテゴリの紐付け dtb_product_categories
- 商品と商品カテゴリを紐付けている。
- 規格の大項目の管理 dtb_class
- 規格の大項目(色、サイズなど)の情報が入ります。
- 規格の管理 dtb_classcategory
- 個々の規格を管理するテーブル。色で言えば赤、青、黄色、サイズで言えば S 、M 、L といった情報が入ります。
- 商品と規格の紐付け、及び規格毎の在庫数の管理 dtb_products_class
- EC-CUBEを運用していく上で重要なテーブルがここ。
『商品 A の色:赤の サイズ:S は在庫○○個、色:青の サイズ:M は在庫○○個』という情報が入ります。
MySQL と PostgreSQL の違い
EC-CUBE は MySQL と PostgreSQL の両方に対応しています。
最近は特にパフォーマンス面等で差異はなくなりつつあるらしいですが、元々 PostgreSQL で開発されていたという事もあり、PostgreSQL の方が『枯れて』いて細かなバグ等の可能性が低いとされています。
いずれにせよ動かす環境によって適宜選ぶのが良いでしょう。
データ取得処理のソースコードを追っていくと、PostgreSQL の場合 EC-CUBE は view を使用しているのがわかります。
MySQL も 5.0 系以降、view の作成が出来ますが、おそらく 4 系での使用を考えて EC-CUBE では使用されておりません。
代わりにプログラム中で配列に SQL 文を入れて仮想的な view のような事をしています。
今後のバージョンアップ時にこれらの仕様がどのように変わっていくか、興味あるところです。
次回からいよいよカスタマイズTipsの紹介に入ります。ご期待ください!