ECCUBEのカスタマイズ開発情報(その1)


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についての問い合わせはこちらです。

ECCUBEトップにもどる