EC-CUBE 商品マスタの販売価格を一括操作する

■商品マスタの販売価格を一括操作する

次は商品マスタの販売価格の一括処理を行う
レビューの表示制御と同じく一件ずつしか処理が出来ず
煩わしいので一覧から一括で変更したい

手順:
ビューファイル『index.php』に更新ボタンと価格を入力するためのテキストフィールドを用意する
拡張クラスの商品マスタファイル『LC_Page_Admin_Products_Ex.php』に処理を実装する

■商品価格について
規格が登録されている商品に関しては別途価格を設定する画面が用意されているので
規格が登録されている商品はラベル表示する様にする

■ビューファイル『index.php』に更新ボタンと価格を入力するためのテキストフィールドを用意する

  <!--検索結果-->
  <!--{if $smarty.const.ADMIN_MODE == '1'}-->
      <a class="btn-normal" href="javascript:;" onclick="eccube.setModeAndSubmit('delete_all','',''); return false;">検索結果を全て削除</a>
  <!--{/if}-->
  <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>
  
  
  ・・・
  
  
  <!--{* 価格 *}-->
  <td rowspan="2" class="right">
    <!--{if $arrProducts[cnt].has_product_class != true}-->
      <!--商品規格がされていない商品はテキストフィールドを設置する-->
      <input type="text" name="price_<!--{$arrProducts[cnt].product_id}-->" value="<!--{$arrProducts[cnt].price02_min}-->">
      <!--{else}-->
      <!--商品規格が設定されていれば最小値/最大値を表示する-->
      <!--{$arrProducts[cnt].price02_min|number_format}-->
      <!--{if $arrProducts[cnt].price02_min != $arrProducts[cnt].price02_max}-->
        <br>~ <!--{$arrProducts[cnt].price02_max|number_format}-->
      <!--{/if}-->
    <!--{/if}-->
  </td>

■拡張クラスの商品マスタファイル『LC_Page_Admin_Products_Ex.php』に処理を実装する

  /**
   * Page のアクション.
   *
   * @return void
   */
  public function action()
  {
    parent::action();
    
    switch ($this->getMode()) {
      // 価格を一括更新
      case 'set_price_update':
      $arr_products = array();
      
      foreach($_POST as $key=>$data)
      {
        $id = preg_replace('/price_/i', '', $key);
        
        // 表示ステータス情報を取得
        if(preg_match('/^[0-9]+$/i', $id, $matches))
        {
            $arr_products[$id] = $data;
        }
      }
      
      $this->setPriceUpdate($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 setPriceUpdate($__arr_products)
  {
    foreach($__arr_products as $id=>$value)
    {
      $objQuery =& SC_Query_Ex::getSingletonInstance();
      $sqlval['price02'] = $value;
      $objQuery->update('dtb_products_class', $sqlval, 'product_id = ?', array($id));
    }
  }

■実装後の商品マスタ画面
ec_cube_068

規格が登録されている商品にはラベルで価格を表示し
規格が登録されていない商品はテキストフィールドを表示している

次回は在庫の一括編集のカスタマイズ予定

Comments are closed.