Ignore:
Timestamp:
2010/10/29 21:00:06 (16 years ago)
Author:
nanasess
bzr:base-revision:
svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18874
bzr:committer:
Kentaro Ohkouchi <[email protected]>
bzr:file-ids:

data/Smarty/templates/admin/order/product_select.tpl 17293@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fadmin%2Forder%2Fproduct_select.tpl
data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php 15594@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fadmin%2Forder%2FLC_Page_Admin_Order_Edit.php
data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php 17293@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2Fpages%2Fadmin%2Forder%2FLC_Page_Admin_Order_ProductSelect.php
bzr:mapping-version:
v4
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
[email protected]
bzr:revno:
2355
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:timestamp:
2010-10-29 21:00:01.309999943 +0900
bzr:user-agent:
bzr2.2.0+bzr-svn1.0.3
svn:original-date:
2010-10-29T12:00:01.310000Z
Message:

規格のデータベースを木構造に(#781)

  • 商品追加時の規格のプルダウンを修正
  • 追加商品検索時のパフォーマンス改善
Location:
branches/version-2_5-dev/data/class/pages/admin/order
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

    r18872 r18875  
    214214            // POST情報で上書き 
    215215            $this->objFormParam->setParam($_POST); 
    216             if (!empty($_POST['add_product_id'])) { 
    217                 $this->lfInsertProduct($_POST['add_product_id'], $_POST['add_classcategory_id1'], $_POST['add_classcategory_id2']); 
    218             } elseif (!empty($_POST['edit_product_id'])) { 
    219                 $this->lfUpdateProduct($_POST['edit_product_id'], $_POST['edit_classcategory_id1'], $_POST['edit_classcategory_id2'], $_POST['no']); 
     216            if (!empty($_POST['add_product_class_id'])) { 
     217                $this->lfInsertProduct($_POST['add_product_class_id']); 
     218            } elseif (!empty($_POST['edit_product_class_id'])) { 
     219                $this->lfUpdateProduct($_POST['edit_product_class_id'], $_POST['no']); 
    220220            } 
    221221            $arrData = $_POST; 
     
    695695    } 
    696696 
    697     function lfInsertProduct($product_id, $classcategory_id1, $classcategory_id2) { 
    698         $arrProduct = $this->lfGetProductsClass($product_id, $classcategory_id1, $classcategory_id2); 
     697    function lfInsertProduct($product_class_id) { 
     698        $objProduct = new SC_Product(); 
     699        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id)); 
    699700        $this->arrForm = $this->objFormParam->getFormParamList(); 
    700701        $existes = false; 
     
    704705            foreach ($this->arrForm['product_class_id']['value'] AS $key=>$val) { 
    705706                // 既に同じ商品がある場合 
    706                 if ($val == $product_id && $this->arrForm['product_id']['classcategory_id1'][$key] == $classcategory_id1 && $this->arrForm['product_id']['classcategory_id2'][$key] == $classcategory_id2) { 
     707                if ($val == $product_class_id) { 
    707708                    $existes = true; 
    708709                    $existes_key = $key; 
     
    720721    } 
    721722 
    722     function lfUpdateProduct($product_id, $classcategory_id1, $classcategory_id2, $no) { 
    723         $arrProduct = $this->lfGetProductsClass($product_id, $classcategory_id1, $classcategory_id2); 
     723    function lfUpdateProduct($product_class_id, $no) { 
     724        $objProduct = new SC_Product(); 
     725        $arrProduct = $this->lfGetProductsClass($objProduct->getDetailAndProductsClass($product_class_id)); 
    724726        $this->arrForm = $this->objFormParam->getFormParamList(); 
    725727        $this->lfSetProductData($arrProduct, $no); 
     
    732734            } 
    733735            if ($no === null) { 
    734                 $this->arrForm[$key]['value'][] = $arrProduct[$key]; 
     736                $this->arrForm[$key]['value'][] = $val; 
    735737            } else { 
    736                 $this->arrForm[$key]['value'][$no] = $arrProduct[$key]; 
    737             } 
    738         } 
    739     } 
    740  
    741     function lfGetProductsClass($product_class_id) { 
    742         $objDb = new SC_Helper_DB_Ex(); 
    743         $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); 
    744         $arrRet = $objDb->sfGetProductsClass(array($product_class_id), true); 
    745  
    746         $arrProduct['price'] = $arrRet['price02']; 
     738                $this->arrForm[$key]['value'][$no] = $val; 
     739            } 
     740        } 
     741    } 
     742 
     743    function lfGetProductsClass($productsClass) { 
     744        $arrProduct['price'] = $productsClass['price02']; 
    747745        $arrProduct['quantity'] = 1; 
    748         $arrProduct['product_id'] = $arrRet['product_id']; 
    749         $arrProduct['product_class_id'] = $arrRet['product_class_id']; 
    750         $arrProduct['point_rate'] = $arrRet['point_rate']; 
    751         $arrProduct['product_code'] = $arrRet['product_code']; 
    752         $arrProduct['product_name'] = $arrRet['name']; 
    753         $arrProduct['classcategory_name1'] = $arrClassCatName[$arrRet['classcategory_id1']]; 
    754         $arrProduct['classcategory_name2'] = $arrClassCatName[$arrRet['classcategory_id2']]; 
     746        $arrProduct['product_id'] = $productsClass['product_id']; 
     747        $arrProduct['product_class_id'] = $productsClass['product_class_id']; 
     748        $arrProduct['point_rate'] = $productsClass['point_rate']; 
     749        $arrProduct['product_code'] = $productsClass['product_code']; 
     750        $arrProduct['product_name'] = $productsClass['name']; 
     751        $arrProduct['classcategory_name1'] = $productsClass['classcategory_name1']; 
     752        $arrProduct['classcategory_name2'] = $productsClass['classcategory_name2']; 
    755753 
    756754        return $arrProduct; 
    757755    } 
     756 
    758757 
    759758    /** 
  • branches/version-2_5-dev/data/class/pages/admin/order/LC_Page_Admin_Order_ProductSelect.php

    r18872 r18875  
    2525// {{{ requires 
    2626require_once(CLASS_PATH . "pages/LC_Page.php"); 
     27require_once(DATA_PATH . 'module/Services/JSON.php'); 
    2728 
    2829/** 
     
    111112            } 
    112113 
    113             /* 
    114              * FIXME パフォーマンスに問題があるため SC_Product::lists() を使用する 
    115              */ 
    116114            $objProduct = new SC_Product(); 
    117115            $productIds = $objProduct->findProductIds($objQuery, $arrval); 
     
    142140            $this->arrProducts = $objProduct->lists($objQuery, $arrval); 
    143141            $objProduct->setProductsClassByProductIds($productIds); 
     142            $objJson = new Services_JSON(); 
     143            $this->tpl_javascript .= 'productsClassCategories = ' . $objJson->encode($objProduct->classCategories) . '; '; 
     144 
     145            foreach ($this->arrProducts as $arrProduct) { 
     146                $js_fnOnLoad .= "fnSetClassCategories(document.product_form{$arrProduct['product_id']});\n"; 
     147            } 
     148 
     149            $this->tpl_javascript .= 'function fnOnLoad(){' . $js_fnOnLoad . '}'; 
     150            $this->tpl_onload .= 'fnOnLoad(); '; 
     151 
    144152            // 規格1クラス名 
    145153            $this->tpl_class_name1 = $objProduct->className1; 
     
    155163            // 規格2が設定されている 
    156164            $this->tpl_classcat_find2 = $objProduct->classCat2_find; 
    157  
     165            $this->tpl_product_class_id = $objProduct->product_class_id; 
    158166            $this->tpl_stock_find = $objProduct->stock_find; 
    159             $this->tpl_product_class_id = $objProduct->product_class_id; 
    160             $this->tpl_product_type = $objProduct->product_type; 
    161  
    162             // FIXME 規格のプルダウンを要修正 
    163             $this->tpl_javascript = ""; 
    164167        } 
    165168 
     
    201204        } 
    202205    } 
    203  
    204     // FIXME SC_Product クラスを使用する 
    205     /* 規格セレクトボックスの作成 */ 
    206     function lfMakeSelect($product_id, $arrClassName, $arrClassCatName) { 
    207  
    208         $classcat_find1 = false; 
    209         $classcat_find2 = false; 
    210         // 在庫ありの商品の有無 
    211         $stock_find = false; 
    212  
    213         // 商品規格情報の取得 
    214         $arrProductsClass = $this->lfGetProductsClass($product_id); 
    215  
    216         // 規格1クラス名の取得 
    217         $this->tpl_class_name1[$product_id] = 
    218             isset($arrClassName[$arrProductsClass[0]['class_id1']]) 
    219             ? $arrClassName[$arrProductsClass[0]['class_id1']] 
    220             : ""; 
    221  
    222         // 規格2クラス名の取得 
    223         $this->tpl_class_name2[$product_id] = 
    224             isset($arrClassName[$arrProductsClass[0]['class_id2']]) 
    225             ? $arrClassName[$arrProductsClass[0]['class_id2']] 
    226             : ""; 
    227  
    228         // すべての組み合わせ数 
    229         $count = count($arrProductsClass); 
    230  
    231         $classcat_id1 = ""; 
    232  
    233         $arrSele = array(); 
    234         $arrList = array(); 
    235  
    236         $list_id = 0; 
    237         $arrList[0] = "\tlist". $product_id. "_0 = new Array('選択してください'"; 
    238         $arrVal[0] = "\tval". $product_id. "_0 = new Array(''"; 
    239  
    240         for ($i = 0; $i < $count; $i++) { 
    241             // 在庫のチェック 
    242             if($arrProductsClass[$i]['stock'] <= 0 && $arrProductsClass[$i]['stock_unlimited'] != '1') { 
    243                 continue; 
    244             } 
    245  
    246             $stock_find = true; 
    247  
    248             // 規格1のセレクトボックス用 
    249             if($classcat_id1 != $arrProductsClass[$i]['classcategory_id1']){ 
    250                 $arrList[$list_id].=");\n"; 
    251                 $arrVal[$list_id].=");\n"; 
    252                 $classcat_id1 = $arrProductsClass[$i]['classcategory_id1']; 
    253                 $arrSele[$classcat_id1] = $arrClassCatName[$classcat_id1]; 
    254                 $list_id++; 
    255  
    256                 $arrList[$list_id] = ""; 
    257                 $arrVal[$list_id] = ""; 
    258             } 
    259  
    260             // 規格2のセレクトボックス用 
    261             $classcat_id2 = $arrProductsClass[$i]['classcategory_id2']; 
    262  
    263             // セレクトボックス表示値 
    264             if($arrList[$list_id] == "") { 
    265                 $arrList[$list_id] = "\tlist". $product_id. "_". $list_id. " = new Array('選択してください', '". $arrClassCatName[$classcat_id2]. "'"; 
    266             } else { 
    267                 $arrList[$list_id].= ", '".$arrClassCatName[$classcat_id2]."'"; 
    268             } 
    269  
    270             // セレクトボックスPOST値 
    271             if($arrVal[$list_id] == "") { 
    272                 $arrVal[$list_id] = "\tval". $product_id. "_". $list_id. " = new Array('', '". $classcat_id2. "'"; 
    273             } else { 
    274                 $arrVal[$list_id].= ", '".$classcat_id2."'"; 
    275             } 
    276         } 
    277  
    278         $arrList[$list_id].=");\n"; 
    279         $arrVal[$list_id].=");\n"; 
    280  
    281         // 規格1 
    282         $this->arrClassCat1[$product_id] = $arrSele; 
    283  
    284         $lists = "\tlists".$product_id. " = new Array("; 
    285         $no = 0; 
    286         foreach($arrList as $val) { 
    287             $this->tpl_javascript.= $val; 
    288             if ($no != 0) { 
    289                 $lists.= ",list". $product_id. "_". $no; 
    290             } else { 
    291                 $lists.= "list". $product_id. "_". $no; 
    292             } 
    293             $no++; 
    294         } 
    295         $this->tpl_javascript.= $lists.");\n"; 
    296  
    297         $vals = "\tvals".$product_id. " = new Array("; 
    298         $no = 0; 
    299         foreach($arrVal as $val) { 
    300             $this->tpl_javascript.= $val; 
    301             if ($no != 0) { 
    302                 $vals.= ",val". $product_id. "_". $no; 
    303             } else { 
    304                 $vals.= "val". $product_id. "_". $no; 
    305             } 
    306             $no++; 
    307         } 
    308         $this->tpl_javascript.= $vals.");\n"; 
    309  
    310         // 選択されている規格2ID 
    311         $classcategory_id = "classcategory_id". $product_id; 
    312  
    313         $classcategory_id_2 = $classcategory_id . "_2"; 
    314         if (!isset($classcategory_id_2)) $classcategory_id_2 = ""; 
    315         if (!isset($_POST[$classcategory_id_2])) $_POST[$classcategory_id_2] = ""; 
    316  
    317         $this->tpl_onload .= "lnSetSelect('" . $classcategory_id ."_1', " 
    318             . "'" . $classcategory_id_2 . "'," 
    319             . "'" . $product_id . "'," 
    320             . "'" . $_POST[$classcategory_id_2] ."'); "; 
    321  
    322         // 規格1が設定されている 
    323         if($arrProductsClass[0]['classcategory_id1'] != '0') { 
    324             $classcat_find1 = true; 
    325         } 
    326  
    327         // 規格2が設定されている 
    328         if($arrProductsClass[0]['classcategory_id2'] != '0') { 
    329             $classcat_find2 = true; 
    330         } 
    331  
    332         $this->tpl_classcat_find1[$product_id] = $classcat_find1; 
    333         $this->tpl_classcat_find2[$product_id] = $classcat_find2; 
    334         $this->tpl_stock_find[$product_id] = $stock_find; 
    335     } 
    336  
    337     /* 商品規格情報の取得 */ 
    338     function lfGetProductsClass($product_id) { 
    339         $arrRet = array(); 
    340         if(SC_Utils_Ex::sfIsInt($product_id)) { 
    341             // 商品規格取得 
    342             $objQuery = new SC_Query(); 
    343             $col = "product_class_id, classcategory_id1, classcategory_id2, class_id1, class_id2, stock, stock_unlimited"; 
    344             $table = "vw_product_class AS prdcls"; 
    345             $where = "product_id = ?"; 
    346             $objQuery->setOrder("rank1 DESC, rank2 DESC"); 
    347             $arrRet = $objQuery->select($col, $table, $where, array($product_id)); 
    348         } 
    349         return $arrRet; 
    350     } 
    351206} 
    352207?> 
Note: See TracChangeset for help on using the changeset viewer.