[EC-CUBE カスタマイズ日誌] 第 3 回 まずは EC-CUBE の全体像を把握しよう!(2)

No Photo

こんにちは、inoueです。『EC-CUBE カスタマイズ日誌』の3回目、 EC-CUBE の全体像の残り、「設定ファイル」と「DB構成」についてお話します。

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の紹介に入ります。ご期待ください!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ