【EC-CUBE(2.13)】関連商品登録の検索項目に販売価格項目を追加する

【EC-CUBE(2.13)】関連商品登録の商品検索項目にはカテゴリと商品名のみですが、ここに販売価格検索項目を追加します。

継承クラスにメソッドを追加

以下の継承クラスにメソッドを追加して下さい。

data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_ProductSelect_Ex.php

    public function lfInitParam(&$objFormParam)
    {
        $objFormParam->addParam('カテゴリ', 'search_category_id', STEXT_LEN, 'n');
        $objFormParam->addParam('商品名', 'search_name', STEXT_LEN, 'KVa');
        $objFormParam->addParam('商品コード', 'search_product_code', STEXT_LEN, 'KVa');
        $objFormParam->addParam(SALE_PRICE_TITLE, 'search_product_price02', PRICE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));//追加
    }

    public function lfGetProducts(&$objDb)
    {
        $where = 'del_flg = 0';
        $arrWhereVal = array();

        /* 入力エラーなし */
        foreach ($this->arrForm AS $key=>$val) {
            if ($val == '') continue;
			
            switch ($key) {
                case 'search_name':
                    $where .= ' AND name ILIKE ?';
                    $arrWhereVal[] = "%$val%";
                    break;
                case 'search_category_id':
                    list($tmp_where, $arrTmp) = $objDb->sfGetCatWhere($val);
                    if ($tmp_where != '') {
                        $where.= ' AND product_id IN (SELECT product_id FROM dtb_product_categories WHERE ' . $tmp_where . ')';
                        $arrWhereVal = array_merge((array) $arrWhereVal, (array) $arrTmp);
                    }
                    break;
                case 'search_product_code':
                    $where .= ' AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code LIKE ?)';
                    $arrWhereVal[] = "%$val%";
                    break;
                case 'search_product_price02': //販売価格帯検索処理を追加
                    if(empty($val[0]) && empty($val[1])) continue;
                    $where .= ' AND product_id IN (SELECT product_id FROM dtb_products_class WHERE price02 BETWEEN ? AND ? GROUP BY product_id)';
                    $arrWhereVal[] = (empty($val[0])) ? 0 : (int)$val[0];
                    $arrWhereVal[] = (empty($val[1])) ? 1000000 : (int)$val[1];
                    break;
                default:
                    break;
            }
        }

        $order = 'update_date DESC, product_id DESC ';

        $objQuery =& SC_Query_Ex::getSingletonInstance();
        // 行数の取得
        $linemax = $objQuery->count('dtb_products', $where, $arrWhereVal);
        $this->tpl_linemax = $linemax;              // 何件が該当しました。表示用

        // ページ送りの処理
        $page_max = SC_Utils_Ex::sfGetSearchPageMax($_POST['search_page_max']);

        // ページ送りの取得
        $objNavi = new SC_PageNavi_Ex($_POST['search_pageno'], $linemax, $page_max, 'eccube.moveSearchPage', NAVI_PMAX);
        $this->tpl_strnavi = $objNavi->strnavi;     // 表示文字列
        $startno = $objNavi->start_row;

        // 取得範囲の指定(開始行番号、行数のセット)
        $objQuery->setLimitOffset($page_max, $startno);
        // 表示順序
        $objQuery->setOrder($order);
		
        // 検索結果の取得
        // FIXME 商品コードの表示
        $arrProducts = $objQuery->select('*', SC_Product_Ex::alldtlSQL(), $where, $arrWhereVal);

        return $arrProducts;
    }

テンプレートを修正

以下のようにテンプレートを修正して下さい。

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

        <tr>
            <th>商品名</th>
            <td><input type="text" name="search_name" value="<!--{$arrForm.search_name|h}-->" size="35" class="box35" /></td>
        </tr>
        <!-- 販売価格帯項目を追加 -->
        <tr>
            <th>販売価格(下限)</th>
            <td><input type="text" name="search_product_price02[]" value="<!--{$arrForm.search_product_price02[0]|h}-->" size="35" class="box35" /></td>
        </tr>
        <tr>
            <th>販売価格(上限)</th>
            <td><input type="text" name="search_product_price02[]" value="<!--{$arrForm.search_product_price02[1]|h}-->" size="35" class="box35" /></td>
        </tr>
        <!-- /価格帯項目を追加 -->

以上です。

お気軽にコメントをどうぞ

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください