ECCUBE2.13(2.17)* おすすめ商品の機能をもう1つ(簡易版)

標準では、管理画面の

コンテンツ管理 > おすすめ商品

の機能ですが、

専用項目として、もう1つほしかったので、
完コピすると、とってもめんどくさいので、
簡易的なものを作りました。

***

完全にコピーする方法は、こちらにおまかせするとして、

https://www.thank-u.net/blog/eccube/eccube_best5copy/

今回は、簡易版です。
なので、データベースは用いず、商品CDの配列を用います。
よって、
管理画面からの修正も、しません。

また、商品のコメントには、一覧-メインコメントを表示してます。

 

1. ブロックの追加

デザイン管理 > PC > ブロック より、新しいブロックを登録します。

テンプレートは、オリジナルの「おすすめ商品」より、
丸コピーし、

このままだと、オリジナルのおすすめを表示することになるので、
2箇所変更を加えます。

$arrBestProducts >> $arrBestProducts2

に、書き換えます。

ECCUBE2.13 おすすめブロックを増やす

 

2. データベースをいじる

phpMyAdminを開き、dtb_blockに、
上記で追加したブロックを探し、

php_pathに、「frontparts/bloc/recommend2.php」に変更します。

要は、先程追加した、ブロックは、
単にテンプレートなので、これに付随する専用のプログラムを作る
ということですね。

ECCUBE2.13 おすすめブロックを増やす

3. frontparts/bloc/recommend2.phpを作る

本来は、/data/class_exとかで、ゴリゴリするのですが、
無駄なので、1ファイルで。

オリジナルコードは、
/_data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc.php
から、丸コピーし、

/frontparts/block/reccomend.php
と、フュージョンしたものが、以下のコードで、
これを、/frontparts/block/reccomend2.phpとして、保存しています。

上記の通り、今回は、簡易版なので、
配列で必要な商品を列記しているのがキモですね。


<?php /* * This file is part of EC-CUBE * * Copyright(c) 2000-2014 LOCKON CO.,LTD. All Rights Reserved. * * http://www.lockon.co.jp/ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ require_once realpath(dirname(__FILE__)) . '/../../require.php'; //require_once CLASS_EX_REALDIR . 'page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Recommend_Ex.php'; require_once CLASS_EX_REALDIR . 'page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Ex.php'; /** * Recommend のページクラス. * * @package Page * @author EC-CUBE CO.,LTD. * @version $Id$ */ class LC_Page_FrontParts_Bloc_Recommend2 extends LC_Page_FrontParts_Bloc_Ex { /** * Page を初期化する. * * @return void */ public function init() { parent::init(); } /** * Page のプロセス. * * @return void */ public function process() { $this->action();
        $this->sendResponse();
    }

    /**
     * Page のアクション.
     *
     * @return void
     */
    public function action()
    {
        // 基本情報を渡す
        $objSiteInfo = SC_Helper_DB_Ex::sfGetBasisData();
        $this->arrInfo = $objSiteInfo->data;

        //おすすめ商品表示
        $this->arrBestProducts2 = $this->lfGetRanking();
    }

    /**
     * おすすめ商品検索.
     *
     * @return array $arrBestProducts 検索結果配列
     */
    public function lfGetRanking()
    {
//        $objRecommend = new SC_Helper_BestProducts_Ex();

        // おすすめ商品取得
//        $arrRecommends = $objRecommend->getList(RECOMMEND_NUM);
//var_dump3($arrRecommends, __FILE__);

        $response = array();

//        if (count($arrRecommends) > 0) {
            // 商品一覧を取得
            $objQuery = SC_Query_Ex::getSingletonInstance();
            $objProduct = new SC_Product_Ex();
/*
            // where条件生成&セット
            $arrProductId = array();
            foreach ($arrRecommends as $key => $val) {
                $arrProductId[] = $val['product_id'];
            }
*/
			// 2021-12-08 * ここで、表示する商品を定義。
			$arrProductId	= array(24, 25, 26, 27, 28);
#var_dump($arrProductId);
            $arrProducts = $objProduct->getListByProductIds($objQuery, $arrProductId);
#var_dump($arrProducts);

            // 税込金額を設定する
            SC_Product_Ex::setIncTaxToProducts($arrProducts);

            // おすすめ商品情報にマージ
//            foreach ($arrRecommends as $key => $value) {
			foreach ($arrProductId as $key => $value) {
//                if (isset($arrProducts[$value['product_id']])) {
//                    $product = $arrProducts[$value['product_id']];
                if (isset($arrProducts[$value])) {
                    $product = $arrProducts[$value];
                    if ($product['status'] == 1 && (!NOSTOCK_HIDDEN || ($product['stock_max'] >= 1 || $product['stock_unlimited_max'] == 1))) {
                        $response[] = $arrProducts[$value];
                    }
                } else {
                    // 削除済み商品は除外
                    unset($arrRecommends[$key]);
                }
            }

//        }

//var_dump($response);
        return $response;
    }
}

$objPage = new LC_Page_FrontParts_BLoc_Recommend2 ();
$objPage->blocItems = $params['items'];
$objPage->init();
$objPage->process();

加工の跡がわかるように、
不要なところは、コメントアウトで、残してあります。

 

ECCUBE2.13(2.17)* おすすめ商品の機能をもう1つ(簡易版)