■商品マスタの在庫を一括操作する
販売価格の一括操作と同様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にする
次回は商品の公開ステータス一括編集のカスタマイズ予定
