Changeset 21502 for branches/version-2_12-dev/data/class/SC_Product.php
- Timestamp:
- 2012/02/14 15:10:54 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/SC_Product.php
r21481 r21502 259 259 260 260 // 規格1が設定されている 261 $this->classCat1_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id1']));261 $this->classCat1_find[$productId] = $arrProductClass[0]['classcategory_id1'] > 0; // 要変更ただし、他にも改修が必要となる 262 262 // 規格2が設定されている 263 $this->classCat2_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id2']));263 $this->classCat2_find[$productId] = $arrProductClass[0]['classcategory_id2'] > 0; // 要変更ただし、他にも改修が必要となる 264 264 265 265 $this->stock_find[$productId] = false; … … 316 316 317 317 // #929(GC8 規格のプルダウン順序表示不具合)対応のため、2次キーは「#」を前置 318 if ( SC_Utils_Ex::isBlank($productsClass1)) {318 if (!$this->classCat1_find[$productId]) { 319 319 $productsClass1 = '__unselected2'; 320 320 } … … 356 356 T1.down_filename, 357 357 T1.down_realfilename, 358 T2.class_combination_id, 359 T2.parent_class_combination_id, 360 T2.classcategory_id, 361 T2.level, 362 T3.name AS classcategory_name, 363 T3.rank, 364 T4.name AS class_name, 365 T4.class_id 358 T3.name AS classcategory_name1, 359 T3.rank AS rank1, 360 T4.name AS class_name1, 361 T4.class_id AS class_id1, 362 T1.classcategory_id1, 363 T1.classcategory_id2, 364 dtb_classcategory2.name AS classcategory_name2, 365 dtb_classcategory2.rank AS rank2, 366 dtb_class2.name AS class_name2, 367 dtb_class2.class_id AS class_id2 366 368 __EOS__; 367 369 $table = <<< __EOS__ 368 370 dtb_products_class T1 369 LEFT JOIN dtb_class_combination T2370 ON T1.class_combination_id = T2.class_combination_id371 371 LEFT JOIN dtb_classcategory T3 372 ON T 2.classcategory_id= T3.classcategory_id372 ON T1.classcategory_id1 = T3.classcategory_id 373 373 LEFT JOIN dtb_class T4 374 374 ON T3.class_id = T4.class_id 375 LEFT JOIN dtb_classcategory dtb_classcategory2 376 ON T1.classcategory_id2 = dtb_classcategory2.classcategory_id 377 LEFT JOIN dtb_class dtb_class2 378 ON dtb_classcategory2.class_id = dtb_class2.class_id 375 379 __EOS__; 376 380 377 381 $objQuery->setOrder('T3.rank DESC'); // XXX 378 382 $arrRet = $objQuery->select($col, $table, "", $params); 379 $levels = array(); 380 $parents = array(); 381 foreach ($arrRet as $rows) { 382 $levels[] = $rows['level']; 383 $parents[] = $rows['parent_class_combination_id']; 384 } 385 $level = max($levels); 386 $parentsClass = array(); 387 // 階層分の親を取得 388 for ($i = 0; $i < $level -1; $i++) { 389 $objQuery =& SC_Query_Ex::getSingletonInstance(); 390 $objQuery->setWhere('T1.class_combination_id IN (' . implode(', ', array_pad(array(), count($parents), '?')) . ')'); 391 392 $col = <<< __EOS__ 393 T1.class_combination_id, 394 T1.classcategory_id, 395 T1.parent_class_combination_id, 396 T1.level, 397 T2.name AS classcategory_name, 398 T2.rank, 399 T3.name AS class_name, 400 T3.class_id 401 __EOS__; 402 $table = <<< __EOS__ 403 dtb_class_combination T1 404 LEFT JOIN dtb_classcategory T2 405 ON T1.classcategory_id = T2.classcategory_id 406 LEFT JOIN dtb_class T3 407 ON T2.class_id = T3.class_id 408 __EOS__; 409 410 $objQuery->setOrder('T2.rank DESC'); // XXX 411 $arrParents = $objQuery->select($col, $table, "", $parents); 412 413 foreach ($arrParents as $rows) { 414 $parents[] = $rows['parent_class_combination_id']; 415 416 foreach ($arrRet as $child) { 417 if ($child['parent_class_combination_id'] 418 == $rows['class_combination_id']) { 419 $rows['product_id'] = $child['product_id']; 420 } 421 } 422 $tmpParents[] = $rows; 423 } 424 $parentsClass = array_merge($parentsClass, $tmpParents); 425 } 426 427 // 末端から枝を作成 428 $tmpClass = array_merge($arrRet, $parentsClass); 429 430 foreach ($tmpClass as $val) { 431 $val['class_id' . $val['level']] = $val['class_id']; 432 $val['class_name' . $val['level']] = $val['class_name']; 433 $val['classcategory_name' . $val['level']] = $val['classcategory_name']; 434 $val['classcategory_id' . $val['level']] = $val['classcategory_id']; 435 $arrProductsClass[] = $val; 436 } 437 return $arrProductsClass; 383 384 return $arrRet; 438 385 } 439 386 … … 449 396 $objQuery =& SC_Query_Ex::getSingletonInstance(); 450 397 $objQuery->setWhere('product_class_id = ? AND T1.del_flg = 0'); 451 $results = $this->getProductsClassByQuery($objQuery, $productClassId); 452 $productsClass = $this->getProductsClassFull($results); 453 return $productsClass[0]; 398 $arrRes = $this->getProductsClassByQuery($objQuery, $productClassId); 399 return $arrRes[0]; 454 400 } 455 401 … … 475 421 476 422 /** 477 * 商品IDに紐づいた, 商品規格を階層ごとに取得する.478 *479 * @param array $productId 商品ID480 * @return array 階層ごとの商品規格の配列481 */482 function getProductsClassLevelByProductId($productId) {483 $results = $this->getProductsClassByProductIds(array($productId));484 return $this->getProductsClassLevel($results);485 }486 487 /**488 423 * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 489 424 * … … 493 428 */ 494 429 function getProductsClassFullByProductId($productId, $has_deleted = false) { 495 $results = $this->getProductsClassByProductIds(array($productId), $has_deleted); 496 return $this->getProductsClassFull($results); 497 } 498 499 /** 500 * 商品規格の配列から, 商品規格を階層ごとに取得する. 501 * 502 * @access private 503 * @param array $productsClassResults 商品規格の結果の配列 504 * @return array 階層ごとの商品規格の配列 505 */ 506 function getProductsClassLevel($productsClassResults) { 507 foreach ($productsClassResults as $row) { 508 $productsClassLevel['level' . $row['level']][] = $row; 509 } 510 return $productsClassLevel; 511 } 512 513 /** 514 * 商品規格の配列から, 商品規格のすべての組み合わせを取得する. 515 * 516 * @access private 517 * @param array $productsClassResults 商品規格の結果の配列 518 * @ array 階層ごとの商品規格の配列 519 */ 520 function getProductsClassFull($productsClassResults) { 521 $results = $this->getProductsClassLevel($productsClassResults); 522 $productsClass = array(); 523 if (SC_Utils_Ex::isBlank($results['level1']) 524 && SC_Utils_Ex::isBlank($results['level2'])) { 525 return $results['level']; 526 } 527 528 foreach ($results['level1'] as $level1) { 529 foreach ($results['level2'] as $level2) { 530 if ($level2['parent_class_combination_id'] == $level1['class_combination_id']) { 531 $level1 = array_merge($level1, $level2); 532 } 533 } 534 $productsClass[] = $level1; 535 } 536 return $productsClass; 430 $arrRet = $this->getProductsClassByProductIds(array($productId), $has_deleted); 431 return $arrRet; 537 432 } 538 433 … … 787 682 SELECT dtb_products.*, 788 683 dtb_products_class.product_class_id, 789 dtb_products_class.class_combination_id,790 684 dtb_products_class.product_type_id, 791 685 dtb_products_class.product_code, … … 799 693 dtb_products_class.down_filename, 800 694 dtb_products_class.down_realfilename, 801 dtb_class_combination.parent_class_combination_id, 802 dtb_class_combination.classcategory_id, 803 dtb_class_combination.level as classlevel, 804 Tpcm.classcategory_id as parent_classcategory_id, 805 Tpcm.level as parent_classlevel, 695 dtb_products_class.classcategory_id1 AS classcategory_id, -- 削除 696 dtb_products_class.classcategory_id1, 697 dtb_products_class.classcategory_id2 AS parent_classcategory_id, -- 削除 698 dtb_products_class.classcategory_id2, 806 699 Tcc1.class_id as class_id, 807 700 Tcc1.name as classcategory_name, … … 811 704 LEFT JOIN dtb_products_class 812 705 ON dtb_products.product_id = dtb_products_class.product_id 813 LEFT JOIN dtb_class_combination814 ON dtb_products_class.class_combination_id = dtb_class_combination.class_combination_id815 LEFT JOIN dtb_class_combination as Tpcm816 ON dtb_class_combination.parent_class_combination_id = Tpcm.class_combination_id817 706 LEFT JOIN dtb_classcategory as Tcc1 818 ON dtb_ class_combination.classcategory_id= Tcc1.classcategory_id707 ON dtb_products_class.classcategory_id1 = Tcc1.classcategory_id 819 708 LEFT JOIN dtb_classcategory as Tcc2 820 ON Tpcm.classcategory_id= Tcc2.classcategory_id709 ON dtb_products_class.classcategory_id2 = Tcc2.classcategory_id 821 710 $where_clause 822 711 ) as prdcls
Note: See TracChangeset
for help on using the changeset viewer.
