【EC-CUBE】商品情報に検索で利用出来る項目を追加する 2.13

【EC-CUBE】商品情報に検索で利用出来る項目を追加する 2.13

【EC-CUBE】商品情報に検索で利用出来る項目を追加する 2.13

商品情報に独自の項目を追加して、商品検索でも使えるようにする方法です。

環境は以下の通り。

  • EC-CUBE 2.13.3
  • PHP 5.4.35
  • MySQL 5.5.38

実装は自己責任で。

データベースに項目を追加する

なにはともあれ、データベースに項目を追加します。

phpMyAdminなどで直接DBに追加して下さい。

商品情報に追加するので、dtb_productsテーブルにカラムを追加します。

管理画面用商品情報クラスにパラメータを追加する

管理画面から商品登録時に登録出来るように、該当の処理へパラメータを追加します。

/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

    public function lfInitFormParam(&$objFormParam, $arrPost)
    {
        ....
        //数値チェックの場合
        $objFormParam->addParam('追加項目1', 'additional_param_int', INT_LEN, 'n', array('NUM_CHECK'));
        //文字列チェックの場合
        $objFormParam->addParam('追加項目2', 'additional_param_str', STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK'));
        ...
    }
    ...
    public function lfRegistProduct(&$objUpFile, &$objDownFile, $arrList)
    {
        ...
        $checkArray = array('name', 'status',
                            'main_list_comment', 'main_comment',
                            'deliv_fee', 'comment1', 'comment2', 'comment3',
                            'comment4', 'comment5', 'comment6',
                            'sale_limit', 'deliv_date_id', 'maker_id', 'note',
                            //パラメータ追加
                            'additional_param_int',
                            'additional_param_str',

        );
        $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);
        ...
        //商品パラメータ追加
        $sqlval['additional_param_int'] = $arrList['additional_param_int'];
        $sqlval['additional_param_str'] = $arrList['additional_param_str'];
        ...
    }

 

テンプレートに項目を追加する

登録画面。

/data/Smarty/templates/admin/products/product.tpl

   ...
    
        追加項目1
        
            
            background-color: ;" size="6" class="box6" />
             (半角数字で入力)
        
    
    ...

確認画面。

/data/Smarty/templates/admin/products/confirm.tpl

    
    ...
    <tr>
        <th>追加項目1</th>
        <td>
            <!--{$arrForm.additional_param_int|h}-->
        </td>
    </tr>
    ...

同様に「追加項目2」の分も追加して下さい。

これで、管理画面から商品登録時に追加項目へも入力が出来るようになりました。

商品検索の検索対象にする

具体的には、商品をリスト表示するときにDBへ投げるSQLへ項目を追加します。

予め検索フォームからlist.phpへ、追加したパラメータ名で値がPOSTされるようにしておいて下さい。←

その上で、リスト表示する際の処理に以下を追加します。

/data/class/pages/products/LC_Page_Products_List.php

    public function action()
    {
        ...
        $this->arrSearchData = array(
            'category_id'   => $this->lfGetCategoryId(intval($this->arrForm['category_id'])),
            'maker_id'      => intval($this->arrForm['maker_id']),
            'name'          => $this->arrForm['name'],
            //パラメータ追加
            'additional_param_int' => $this->arrForm['additional_param_int'],
            'additional_param_str' => $this->arrForm['additional_param_str']
        );
        ...
    }
    ...
    public function lfInitParam(&$objFormParam)
    {
        ...
        $objFormParam->addParam('追加項目1', 'additional_param_int', INT_LEN, 'n', array('NUM_CHECK'));
        $objFormParam->addParam('追加項目2', 'additional_param_str', STEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK'));
        ...
    }
    ...
    public function lfGetSearchCondition($arrSearchData)
    {
        ...
        //パラメータ追加
        if ($arrSearchData['additional_param_int']) {
            $searchCondition['where'] .= ' AND alldtl.additional_param_int = ? ';
            $searchCondition['arrval'][] = $arrSearchData['additional_param_int'];
        }
        if ($arrSearchData['additional_param_str']) {
            $searchCondition['where'] .= ' AND alldtl.additional_param_str = ? ';
            $searchCondition['arrval'][] = $arrSearchData['additional_param_str'];
        }
        ...
    }

これで、追加した項目が商品検索で参照されるようになります。

説明を大分すっ飛ばしてますが、SQLをゴニョゴニョやる所なので、下手にいじると簡単にシステムエラーになります。

そういうときは管理画面の「システム設定 > EC-CUBE ログ表示」から「エラーログファイル」を読み込めばエラーの内容を確認出来ます。

 

 

 

eccubeorg

http://www.eccube.org

You may also like...