[EC-CUBE 2.12.4] 管理画面の商品検索項目にメーカーを追加

今回は以下のように商品マスターで商品検索する際に、メーカーで検索できるようにしてみます。

1.data/Smarty/templates/admin/products/index.tpl でメーカー欄を追加する。

<tr>
    <th>メーカー</th>
    <td colspan="3">
        <!--{assign var=key value="search_maker_id"}-->
        <span class="attention"><!--{$arrErr[$key]}--></span>
        <select name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->">
        <option value="">選択してください</option>
        <!--{html_options options=$arrMaker selected=$arrForm[$key].value}-->
        </select>
    </td>
</tr>

2.data/class/pages/admin/products/LC_Page_Admin_Products.php の Init でコード追加。

$masterData = new SC_DB_MasterData_Ex();
$this->arrPageMax = $masterData->getMasterData('mtb_page_max');
$this->arrDISP = $masterData->getMasterData('mtb_disp');
$this->arrSTATUS = $masterData->getMasterData('mtb_status');
$this->arrPRODUCTSTATUS_COLOR = $masterData->getMasterData('mtb_product_status_color');
//以下の行を追加
$this->arrMaker = SC_Helper_DB_Ex::sfGetIDValueList('dtb_maker', 'maker_id', 'name');

3.同じくdata/class/pages/admin/products/LC_Page_Admin_Products.php の lfInitParam でコード追加。

// 検索条件
$objFormParam->addParam('商品ID', 'search_product_id', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('商品コード', 'search_product_code', STEXT_LEN, 'KVna', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('商品名', 'search_name', STEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('カテゴリ', 'search_category_id', STEXT_LEN, 'n', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('種別', 'search_status', INT_LEN, 'n', array('MAX_LENGTH_CHECK'));
// 以下の行を追加
$objFormParam->addParam('メーカー', 'search_maker_id', STEXT_LEN, 'n', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));

4.同じくdata/class/pages/admin/products/LC_Page_Admin_Products.php の buildQuery でコード追加。

// 商品ステータス
case 'search_product_statuses':
    $arrPartVal = $objFormParam->getValue($key);
    $count = count($arrPartVal);
    if ($count >= 1) {
        $where .= ' '
            . 'AND product_id IN ('
            . '    SELECT product_id FROM dtb_product_status WHERE product_status_id IN (' . SC_Utils_Ex::repeatStrWithSeparator('?', $count) . ')'
            . ')';
        $arrValues = array_merge($arrValues, $arrPartVal);
    }
    break;
// メーカー(以下の行を追加)
case 'search_maker_id':
    $where.= ' AND maker_id = ?';
    $arrValues = $objFormParam->getValue($key);
    break;