# 挑戰ec-cube的套餐組合part3

- URL: https://justfly.idv.tw/%e6%8c%91%e6%88%b0ec-cube%e7%9a%84%e5%a5%97%e9%a4%90%e7%b5%84%e5%90%88part3/
- 日期: 2008-12-03
- 分類: WEB&amp;RIA
- 標籤: ec-cube, MySQL, Smarty

[前一次的方法](http://justblog.justfly.idv.tw/2008/11/21/Just_522.html)果然行不通

想一想老闆的要求是配套的選擇性商品都單一價錢

所以這次我把「セット組み合わせ」這一個規格改成0 1 2 3…代表搭配的數目

然後再加上一個oneprice的欄位當單價

然後新增一個setdetail.php的php檔

- 在\data\class_extends\page_extends\products\ 複製LC_Page_Products_Detail_Ex.php ->LC_Page_Products_SetDetail_Ex.php

- 在\data\class\pages\products\ 複製LC_Page_Products_Detail.php ->LC_Page_Products_SetDetail.php

- 在\html\user_data\packages\mystyle\ 複製detail.tpl ->setdetail.tpl

當然還有些小地方要改（如果要用cleanURL的話當然.htaccess也要動一下）

接下來我預設最多只能搭配4個單品（重複與沒重複的總數量）

多一件單品的折扣也先寫死（其實價格在輸入規格時就決定了這邊只是給使用者玩爽的^^”）

單品的種類則是從「推薦商品」讀過來

將子可以少寫另一個關連的db（而且搭配的單品放在推薦也很合理吧）

另外多加了兩個要送到購物車的參數：配套明細pstext（寫入db）setnum（判斷目前session中有沒有相同的套餐）

setdetail.tpl中主要加了一點code：

```
,0);
id_arrcamara = new Array("",0);

setkumiarr_id = new Array("",0);
setkumiarr_num = new Array("",0);
waribikiarr = new Array(0,0.03,0.04,0.05,0.06);
var basicPrice = ;//基價
var onePrice = ;//單價
function moption(i,s){
	var tmp1 =new Array();//（商品編號,數量）
	var tmp2 =0;//總價
	var tmp3 =0;//總數量
	var m=s[s.selectedIndex].value;//各價
	var n=s[s.selectedIndex].label;//各數量
	eval("document.getElementById(\"PRICE_" + arrcamara[i] +"\").innerTEXT = '"+ n*m + "'");
	eval("document.getElementById(\"NUM_" + arrcamara[i] +"\").innerTEXT = '"+ n + "'");
	for(var j=0;j
```

```
個数
```

```
1台
      2台
      3台
      4台
    
    
      3.0%割引
      4.0%割引
      5.0%割引
      6.0%割引
    
  
  
    
    
    
       
        
         
      
        
        
        
        
        
         
      製品型番：
        
          
        
      
        販売価格 (税込)：
        
        
        円
       
      個数：
        
          数量選択
          1
          2
          3
          4
          5
          6
          7
          8
```

\data\class\pages\products\LC_Page_Products_SetDetail.php在process（）跟mobileProcess（）都加入

不過老闆其實不希望可以用手機購買啦

所以mobileProcess（）可以省略....

```
$objCartSess->addProduct(array($_POST['product_id'], $classcategory_id1, $classcategory_id2), $this->objFormParam->getValue('quantity'),"",$_POST['pstext'], $_POST['setnum']);
```

\data\class\SC_CartSession.php的addProduct（）改成：

```
// カートへの商品追加
    function addProduct($id, $quantity, $campaign_id = "", $pstext = "", $setnum = "") {
        $find = false;
        $max = $this->getMax();
        for($i = 0; $i key][$i]['id'] == $id && $_SESSION[$this->key][$i]['setnum'] == $setnum) {
                $val = $_SESSION[$this->key][$i]['quantity'] + $quantity;
                if(strlen($val) key][$i]['quantity']+= $quantity;
                    if(!empty($campaign_id)){
                        $_SESSION[$this->key][$i]['campaign_id'] = $campaign_id;
                        $_SESSION[$this->key][$i]['is_campaign'] = true;
                    }
                }
                $find = true;
            }
        }
        if(!$find) {
            $_SESSION[$this->key][$max+1]['id'] = $id;
            $_SESSION[$this->key][$max+1]['quantity'] = $quantity;
            $_SESSION[$this->key][$max+1]['pstext'] = $pstext;
			$_SESSION[$this->key][$max+1]['setnum'] = $setnum;
            $_SESSION[$this->key][$max+1]['cart_no'] = $this->getNextCartID();
            if(!empty($campaign_id)){
                $_SESSION[$this->key][$max+1]['campaign_id'] = $campaign_id;
                $_SESSION[$this->key][$max+1]['is_campaign'] = true;
            }
        }
    }
```

\data\class\helper\SC_Helper_DB.php加入：

```
$objPage->arrProductsClass[$cnt]['pstext'] = $arrCart[$i]['pstext'];
```

\data\Smarty\templates\mystyle\cart\index.tpl加入:

```
SET：
```

\data\Smarty\templates\mystyle\shopping\confirm.tpl加入:

```
SET：
```

然後在mySQL中的dtb_order_detail加一個欄位pstext

最後在\data\class\pages\shopping\LC_Page_Shopping_Complete.php加入:

```
$sqlval['pstext'] = $arrCart[$i]['pstext'];
```

目前就是可以安安穩穩的放入購物車了

再來還有些顯示上的後續

動到了再說吧.....
