ECCUBEのカスタマイズで特に問題になった開発情報を公開します。
ECCUBEは、国内で最も使用されているECサイトです。誰でも導入が簡単にできますが、いろいろな問題、課題があり時には高度なスキルを求められる場合があり、 本ページで私どもで経験したことをここでご紹介いたします。
全面クローズドサイトに簡単に変更する(Ver2.11)
/data/class/pages/LC_Page.php 111行目に以下のソースに変更することで実現します。
function process() {
// ログインチェック
$objCustomer = new SC_Customer_Ex();
// ログインしていない場合は必ずログインページを表示する
if($objCustomer->isLoginSuccess(true) === false) {
if($_SERVER[‘PHP_SELF’] != ROOT_URLPATH.”login.php”){
SC_Response_Ex::sendRedirect(HTTPS_URL.’login.php’);
}
}
}
1点注意がありますが、login.phpだけは転送を除外しないと無限ループ処理が発生しますので、十分注意を。
静的なブロックテンプレートを動的にする(Ver2.12以下)
動的なブロックを設定するには…
1)管理画面>デザイン管理>PC>ブロック設定にてとりあえず静的ブロックを設定する
(例:ranking.tpl)
2)以下のPHPファイルを作成してFTPでアップする。
/html/frontparts/bloc/ranking.php
require_once realpath(dirname(__FILE__)) . ‘/../../require.php’;
require_once CLASS_EX_REALDIR .
’page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Ranking_Ex.php’;
$objPage = new LC_Page_FrontParts_BLoc_Ranking_Ex();
$objPage->blocItems = $params[‘items’];
register_shutdown_function(array($objPage, “destroy”));
$objPage->init();
$objPage->process();
/data/class_extends/page_extends/frontparts/bloc/
LC_Page_FrontParts_Bloc_Ranking_Ex.php
require_once CLASS_REALDIR .
’pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Ranking.php’;
class LC_Page_FrontParts_Bloc_Ranking_Ex extends LC_Page_FrontParts_Bloc_Ranking {
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
parent::process();
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
}
/data/class/pages/frontparts/bloc/
LC_Page_FrontParts_Bloc_Ranking.php
require_once CLASS_REALDIR .
’pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php’;
class LC_Page_FrontParts_Bloc_Recommend extends LC_Page_FrontParts_Bloc {
/**
* Page を初期化する.
*
* @return void
*/
function init() {
parent::init();
}
/**
* Page のプロセス.
*
* @return void
*/
function process() {
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
function action() {
// 基本情報を渡す
$objSiteInfo = SC_Helper_DB_Ex::sfGetBasisData();
$this->arrInfo = $objSiteInfo->data;
//おすすめ商品表示
$this->arrBestProducts = $this->lfGetRanking();
}
/**
* デストラクタ.
*
* @return void
*/
function destroy() {
parent::destroy();
}
/**
* おすすめ商品検索.
*
* @return array $arrBestProducts 検索結果配列
*/
function lfGetRanking(){
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objProduct = new SC_Product_Ex();
// おすすめ商品取得
$col = ‘best_id, category_id, rank, product_id, title, comment, create_date, update_date’;
$table = ‘dtb_best_products’;
$where = ‘del_flg = 0’;
$objQuery->setOrder(‘rank’);
$objQuery->setLimit(RECOMMEND_NUM);
$arrBestProducts = $objQuery->select($col, $table, $where);
$objQuery =& SC_Query_Ex::getSingletonInstance();
if (count($arrBestProducts) > 0) {
// 商品一覧を取得
// where条件生成&セット
$arrProductId = array();
$where = ‘product_id IN (‘;
foreach ($arrBestProducts as $key => $val) {
$arrProductId[] = $val[‘product_id’];
}
// 取得
$arrTmp = $objProduct->getListByProductIds($objQuery, $arrProductId);
foreach ($arrTmp as $key => $arrRow) {
$arrProductList[$arrRow[‘product_id’]] = $arrRow;
}
// おすすめ商品情報にマージ
foreach (array_keys($arrBestProducts) as $key) {
$arrRow =& $arrBestProducts[$key];
if (isset($arrProductList[$arrRow[‘product_id’]])) {
$arrRow = array_merge($arrRow, $arrProductList[$arrRow[‘product_id’]]);
} else {
// 削除済み商品は除外
unset($arrBestProducts[$key]);
}
}
}
return $arrBestProducts;
}
}
3)テーブルdtb_blocに修正を加える。
ranking.phpが設定されているデータについて、
php_pathが「NULL」⇒「frontparts/bloc/ranking.php」に変更する。
deletable_flgが「1」⇒「0」に変更する。
ECCUBEについての問い合わせはこちらです。