Changeset 18829


Ignore:
Timestamp:
2010/09/27 19:30:37 (14 years ago)
Author:
nanasess
bzr:base-revision:
svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18828
bzr:committer:
Kentaro Ohkouchi <ohkouchi@loop-az.jp>
bzr:file-ids:

data/Smarty/templates/default/detail.tpl 15747@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Fdetail.tpl
data/Smarty/templates/default/list.tpl 15747@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2FSmarty%2Ftemplates%2Fdefault%2Flist.tpl
data/class/SC_Product.php 18277@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Fcomu-ver2%2Fdata%2Fclass%2FSC_Product.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php
data/class/pages/cart/LC_Page_Cart.php 15179@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fcart%2FLC_Page_Cart.php
data/class/pages/products/LC_Page_Products_Detail.php 15154@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fproducts%2FLC_Page_Products_Detail.php
data/class/pages/products/LC_Page_Products_List.php 15154@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fproducts%2FLC_Page_Products_List.php
data/class/pages/shopping/LC_Page_Shopping_Complete.php 15223@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fpages%2Fshopping%2FLC_Page_Shopping_Complete.php
data/install.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Finstall.php
bzr:mapping-version:
v4
bzr:merge:

ohkouchi@loop-az.jp-20100927102325-k7kq5liftg1lhyoq
bzr:repository-uuid:
1e3b908f-19a9-db11-a64c-001125224ba8
bzr:revision-id:
ohkouchi@loop-az.jp-20100927103023-gxi8k3mun5ajq1th
bzr:revno:
2312
bzr:revprop:branch-nick:
branches/version-2_5-dev
bzr:root:
branches/version-2_5-dev
bzr:text-revisions:

data/Smarty/templates/default/list.tpl ohkouchi@loop-az.jp-20100927102325-k7kq5liftg1lhyoq
data/class/helper/SC_Helper_DB.php ohkouchi@loop-az.jp-20100927102325-k7kq5liftg1lhyoq
data/class/pages/cart/LC_Page_Cart.php ohkouchi@loop-az.jp-20100927102325-k7kq5liftg1lhyoq
data/class/pages/shopping/LC_Page_Shopping_Complete.php ohkouchi@loop-az.jp-20100927102325-k7kq5liftg1lhyoq
bzr:timestamp:
2010-09-27 19:30:23.668999910 +0900
bzr:user-agent:
bzr2.2.0+bzr-svn1.0.3
svn:original-date:
2010-09-27T10:30:23.669000Z
Message:

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

  • カートの中身を product_class_id で特定するように修正
Location:
branches/version-2_5-dev/data
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/default/detail.tpl

    r18777 r18829  
    130130        eleDynamic.innerHTML = ''; 
    131131    } 
     132    // 商品規格 
     133    eleDynamic = document.getElementById('product_class_id'); 
     134    if ( 
     135           classcat2 
     136        && typeof classcat2.product_class_id != 'undefined' 
     137        && String(classcat2.product_class_id).length >= 1 
     138    ) { 
     139        eleDynamic.value = classcat2.product_class_id; 
     140    } else { 
     141        eleDynamic.value = '' 
     142    } 
    132143} 
    133144$(document).ready(function() { 
     
    280291                <input type="hidden" name="mode" value="cart" /> 
    281292                <input type="hidden" name="product_id" value="<!--{$tpl_product_id}-->" /> 
     293                <input type="hidden" name="product_class_id" value="<!--{$tpl_product_class_id}-->" id="product_class_id" /> 
    282294                <input type="hidden" name="favorite_product_id" value="" /> 
    283295 
  • branches/version-2_5-dev/data/Smarty/templates/default/list.tpl

    r18700 r18829  
    7373    fnSetVal("quantity", productForm["quantity"].value); 
    7474    fnSetVal("product_id", productForm["product_id"].value); 
     75    fnSetVal("product_class_id", productForm["product_class_id"].value); 
    7576    fnSubmit(); 
    7677} 
     
    109110        eleDynamic.innerHTML = ''; 
    110111    } 
     112    // 商品規格 
     113    eleDynamic = document.getElementById('product_class_id' + product_id); 
     114    if ( 
     115           classcat2 
     116        && typeof classcat2.product_class_id != 'undefined' 
     117        && String(classcat2.product_class_id).length >= 1 
     118    ) { 
     119        eleDynamic.value = classcat2.product_class_id; 
     120    } else { 
     121        eleDynamic.value = '' 
     122    } 
    111123} 
    112124//]]> 
     
    131143        <input type="hidden" name="classcategory_id1" value="" /> 
    132144        <input type="hidden" name="classcategory_id2" value="" /> 
     145        <input type="hidden" name="product_class_id" value="" /> 
    133146        <input type="hidden" name="quantity" value="" /> 
    134147        <!--{* ▲注文関連 *}--> 
     
    254267                <form name="product_form<!--{$id|escape}-->" action="?" onsubmit="return false;"> 
    255268                    <input type="hidden" name="product_id" value="<!--{$id|escape}-->" /> 
     269                    <input type="hidden" name="product_class_id" id="product_class_id<!--{$id|escape}-->" value="<!--{$tpl_product_class_id[$id]}-->" /> 
    256270                    <div class="in_cart"> 
    257271                        <!--{if $tpl_stock_find[$id]}--> 
  • branches/version-2_5-dev/data/class/SC_Product.php

    r18826 r18829  
    124124 
    125125    /** 
     126     * 商品詳細情報と商品規格を取得する. 
     127     * 
     128     * @param integer $productClassId 商品規格ID 
     129     * @return array 商品詳細情報と商品規格の配列 
     130     */ 
     131    function getDetailAndProductsClass($productClassId) { 
     132        $result = $this->getProductsClass($productClassId); 
     133        $result = array_merge($result, $this->getDetail($result['product_id'])); 
     134        return $result; 
     135    } 
     136 
     137    /** 
    126138     * 商品IDに紐づく商品規格を自分自身に設定する. 
    127139     * 
     
    163175            $classCategories = array(); 
    164176            $classCategories['']['']['name'] = '選択してください'; 
     177            $classCategories['']['']['product_class_id'] = $arrProductClass[0]['product_class_id']; 
     178            $this->product_class_id[$productId] = $arrProductClass[0]['product_class_id']; 
    165179            foreach ($arrProductClass as $productsClass) { 
    166180                $productsClass1 = $productsClass['classcategory_id1']; 
     
    201215                // 商品コード 
    202216                $classCategories[$productsClass1][$productsClass2]['product_code'] = $productsClass['product_code']; 
     217                // 商品規格ID 
     218                $classCategories[$productsClass1][$productsClass2]['product_class_id'] = $productsClass['product_class_id']; 
    203219            } 
    204220 
     
    211227 
    212228    /** 
    213      * 複数の商品IDに紐づいた, 商品規格を取得する. 
    214      * 
    215      * @param array $productIds 商品IDの配列 
     229     * SC_Query インスタンスに設定された検索条件を使用して商品規格を取得する. 
     230     * 
     231     * @param SC_Query $objQuery SC_Queryインスタンス 
     232     * @param array $params 検索パラメータの配列 
    216233     * @return array 商品規格の配列 
    217234     */ 
    218     function getProductsClassByProductIds($productIds = array()) { 
    219         if (empty($productIds)) { 
    220             return array(); 
    221         } 
    222         $objQuery =& SC_Query::getSingletonInstance(); 
    223         $objQuery->setWhere('product_id IN (' . implode(', ', array_pad(array(), count($productIds), '?')) . ')'); 
    224         $objQuery->setOrder("T2.level DESC"); 
     235    function getProductsClassByQuery(&$objQuery, $params) { 
    225236        // 末端の規格を取得 
    226237        $col = <<< __EOS__ 
     
    254265                   ON T3.class_id = T4.class_id 
    255266__EOS__; 
    256         $arrRet = $objQuery->select($col, $table, "", $productIds); 
     267        $arrRet = $objQuery->select($col, $table, "", $params); 
    257268        $levels = array(); 
    258269        $parents = array(); 
     
    317328 
    318329    /** 
     330     * 商品規格IDから商品規格を取得する. 
     331     */ 
     332    function getProductsClass($productClassId) { 
     333        $objQuery =& SC_Query::getSingletonInstance(); 
     334        $objQuery->setWhere('product_class_id = ?'); 
     335        $objQuery->setOrder("T2.level DESC"); 
     336        $results = $this->getProductsClassByQuery($objQuery, $productClassId); 
     337        $productsClass = $this->getProductsClassFull($results); 
     338        return $productsClass[0]; 
     339    } 
     340 
     341    /** 
     342     * 複数の商品IDに紐づいた, 商品規格を取得する. 
     343     * 
     344     * @param array $productIds 商品IDの配列 
     345     * @return array 商品規格の配列 
     346     */ 
     347    function getProductsClassByProductIds($productIds = array()) { 
     348        if (empty($productIds)) { 
     349            return array(); 
     350        } 
     351        $objQuery =& SC_Query::getSingletonInstance(); 
     352        $objQuery->setWhere('product_id IN (' . implode(', ', array_pad(array(), count($productIds), '?')) . ')'); 
     353        $objQuery->setOrder("T2.level DESC"); 
     354        return $this->getProductsClassByQuery($objQuery, $productIds); 
     355    } 
     356 
     357    /** 
    319358     * 商品IDに紐づいた, 商品規格を階層ごとに取得する. 
    320359     * 
    321      * @param array $productId 商品IDの配列 
     360     * @param array $productId 商品ID 
    322361     * @return array 階層ごとの商品規格の配列 
    323362     */ 
    324363    function getProductsClassLevelByProductId($productId) { 
    325364        $results = $this->getProductsClassByProductIds(array($productId)); 
    326         foreach ($results as $row) { 
     365        return $this->getProductsClassLevel($results); 
     366    } 
     367 
     368    /** 
     369     * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 
     370     * 
     371     * @param array $productId 商品ID 
     372     * @return array すべての組み合わせの商品規格の配列 
     373     */ 
     374    function getProductsClassFullByProductId($productId) { 
     375        $results = $this->getProductsClassByProductIds(array($productId)); 
     376        return $this->getProductsClassFull($results); 
     377    } 
     378 
     379    /** 
     380     * 商品規格の配列から, 商品規格を階層ごとに取得する. 
     381     * 
     382     * @access private 
     383     * @param array $productsClassResults 商品規格の結果の配列 
     384     * @return array 階層ごとの商品規格の配列 
     385     */ 
     386    function getProductsClassLevel($productsClassResults) { 
     387        foreach ($productsClassResults as $row) { 
    327388            $productsClassLevel["level" . $row['level']][] = $row; 
    328389        } 
     
    331392 
    332393    /** 
    333      * 商品IDに紐づいた, 商品規格をすべての組み合わせごとに取得する. 
    334      * 
    335      * @param array $productId 商品IDの配列 
    336      * @return array すべての組み合わせの商品規格の配列 
    337      */ 
    338     function getProductsClassFullByProductId($productId) { 
    339         $results = $this->getProductsClassLevelByProductId($productId); 
     394     * 商品規格の配列から, 商品規格のすべての組み合わせを取得する. 
     395     * 
     396     * @access private 
     397     * @param array $productsClassResults 商品規格の結果の配列 
     398     * @ array 階層ごとの商品規格の配列 
     399     */ 
     400    function getProductsClassFull($productsClassResults) { 
     401        $results = $this->getProductsClassLevel($productsClassResults); 
    340402        $productsClass = array(); 
    341         if (SC_Utils_Ex::isBlank($results["level1"]) && SC_Utils_Ex::isBlank($results["level2"])) { 
     403        if (SC_Utils_Ex::isBlank($results["level1"]) 
     404            && SC_Utils_Ex::isBlank($results["level2"])) { 
    342405            return $results["level"]; 
    343406        } 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_DB.php

    r18823 r18829  
    256256        $objPage->tpl_total_point = 0;      // ポイント合計 
    257257 
     258        $objProduct = new SC_Product(); 
    258259        // カート内情報の取得 
    259260        $arrQuantityInfo_by_product = array(); 
     
    261262        foreach ($objCartSess->getCartList() as $arrCart) { 
    262263            // 商品規格情報の取得 
    263             $arrData = $this->sfGetProductsClass($arrCart['id']); 
     264            $arrData = $objProduct->getDetailAndProductsClass($arrCart['id']); 
    264265            $limit = null; 
    265266            // DBに存在する商品 
     
    292293 
    293294                // (商品規格単位でなく)商品単位での評価のための準備 
    294                 $product_id = $arrCart['id'][0]; 
     295                $product_id = $arrData['product_id']; 
    295296                $arrQuantityInfo_by_product[$product_id]['quantity'] += $quantity; 
    296297                $arrQuantityInfo_by_product[$product_id]['sale_limit'] = $arrData['sale_limit']; 
     
    301302                $objPage->arrProductsClass[$cnt]['cart_no'] = $arrCart['cart_no']; 
    302303                $objPage->arrProductsClass[$cnt]['class_name1'] = 
    303                     isset($arrClassName[$arrData['class_id1']]) 
    304                         ? $arrClassName[$arrData['class_id1']] : ""; 
     304                    isset($arrData['class_name1']) 
     305                        ? $arrData['class_name1'] : ""; 
    305306 
    306307                $objPage->arrProductsClass[$cnt]['class_name2'] = 
    307                     isset($arrClassName[$arrData['class_id2']]) 
    308                         ? $arrClassName[$arrData['class_id2']] : ""; 
    309  
    310                 $objPage->arrProductsClass[$cnt]['classcategory_name1'] = 
    311                     $arrClassCatName[$arrData['classcategory_id1']]; 
    312  
    313                 $objPage->arrProductsClass[$cnt]['classcategory_name2'] = 
    314                     $arrClassCatName[$arrData['classcategory_id2']]; 
    315  
     308                    isset($arrData['class_name2']) 
     309                        ? $arrData['class_name2'] : ""; 
     310 
     311                $objPage->arrProductsClass[$cnt]['classcategory_name1'] = $arrData['name1']; 
     312 
     313                $objPage->arrProductsClass[$cnt]['classcategory_name2'] = $arrData['name2']; 
    316314                // 価格の登録 
    317315                $objCartSess->setProductValue($arrCart['id'], 'price', $arrData['price02']); 
  • branches/version-2_5-dev/data/class/pages/cart/LC_Page_Cart.php

    r18701 r18829  
    7878        $objCustomer = new SC_Customer(); 
    7979        $objDb = new SC_Helper_DB_Ex(); 
    80  
     80        $objProduct = new SC_Product(); 
    8181        // 商品購入中にカート内容が変更された。 
    8282        if($objCartSess->getCancelPurchase()) { 
     
    106106            for ($i = 0; $i < $max; $i++) { 
    107107                // 商品規格情報の取得 
    108                 $this->arrData = $objDb->sfGetProductsClass($arrRet[$i]['id']); 
     108                $this->arrData = $objProduct->getProductsClass($arrRet[$i]['id']); 
    109109                // DBに存在する商品 
    110110                if($this->arrData != "") { 
  • branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_Detail.php

    r18826 r18829  
    169169 
    170170        $this->tpl_stock_find = $objProduct->stock_find[$product_id]; 
     171        $this->tpl_product_class_id = $objProduct->classCategories[$product_id]['']['']['product_class_id']; 
    171172 
    172173        require_once DATA_PATH . 'module/Services/JSON.php'; 
     
    191192                    $classcategory_id1 = $_POST['classcategory_id1']; 
    192193                    $classcategory_id2 = $_POST['classcategory_id2']; 
     194                    $product_class_id = $_POST['product_class_id']; 
    193195 
    194196                    if (!empty($_POST['gmo_oneclick'])) { 
     
    207209                    // 規格IDを取得 
    208210                    $objProduct = new SC_Product(); 
    209                     $product_class_id = $objProduct->getClasscategoryIdsByProductClassId($_POST['product_id'],$classcategory_id1,$classcategory_id2); 
    210                     $objCartSess->addProduct(array($_POST['product_id'], $product_class_id, $classcategory_id1, $classcategory_id2), $this->objFormParam->getValue('quantity')); 
     211                    $objCartSess->addProduct($product_class_id, $this->objFormParam->getValue('quantity')); 
    211212 
    212213                    if (!empty($_POST['gmo_oneclick'])) { 
  • branches/version-2_5-dev/data/class/pages/products/LC_Page_Products_List.php

    r18826 r18829  
    157157                // 規格IDを取得 
    158158                $objProduct = new SC_Product(); 
    159                 $product_class_id = $objProduct->getClasscategoryIdsByProductClassId($product_id,$classcategory_id1,$classcategory_id2); 
     159                $product_class_id = $this->arrForm['product_class_id']; 
    160160                $objCartSess = new SC_CartSession(); 
    161                 $objCartSess->addProduct(array($product_id, $product_class_id, $classcategory_id1, $classcategory_id2), $this->arrForm['quantity']); 
    162                     $this->sendRedirect($this->getLocation(URL_CART_TOP)); 
    163                     exit; 
     161                $objCartSess->addProduct($product_class_id, $this->arrForm['quantity']); 
     162                $this->sendRedirect($this->getLocation(URL_CART_TOP)); 
     163                exit; 
    164164            } 
    165165            foreach (array_keys($this->arrProducts) as $key) { 
     
    475475 
    476476        $this->tpl_stock_find = $objProduct->stock_find; 
     477        $this->tpl_product_class_id = $objProduct->product_class_id; 
    477478 
    478479        $productsClassCategories = $objProduct->classCategories; 
  • branches/version-2_5-dev/data/class/pages/shopping/LC_Page_Shopping_Complete.php

    r18824 r18829  
    536536        $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name"); 
    537537 
     538        $objProduct = new SC_Product(); 
    538539        for ($i = 0; $i < $max; $i++) { 
    539540            // 商品規格情報の取得 
    540             $arrData = $objDb->sfGetProductsClass($arrCart[$i]['id']); 
     541            $arrData = $objProduct->getDetailAndProductsClass($arrCart[$i]['id']); 
    541542 
    542543            // 存在する商品のみ表示する。 
    543544            if($arrData != "") { 
    544545                $sqlval['order_id'] = $order_id; 
    545                 $sqlval['product_id'] = $arrCart[$i]['id'][0]; 
    546                 $sqlval['product_class_id'] = $arrCart[$i]['id'][1]; 
    547                 $sqlval['classcategory_id1'] = $arrCart[$i]['id'][2]; 
    548                 $sqlval['classcategory_id2'] = $arrCart[$i]['id'][3]; 
     546                $sqlval['product_id'] = $arrData['product_id']; 
     547                $sqlval['product_class_id'] = $arrData['product_class_id']; 
     548                // FIXME product_class_id のみで対応予定のため暫定対応 
     549                $sqlval['classcategory_id1'] = is_null($arrData['classcategory_id1']) ? 0 : $sqlval['classcategory_id1']; 
     550                $sqlval['classcategory_id2'] = is_null($arrData['classcategory_id2']) ? 0 : $sqlval['classcategory_id2']; 
    549551                $sqlval['product_name'] = $arrData['name']; 
    550552                $sqlval['product_code'] = $arrData['product_code']; 
    551                 $sqlval['classcategory_name1'] = $arrClassCatName[$arrData['classcategory_id1']]; 
    552                 $sqlval['classcategory_name2'] = $arrClassCatName[$arrData['classcategory_id2']]; 
     553                $sqlval['classcategory_name1'] = $arrData['name1']; 
     554                $sqlval['classcategory_name2'] = $arrData['name2']; 
    553555                $sqlval['point_rate'] = $arrCart[$i]['point_rate']; 
    554556                $sqlval['price'] = $arrCart[$i]['price']; 
     
    665667    } 
    666668 
    667     // 在庫を減らす処理 
    668     function lfReduceStock(&$objQuery, $arrID, $quantity) { 
     669    /** 
     670     * 在庫を減らす処理 
     671     * 
     672     * FIXME 件数カウントバッチは最後にまとめて実行すること. 
     673     */ 
     674    function lfReduceStock(&$objQuery, $product_class_id, $quantity) { 
    669675        $objDb = new SC_Helper_DB_Ex(); 
    670676 
     
    675681 
    676682        $objProduct = new SC_Product(); 
    677         $productsClass = $objProduct->getProductsClassFullByProductId($arrID[0]); 
    678  
    679         foreach ($productsClass as $val) { 
    680             if ($val['classcategory_id1'] == $arrID[2] 
    681                 && $val['classcategory_id2'] == $arrID[3]) { 
    682  
    683                 if (($val['stock_unlimited'] != '1' && $val['stock'] < $quantity) || $quantity == 0) { 
    684                     // 売り切れエラー 
    685                     $objQuery->rollback(); 
    686                     SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true); 
    687                 } 
    688  
    689                 // 在庫を減らす 
    690                 $arrRawSql = array(); 
    691                 $arrRawSql['stock'] = 'stock - ?'; 
    692                 $arrRawSqlVal[] = $quantity; 
    693                 $objQuery->update('dtb_products_class', array(), "product_class_id = ?", array($val['product_class_id']), $arrRawSql, $arrRawSqlVal); 
    694                 break; 
    695             } 
    696         } 
     683        $productsClass = $objProduct->getDetailAndProductsClass($product_class_id); 
     684 
     685        if (($productsClass['stock_unlimited'] != '1' && $productsClass['stock'] < $quantity) 
     686            || $quantity == 0) { 
     687            // 売り切れエラー 
     688            $objQuery->rollback(); 
     689            SC_Utils_Ex::sfDispSiteError(SOLD_OUT, "", true); 
     690        } 
     691 
     692        // 在庫を減らす 
     693        $arrRawSql = array(); 
     694        $arrRawSql['stock'] = 'stock - ?'; 
     695        $arrRawSqlVal[] = $quantity; 
     696        $objQuery->update('dtb_products_class', array(), "product_class_id = ?", array($val['product_class_id']), $arrRawSql, $arrRawSqlVal); 
    697697 
    698698        // 在庫無し商品の非表示対応 
Note: See TracChangeset for help on using the changeset viewer.