Changeset 17799
- Timestamp:
- 2009/02/17 23:19:20 (14 years ago)
- Location:
- branches/comu-ver2/data/class
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/comu-ver2/data/class/helper/SC_Helper_CSV.php
r17756 r17799 100 100 101 101 102 // CSV出力データを作成する。(商品) 103 function lfGetProductsCSV($where, $option, $arrval, $arrOutputCols) { 104 $objDb = new SC_Helper_DB_Ex(); 105 106 $from = "vw_product_class AS prdcls"; 107 $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols, true, array('category_id')); 108 109 $objQuery = new SC_Query(); 110 $objQuery->setoption($option); 111 112 $list_data = $objQuery->select($cols, $from, $where, $arrval); 113 $max = count($list_data); 114 102 // CSVを送信する。(商品) 103 function sfDownloadProductsCsv($where, $arrval, $order) { 104 105 // CSV出力タイトル行の作成 106 $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(1, " WHERE csv_id = 1 AND status = 1")); 107 if (count($arrOutput) <= 0) return false; // 失敗終了 108 $arrOutputCols = $arrOutput['col']; 109 110 $objQuery = new SC_Query(); 111 $objQuery->setorder($order); 112 113 $dataRows = $objQuery->select( 114 SC_Utils_Ex::sfGetCommaList($arrOutputCols, true, array('category_id')) 115 ,'vw_product_class AS prdcls' 116 ,$where 117 ,$arrval 118 ); 119 115 120 // 規格分類名一覧 116 121 if (in_array('classcategory_id1', $arrOutputCols) || in_array('classcategory_id2', $arrOutputCols)) { 122 $objDb = new SC_Helper_DB_Ex(); 117 123 $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); 118 124 } 119 125 120 if (!isset($data)) $data = ""; 121 for($i = 0; $i < $max; $i++) { 126 $outputArray = array(); 127 128 // ヘッダ行 129 $outputArray[] = $arrOutput['disp_name']; 130 131 // データ行 132 foreach ($dataRows as $row) { 122 133 // 規格名1 123 134 if (in_array('classcategory_id1', $arrOutputCols)) { 124 $list_data[$i]['classcategory_id1'] = $arrClassCatName[$list_data[$i]['classcategory_id1']]; 125 } 135 $row['classcategory_id1'] = $arrClassCatName[$row['classcategory_id1']]; 136 } 137 126 138 // 規格名2 127 139 if (in_array('classcategory_id2', $arrOutputCols)) { 128 $ list_data[$i]['classcategory_id2'] = $arrClassCatName[$list_data[$i]['classcategory_id2']];140 $row['classcategory_id2'] = $arrClassCatName[$row['classcategory_id2']]; 129 141 } 130 142 131 143 // カテゴリID 132 144 if (in_array('category_id', $arrOutputCols)) { 133 $ arrCategory_id= $objQuery->getCol("dtb_product_categories",145 $row['category_id'] = $objQuery->getCol("dtb_product_categories", 134 146 "category_id", 135 147 "product_id = ?", 136 array($list_data[$i]['product_id'])); 137 138 for ($j = 0; $j < count($arrCategory_id); $j++) { 139 $list_data[$i]['category_id'] .= $arrCategory_id[$j]; 140 if ($j < count($arrCategory_id) - 1) { 141 $list_data[$i]['category_id'] .= "|"; 142 } 143 } 144 } 145 146 // 各項目をCSV出力用に変換する。 147 $data .= $this->lfMakeProductsCSV($list_data[$i], $arrOutputCols); 148 } 149 return $data; 148 array($row['product_id'])); 149 } 150 151 $outputArray[] = $row; 152 } 153 154 // CSVを送信する。 155 $this->lfDownloadCsv($outputArray); 156 157 // 成功終了 158 return ture; 150 159 } 151 160 … … 189 198 } 190 199 191 // CSV出力データを作成する。(カテゴリ) 192 function lfGetCategoryCSV($where, $option, $arrval, $arrOutputCols) { 193 $objDb = new SC_Helper_DB_Ex(); 194 195 $from = "dtb_category"; 196 $cols = SC_Utils_Ex::sfGetCommaList($arrOutputCols); 197 198 $objQuery = new SC_Query(); 199 $objQuery->setoption($option); 200 201 $list_data = $objQuery->select($cols, $from, $where, $arrval); 202 $max = count($list_data); 203 204 if (!isset($data)) $data = ""; 205 for($i = 0; $i < $max; $i++) { 206 // 各項目をCSV出力用に変換する。 207 $data .= $this->lfMakeCSV($list_data[$i]); 208 } 209 return $data; 200 // CSVを送信する。(カテゴリ) 201 function sfDownloadCategoryCsv() { 202 203 // CSV出力タイトル行の作成 204 $arrOutput = SC_Utils_Ex::sfSwapArray($this->sfgetCsvOutput(5, " WHERE csv_id = 5 AND status = 1")); 205 if (count($arrOutput) <= 0) return false; // 失敗終了 206 $arrOutputCols = $arrOutput['col']; 207 208 $objQuery = new SC_Query(); 209 $objQuery->setorder('rank DESC'); 210 211 $dataRows = $objQuery->select( 212 SC_Utils_Ex::sfGetCommaList($arrOutputCols) 213 ,'dtb_category' 214 ,'del_flg = 0' 215 ); 216 217 $outputArray = array(); 218 219 // ヘッダ行 220 $outputArray[] = $arrOutput['disp_name']; 221 222 // データ行 223 foreach ($dataRows as $row) { 224 $outputArray[] = $row; 225 } 226 227 // CSVを送信する。 228 $this->lfDownloadCsv($outputArray, 'category'); 229 230 // 成功終了 231 return ture; 210 232 } 211 233 … … 236 258 $tmp = ""; 237 259 switch($key) { 238 case 'order_pref':239 case 'deliv_pref':240 $tmp = $this->arrPref[$val];241 break;242 default:243 $tmp = $val;244 break;260 case 'order_pref': 261 case 'deliv_pref': 262 $tmp = $this->arrPref[$val]; 263 break; 264 default: 265 $tmp = $val; 266 break; 245 267 } 246 268 … … 250 272 // 文末の","を変換 251 273 $line = $this->replaceLineSuffix($line); 252 return $line;253 }254 255 // 各項目をCSV出力用に変換する。(商品)256 function lfMakeProductsCSV($list, $arrOutputCols) {257 $line = "";258 if(is_array($list)) {259 foreach($arrOutputCols as $key) {260 $tmp = "";261 switch($key) {262 case 'point_rate':263 if($val == "") {264 $tmp = '0';265 } else {266 $tmp = $list[$key];267 }268 break;269 default:270 $tmp = $list[$key];271 break;272 }273 274 $tmp = str_replace("\"", "\\\"", $tmp);275 $line .= "\"".$tmp."\",";276 }277 // 文末の","を変換278 $line = $this->replaceLineSuffix($line);279 }280 274 return $line; 281 275 } … … 410 404 ); 411 405 } 406 407 /** 408 * 1次元配列を1行のCSVとして返す 409 * 参考: http://jp.php.net/fputcsv 410 */ 411 function sfArrayToCsv($fields, $delimiter = ',', $enclosure = '"', $arrayDelimiter = '|') { 412 413 if( strlen($delimiter) != 1 ) { 414 trigger_error('delimiter must be a single character', E_USER_WARNING); 415 return ""; 416 } 417 418 if( strlen($enclosure) < 1 ) { 419 trigger_error('enclosure must be a single character', E_USER_WARNING); 420 return ""; 421 } 422 423 foreach (array_keys($fields) as $key) { 424 $field =& $fields[$key]; 425 426 // 配列を「|」区切りの文字列に変換する 427 if (is_array($field)) { 428 $field = implode($arrayDelimiter, $field); 429 } 430 431 /* enclose a field that contains a delimiter, an enclosure character, or a newline */ 432 if ( 433 is_string($field) 434 && preg_match('/[' . preg_quote($delimiter) . preg_quote($enclosure) . '\\s]/', $field) 435 ) { 436 $field = $enclosure . preg_replace('/' . preg_quote($enclosure) . '/', $enclosure . $enclosure, $field) . $enclosure; 437 } 438 } 439 440 return implode($delimiter, $fields); 441 } 442 443 /** 444 * CSVを送信する。 445 */ 446 function lfDownloadCsv($arrayData, $prefix = ""){ 447 448 if($prefix == "") { 449 $dir_name = SC_Utils::sfUpDirName(); 450 $file_name = $dir_name . date("ymdHis") .".csv"; 451 } else { 452 $file_name = $prefix . date("ymdHis") .".csv"; 453 } 454 455 /* HTTPヘッダの出力 */ 456 Header("Content-disposition: attachment; filename=${file_name}"); 457 Header("Content-type: application/octet-stream; name=${file_name}"); 458 Header("Cache-Control: "); 459 Header("Pragma: "); 460 461 /* データを出力 */ 462 foreach ($arrayData as $lineArray) { 463 $lineString = $this->sfArrayToCsv($lineArray); 464 $lineString = mb_convert_encoding($lineString, 'SJIS-Win'); 465 echo $lineString . "\n"; 466 } 467 } 412 468 } 413 469 ?> -
branches/comu-ver2/data/class/pages/admin/products/LC_Page_Admin_Products.php
r17667 r17799 168 168 169 169 switch ($key) { 170 case 'search_product_id': 170 case 'search_product_id': // 商品ID 171 171 $where .= " AND product_id = ?"; 172 172 $view_where .= " AND product_id = ?"; … … 183 183 $view_where = $where; 184 184 break; 185 case 'search_name': 185 case 'search_name': // 商品名 186 186 $where .= " AND name ILIKE ?"; 187 187 $view_where .= " AND name ILIKE ?"; 188 188 $arrval[] = "%$val%"; 189 189 break; 190 case 'search_category_id': 190 case 'search_category_id': // カテゴリー 191 191 list($tmp_where, $tmp_arrval) = $objDb->sfGetCatWhere($val); 192 192 if($tmp_where != "") { … … 196 196 } 197 197 break; 198 case 'search_product_code': 198 case 'search_product_code': // 商品コード 199 199 $where .= " AND product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? GROUP BY product_id)"; 200 200 $view_where .= " AND EXISTS (SELECT product_id FROM dtb_products_class as cls WHERE cls.product_code ILIKE ? AND dtb_products.product_id = cls.product_id GROUP BY cls.product_id )"; 201 201 $arrval[] = "%$val%"; 202 202 break; 203 case 'search_startyear': 203 case 'search_startyear': // 登録更新日(FROM) 204 204 $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_startyear'], $_POST['search_startmonth'], $_POST['search_startday']); 205 205 $where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 206 206 $view_where.= " AND update_date >= '" . $_POST['search_startyear'] . "/" . $_POST['search_startmonth']. "/" .$_POST['search_startday'] . "'"; 207 207 break; 208 case 'search_endyear': 208 case 'search_endyear': // 登録更新日(TO) 209 209 $date = SC_Utils_Ex::sfGetTimestamp($_POST['search_endyear'], $_POST['search_endmonth'], $_POST['search_endday']); 210 210 $date = date('Y/m/d', strtotime($date) + 86400); … … 212 212 $view_where.= " AND update_date < date('" . $date . "')"; 213 213 break; 214 case 'search_product_flag': 214 case 'search_product_flag': //種別 215 215 global $arrSTATUS; 216 216 $search_product_flag = SC_Utils_Ex::sfSearchCheckBoxes($val); … … 221 221 } 222 222 break; 223 case 'search_status': 223 case 'search_status': // ステータス 224 224 $tmp_where = ""; 225 225 foreach ($val as $element){ … … 248 248 249 249 switch($_POST['mode']) { 250 case 'csv': 251 252 require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_CSV_Ex.php"); 253 254 $objCSV = new SC_Helper_CSV_Ex(); 255 // オプションの指定 256 $option = "ORDER BY $order"; 257 // CSV出力タイトル行の作成 258 $arrOutput = SC_Utils_Ex::sfSwapArray($objCSV->sfgetCsvOutput(1, " WHERE csv_id = 1 AND status = 1")); 259 260 if (count($arrOutput) <= 0) break; 261 262 $arrOutputCols = $arrOutput['col']; 263 $arrOutputTitle = $arrOutput['disp_name']; 264 265 $head = SC_Utils_Ex::sfGetCSVList($arrOutputTitle); 266 267 $data = $objCSV->lfGetProductsCSV($where, $option, $arrval, $arrOutputCols); 268 269 // CSVを送信する。 270 SC_Utils_Ex::sfCSVDownload($head.$data); 271 exit; 272 break; 273 case 'delete_all': 274 // 検索結果をすべて削除 275 $where = "product_id IN (SELECT product_id FROM vw_products_allclass_detail AS alldtl WHERE $where)"; 276 $sqlval['del_flg'] = 1; 277 $objQuery->update("dtb_products", $sqlval, $where, $arrval); 278 $objQuery->delete("dtb_customer_favorite_products", $where, $arrval); 279 break; 280 default: 281 // 読み込む列とテーブルの指定 282 $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date"; 283 $from = "vw_products_allclass_detail AS alldtl "; 284 285 // 行数の取得 286 $linemax = $objQuery->count("dtb_products", $view_where, $arrval); 287 $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 288 289 // ページ送りの処理 290 if(is_numeric($_POST['search_page_max'])) { 291 $page_max = $_POST['search_page_max']; 292 } else { 293 $page_max = SEARCH_PMAX; 294 } 295 296 // ページ送りの取得 297 $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); 298 $startno = $objNavi->start_row; 299 $this->arrPagenavi = $objNavi->arrPagenavi; 300 301 //キャンペーン商品検索時は、全結果の商品IDを変数に格納する 302 if(isset($_POST['search_mode']) && $_POST['search_mode'] == 'campaign') { 303 $arrRet = $objQuery->select($col, $from, $where, $arrval); 304 if(count($arrRet) > 0) { 305 $arrRet = sfSwapArray($arrRet); 306 $pid = implode("-", $arrRet['product_id']); 307 $this->arrHidden['campaign_product_id'] = $pid; 250 case 'csv': 251 require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_CSV_Ex.php"); 252 253 $objCSV = new SC_Helper_CSV_Ex(); 254 255 // CSVを送信する。正常終了の場合、終了。 256 $objCSV->sfDownloadProductsCsv($where, $arrval, $order) && exit; 257 258 break; 259 case 'delete_all': 260 // 検索結果をすべて削除 261 $where = "product_id IN (SELECT product_id FROM vw_products_allclass_detail AS alldtl WHERE $where)"; 262 $sqlval['del_flg'] = 1; 263 $objQuery->update("dtb_products", $sqlval, $where, $arrval); 264 $objQuery->delete("dtb_customer_favorite_products", $where, $arrval); 265 break; 266 default: 267 // 読み込む列とテーブルの指定 268 $col = "product_id, name, main_list_image, status, product_code_min, product_code_max, price02_min, price02_max, stock_min, stock_max, stock_unlimited_min, stock_unlimited_max, update_date"; 269 $from = "vw_products_allclass_detail AS alldtl "; 270 271 // 行数の取得 272 $linemax = $objQuery->count("dtb_products", $view_where, $arrval); 273 $this->tpl_linemax = $linemax; // 何件が該当しました。表示用 274 275 // ページ送りの処理 276 if(is_numeric($_POST['search_page_max'])) { 277 $page_max = $_POST['search_page_max']; 278 } else { 279 $page_max = SEARCH_PMAX; 308 280 } 309 } 310 311 // 取得範囲の指定(開始行番号、行数のセット) 312 // if(DB_TYPE != "mysql") $objQuery->setlimitoffset($page_max, $startno); 313 $objQuery->setlimitoffset($page_max, $startno); 314 // 表示順序 315 $objQuery->setorder($order); 316 317 // 検索結果の取得 318 $this->arrProducts = $objQuery->select($col, $from, $where, $arrval); 319 320 // 各商品ごとのカテゴリIDを取得 321 if (count($this->arrProducts) > 0) { 322 foreach ($this->arrProducts as $key => $val) { 323 $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"]); 324 $objDb->g_category_on = false; 281 282 // ページ送りの取得 283 $objNavi = new SC_PageNavi($this->arrHidden['search_pageno'], $linemax, $page_max, "fnNaviSearchPage", NAVI_PMAX); 284 $startno = $objNavi->start_row; 285 $this->arrPagenavi = $objNavi->arrPagenavi; 286 287 //キャンペーン商品検索時は、全結果の商品IDを変数に格納する 288 if(isset($_POST['search_mode']) && $_POST['search_mode'] == 'campaign') { 289 $arrRet = $objQuery->select($col, $from, $where, $arrval); 290 if(count($arrRet) > 0) { 291 $arrRet = sfSwapArray($arrRet); 292 $pid = implode("-", $arrRet['product_id']); 293 $this->arrHidden['campaign_product_id'] = $pid; 294 } 325 295 } 326 } 296 297 // 取得範囲の指定(開始行番号、行数のセット) 298 // if(DB_TYPE != "mysql") $objQuery->setlimitoffset($page_max, $startno); 299 $objQuery->setlimitoffset($page_max, $startno); 300 // 表示順序 301 $objQuery->setorder($order); 302 303 // 検索結果の取得 304 $this->arrProducts = $objQuery->select($col, $from, $where, $arrval); 305 306 // 各商品ごとのカテゴリIDを取得 307 if (count($this->arrProducts) > 0) { 308 foreach ($this->arrProducts as $key => $val) { 309 $this->arrProducts[$key]["categories"] = $objDb->sfGetCategoryId($val["product_id"]); 310 $objDb->g_category_on = false; 311 } 312 } 327 313 } 328 314 } … … 351 337 global $objPage; 352 338 /* 353 * 354 * 355 * 356 * 357 * 339 * 文字列の変換 340 * K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換 341 * C : 「全角ひら仮名」を「全角かた仮名」に変換 342 * V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します 343 * n : 「全角」数字を「半角(ハンカク)」に変換 358 344 */ 359 345 $arrConvList['search_name'] = "KVa"; -
branches/comu-ver2/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
r17190 r17799 180 180 181 181 $objCSV = new SC_Helper_CSV_Ex(); 182 // オプションの指定 183 $option = "ORDER BY rank DESC"; 184 // CSV出力タイトル行の作成 185 $arrOutput = SC_Utils_Ex::sfSwapArray($objCSV->sfgetCsvOutput(5, " WHERE csv_id = 5 AND status = 1")); 186 187 if (count($arrOutput) <= 0) break; 188 189 $arrOutputCols = $arrOutput['col']; 190 $arrOutputTitle = $arrOutput['disp_name']; 191 192 $head = SC_Utils_Ex::sfGetCSVList($arrOutputTitle); 193 194 $where = "del_flg = 0"; 195 $data = $objCSV->lfGetCategoryCSV($where, $option, $arrval, $arrOutputCols); 196 197 // CSVを送信する。 198 SC_Utils_Ex::sfCSVDownload($head.$data, 'category'); 199 exit; 182 183 // CSVを送信する。正常終了の場合、終了。 184 $objCSV->sfDownloadCategoryCsv() && exit; 185 200 186 break; 201 187 default:
Note: See TracChangeset
for help on using the changeset viewer.