■商品マスタの在庫を一括操作する
販売価格の一括操作と同様2ファイルを編集したら実現できる
手順: ビューファイル『index.php』に更新ボタンと価格を入力するためのテキストフィールドを用意する 拡張クラスの商品マスタファイル『LC_Page_Admin_Products_Ex.php』に処理を実装する
■ビューファイル『index.php』に更新ボタンと価格を入力するためのテキストフィールドを用意する
<a class="btn-tool" href="javascript:;" onclick="eccube.setModeAndSubmit('csv','',''); return false;">CSV ダウンロード</a> <a class="btn-tool" href="../contents/csv.php?tpl_subno_csv=product">CSV 出力項目設定</a> <a class="btn-tool" href="javascript:;" onclick="eccube.setModeAndSubmit('set_price_update','',''); return false;">価格を一括更新</a> <!--一括更新ボタンを設置する--> <a class="btn-tool" href="javascript:;" onclick="eccube.setModeAndSubmit('set_stock_update','',''); return false;">在庫を一括更新</a> ・・・ <!--{* 在庫 *}--> <!--{* XXX 複数規格でかつ、全ての在庫数量が等しい場合は先頭に「各」と入れたれたら良いと思う。 *}--> <td class="menu" rowspan="2"> <!--{if $arrProducts[cnt].has_product_class != true}--> <input type="text" style="width:60px;" name="stock_<!--{$arrProducts[cnt].product_id}-->" value="<!--{if $arrProducts[cnt].stock_unlimited_min}-->無制限<!--{else}--><!--{$arrProducts[cnt].stock_min|number_format}--><!--{/if}-->"> <!--{else}--> <!--{if $arrProducts[cnt].stock_unlimited_min}-->無制限<!--{else}--><!--{$arrProducts[cnt].stock_min|number_format}--><!--{/if}--> <!--{if $arrProducts[cnt].stock_unlimited_min != $arrProducts[cnt].stock_unlimited_max || $arrProducts[cnt].stock_min != $arrProducts[cnt].stock_max}--> <br>~<br><!--{if $arrProducts[cnt].stock_unlimited_max}-->無制限<!--{else}--><!--{$arrProducts[cnt].stock_max|number_format}--><!--{/if}--> <!--{/if}--> <!--{/if}--> </td>
■拡張クラスの商品マスタファイル『LC_Page_Admin_Products_Ex.php』に処理を実装する
/** * Page のアクション. * * @return void */ public function action() { parent::action(); switch ($this->getMode()) { case 'set_stock_update': $arr_products = array(); foreach($_POST as $key=>$data) { $id = preg_replace('/stock_/i', '', $key); // 在庫情報を取得 if(preg_match('/^[0-9]+$/i', $id, $matches)) { if(preg_match('/^[0-9]+$/i', $data, $matches)) { $arr_products[$id] = $data; } else { // 数値以外のデータは無制限として判定 $arr_products[$id] = 'stock_unlimited'; } } } // 在庫情報を一括更新 $this->setStockUpdate($arr_products); break; case 'search': // 規格情報ありなしフラグ取得 $objDb = new SC_Helper_DB_Ex(); foreach($this->arrProducts as $key=>$product) { $this->arrProducts[$key]['has_product_class'] = $objDb->sfHasProductClass($product['product_id']); } break; } } /** * 検索結果の在庫を一括更新する * * @param array 在庫データ * @return void */ public function setStockUpdate($__arr_products) { foreach($__arr_products as $id=>$value) { $sqlval = array(); $objQuery =& SC_Query_Ex::getSingletonInstance(); if($value == 'stock_unlimited') { $sqlval['stock_unlimited'] = 1; } else { $sqlval['stock'] = $value; $sqlval['stock_unlimited'] = 0; } $objQuery->update('dtb_products_class', $sqlval, 'product_id = ?', array($id)); } }
規格が登録されている在庫にはラベルで価格を表示し
規格が登録されていない在庫はテキストフィールドを表示している
在庫が未記入や数値以外が入力されると無制限フラグをONにする
次回は商品の公開ステータス一括編集のカスタマイズ予定