Ticket #250 (closed バグ指摘: 修正済)
管理画面の商品CSV出力で規格名1、規格名2、カテゴリIDが強制出力される
| Reported by: | Yammy | Owned by: | Yammy |
|---|---|---|---|
| Priority: | 中 | Milestone: | EC-CUBE |
| Component: | 管理画面 | Version: | 2.1.1(ベータ版) |
| Keywords: | Cc: | ||
| 修正済み: |
Description
管理画面[コンテンツ管理]→[CSV出力項目設定]→[商品管理]より、出力項目一覧から規格名1、規格名2、カテゴリIDを削除し、出力しないようにしても、商品マスタの[CSV DOWNLOAD]時に強制出力される。
Change History
Note: See
TracTickets for help on using
tickets.

以下の2つのファイルを修正しました。
data/class/helper/SC_Helper_CSV.php
data/class/util/SC_Utils.php
規格名1、規格名2、カテゴリIDを取得してる箇所で、$arrOutputCols に classcategory_id1, classcategory_id2, category_id がある場合のみ取得するように 修正。
また、複数カテゴリ対応になり、vw_product_class から category_id を取得しても必ず NULL のため sfGetCommaList() を修正し、取り除くカラムを指定できるように修正。 その修正に伴い、category_idが[出力項目一覧]で指定した順序に出力されず常に一番最後に 出力されるため、lfMakeProductsCSV() へ[出力項目一覧]の配列を渡し、[出力項目一覧] をループさせてCSVを生成するように修正。
Index: data/class/helper/SC_Helper_CSV.php =================================================================== --- data/class/helper/SC_Helper_CSV.php (リビジョン 17154) +++ data/class/helper/SC_Helper_CSV.php (作業コピー) @@ -104,7 +104,7 @@ $objDb = new SC_Helper_DB_Ex(); $from = "vw_product_class AS prdcls"; - $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols); + $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true, array('category_id')); $objQuery = new SC_Query(); $objQuery->setoption($option); @@ -113,29 +113,37 @@ $max = count($list_data); // 規格分類名一覧 - $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); + if (!empty($arrOutputCols['classcategory_id1']) || !empty($arrOutputCols['classcategory_id2'])) { + $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); + } if (!isset($data)) $data = ""; for($i = 0; $i < $max; $i++) { // 関連商品情報の付与 - $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']]; - $list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']]; + if (in_array('classcategory_id1', $arrOutputCols)) { + $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']]; + } + if (in_array('classcategory_id2', $arrOutputCols)) { + $list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']]; + } - $arrCategory_id = $objQuery->getCol("dtb_product_categories", - "category_id", - "product_id = ?", - array($list_data[$i]['product_id'])); + if (in_array('category_id', $arrOutputCols)) { + $arrCategory_id = $objQuery->getCol("dtb_product_categories", + "category_id", + "product_id = ?", + array($list_data[$i]['product_id'])); - // カテゴリID 付与 - for ($j = 0; $j < count($arrCategory_id); $j++) { - $list_data[$i]['category_id'] .= $arrCategory_id[$j]; - if ($j < count($arrCategory_id) - 1) { - $list_data[$i]['category_id'] .= "|"; + // カテゴリID 付与 + for ($j = 0; $j < count($arrCategory_id); $j++) { + $list_data[$i]['category_id'] .= $arrCategory_id[$j]; + if ($j < count($arrCategory_id) - 1) { + $list_data[$i]['category_id'] .= "|"; + } } } // 各項目をCSV出力用に変換する。 - $data .= $this->lfMakeProductsCSV($list_data[$i]); + $data .= $this->lfMakeProductsCSV($list_data[$i], $arrOutputCols); } return $data; } @@ -222,21 +230,21 @@ } // 各項目をCSV出力用に変換する。(商品) - function lfMakeProductsCSV($list) { + function lfMakeProductsCSV($list, $arrOutputCols) { $line = ""; if(is_array($list)) { - foreach($list as $key => $val) { + foreach($arrOutputCols as $key) { $tmp = ""; switch($key) { case 'point_rate': if($val == "") { $tmp = '0'; } else { - $tmp = $val; + $tmp = $list[$key]; } break; default: - $tmp = $val; + $tmp = $list[$key]; break; }Index: data/class/util/SC_Utils.php =================================================================== --- data/class/util/SC_Utils.php (リビジョン 17154) +++ data/class/util/SC_Utils.php (作業コピー) @@ -488,23 +488,25 @@ } // 配列の値をカンマ区切りで返す。 - function sfGetCommaList($array, $space=true) { + function sfGetCommaList($array, $space=true, $arrPop = array()) { if (count($array) > 0) { $line = ""; foreach($array as $val) { - if ($space) { - $line .= $val . ", "; - }else{ - $line .= $val . ","; + if (!in_array($val, $arrPop)) { + if ($space) { + $line .= $val . ", "; + } else { + $line .= $val . ","; + } } } if ($space) { $line = ereg_replace(", $", "", $line); - }else{ + } else { $line = ereg_replace(",$", "", $line); } return $line; - }else{ + } else { return false; }