Ignore:
Timestamp:
2012/02/14 15:10:54 (14 years ago)
Author:
Seasoft
Message:

#1641 (商品規格における木構造の廃止)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/class/SC_Product.php

    r21481 r21502  
    259259 
    260260            // 規格1が設定されている 
    261             $this->classCat1_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id1'])); 
     261            $this->classCat1_find[$productId] = $arrProductClass[0]['classcategory_id1'] > 0; // 要変更ただし、他にも改修が必要となる 
    262262            // 規格2が設定されている 
    263             $this->classCat2_find[$productId] = (!SC_Utils_Ex::isBlank($arrProductClass[0]['classcategory_id2'])); 
     263            $this->classCat2_find[$productId] = $arrProductClass[0]['classcategory_id2'] > 0; // 要変更ただし、他にも改修が必要となる 
    264264 
    265265            $this->stock_find[$productId] = false; 
     
    316316 
    317317                // #929(GC8 規格のプルダウン順序表示不具合)対応のため、2次キーは「#」を前置 
    318                 if (SC_Utils_Ex::isBlank($productsClass1)) { 
     318                if (!$this->classCat1_find[$productId]) { 
    319319                    $productsClass1 = '__unselected2'; 
    320320                } 
     
    356356            T1.down_filename, 
    357357            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 
    366368__EOS__; 
    367369        $table = <<< __EOS__ 
    368370                      dtb_products_class T1 
    369             LEFT JOIN dtb_class_combination T2 
    370                    ON T1.class_combination_id = T2.class_combination_id 
    371371            LEFT JOIN dtb_classcategory T3 
    372                    ON T2.classcategory_id = T3.classcategory_id 
     372                   ON T1.classcategory_id1 = T3.classcategory_id 
    373373            LEFT JOIN dtb_class T4 
    374374                   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 
    375379__EOS__; 
    376380 
    377381        $objQuery->setOrder('T3.rank DESC'); // XXX 
    378382        $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; 
    438385    } 
    439386 
     
    449396        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    450397        $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]; 
    454400    } 
    455401 
     
    475421 
    476422    /** 
    477      * 商品IDに紐づいた, 商品規格を階層ごとに取得する. 
    478      * 
    479      * @param array $productId 商品ID 
    480      * @return array 階層ごとの商品規格の配列 
    481      */ 
    482     function getProductsClassLevelByProductId($productId) { 
    483         $results = $this->getProductsClassByProductIds(array($productId)); 
    484         return $this->getProductsClassLevel($results); 
    485     } 
    486  
    487     /** 
    488423     * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 
    489424     * 
     
    493428     */ 
    494429    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; 
    537432    } 
    538433 
     
    787682             SELECT dtb_products.*, 
    788683                    dtb_products_class.product_class_id, 
    789                     dtb_products_class.class_combination_id, 
    790684                    dtb_products_class.product_type_id, 
    791685                    dtb_products_class.product_code, 
     
    799693                    dtb_products_class.down_filename, 
    800694                    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, 
    806699                    Tcc1.class_id as class_id, 
    807700                    Tcc1.name as classcategory_name, 
     
    811704                 LEFT JOIN dtb_products_class 
    812705                     ON dtb_products.product_id = dtb_products_class.product_id 
    813                  LEFT JOIN dtb_class_combination 
    814                      ON dtb_products_class.class_combination_id = dtb_class_combination.class_combination_id 
    815                  LEFT JOIN dtb_class_combination as Tpcm 
    816                      ON dtb_class_combination.parent_class_combination_id = Tpcm.class_combination_id 
    817706                 LEFT JOIN dtb_classcategory as Tcc1 
    818                      ON dtb_class_combination.classcategory_id = Tcc1.classcategory_id 
     707                     ON dtb_products_class.classcategory_id1 = Tcc1.classcategory_id 
    819708                 LEFT JOIN dtb_classcategory as Tcc2 
    820                      ON Tpcm.classcategory_id = Tcc2.classcategory_id 
     709                     ON dtb_products_class.classcategory_id2 = Tcc2.classcategory_id 
    821710             $where_clause 
    822711        ) as prdcls 
Note: See TracChangeset for help on using the changeset viewer.