EC-CUBE 商品マスタの商品公開ステータスを一括操作する

■商品マスタの商品公開ステータスを一括操作する

商品公開ステータスを一括で操作できるようにカスタマイズする
レビューの表示ステータスの一括更新と要領は同じ

手順:
ビューファイル『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>
  <!--公開ステータスを一括更新するボタンを設置-->
  <a class="btn-tool" href="javascript:;" onclick="eccube.setModeAndSubmit('change_status','',''); return false;">公開ステータスを一括更新</a>
  
  
  ・・・
  
  
  <!--{* 表示 *}-->
  <!--{assign var=key value=$arrProducts[cnt].status}-->
  <td class="menu" rowspan="2">
    <input type="radio" name="status_<!--{$arrProducts[cnt].product_id}-->" value="1" <!--{if $arrProducts[cnt].status eq 1}-->checked<!--{/if}-->>公開
    <br>
    <input type="radio" name="status_<!--{$arrProducts[cnt].product_id}-->" value="2" <!--{if $arrProducts[cnt].status eq 2}-->checked<!--{/if}-->>非公開
  </td>

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

  /**
   * Page のアクション.
   *
   * @return void
   */
  public function action()
  {
    parent::action();
    
    switch ($this->getMode()) {
      case 'change_status':
        $arr_products = array();
        
        foreach($_POST as $key=>$data)
        {
          $id = preg_replace('/status_/i', '', $key);
          
          // 在庫情報を取得
          if(preg_match('/^[0-9]+$/i', $id, $matches))
          {
            $arr_products[$id] = $data;
          }
        }
        
        // 在庫情報を一括更新
        $this->changeStatus($arr_products);
        break;
    }
  }

  /**
   * 商品表示ステータス一括更新
   *
   * @param  string なし
   * @param  array  なし
   * @return void
   */
  public function changeStatus($__arr_status)
  {
    foreach($__arr_status as $id=>$value)
    {
      $objQuery =& SC_Query_Ex::getSingletonInstance();
      $sqlval['status'] = $value;
      $objQuery->update('dtb_products', $sqlval, 'product_id = ?', array($id));
    }
  }


※一覧画面のレイアウトが崩れた場合はテキストフィールドを
小さくして調整をする

  <!--価格のテキストフィールドの幅を設定-->
  <input type="text" style="width:60px;" name="price_<!--{$arrProducts[cnt].product_id}-->" value="<!--{$arrProducts[cnt].price02_min}-->">
  
  <!--在庫のテキストフィールドの幅を設定-->
  <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}-->">

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

Comments are closed.