Ticket #250 (closed バグ指摘: 修正済)

Opened 12 years ago

Last modified 12 years ago

管理画面の商品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

comment:1 Changed 12 years ago by Yammy

  • Status changed from new to assigned

以下の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;
         }

comment:2 Changed 12 years ago by Yammy

r17155としてコミット。

comment:3 Changed 12 years ago by Yammy

  • Status changed from assigned to closed
  • Resolution set to 修正済

comment:4 Changed 12 years ago by Yammy

規格名1、規格名2がCSV出力されないバグを修正 r17294としてコミット

Note: See TracTickets for help on using tickets.