php5 |
|
PIGGY
更新時間:2009/8/27 上午 06:05:45 |
|
第18-10頁裡的wfcart.php的問題 1.$cart =& $_SESSION['cart']; // 將購物車的值設定為 Session 為什麼要在前面加上"&"是指5-8頁的傳址呼叫嗎?不加"&"會怎麼樣呢?
-----------------------------------------------
2.class wfCart { var $total = 0; var $itemcount = 0; var $items = array(); var $itemprices = array(); var $itemqtys = array(); var $iteminfo = array();
function cart() {} // constructor function
定義wfCart類別
購物車商品總價.數量 初值為0 為何其他屬性初值要設定為array()呢?
function cart() {}是做什麼用的呢?
-----------------------------------------------
3.function get_contents() { $items = array(); foreach($this->items as $tmp_item) { $item = FALSE;
$item['id'] = $tmp_item; $item['qty'] = $this->itemqtys[$tmp_item]; $item['price'] = $this->itemprices[$tmp_item]; $item['info'] = $this->iteminfo[$tmp_item]; $item['subtotal'] = $item['qty'] * $item['price']; $items[] = $item; } return $items; } $items = array();跟類別裡的屬性var $items是同個一個嗎?為什麼還要再寫一次在get_contents()裡面?
foreach($this->items as $tmp_item)裡面的陣列名稱$this->items是代表?使用wfCart類別裡的items屬性
$item = FALSE; 為何指派FALSE
不懂$item['id'] = $tmp_item; $item['qty'] = $this->itemqtys[$tmp_item]; $items[] = $item; return $items;代表的是什麼? 它和cart.php 104-116有什麼關連? cart.php和wfcart.php的$item['id']是一樣的嗎? -----------------------------------------------
4.function add_item($itemid,$qty=1,$price = FALSE, $info = FALSE) { if(!$price) { $price = wf_get_price($itemid,$qty); }
if(!$info) { $info = wf_get_info($itemid); }
if($this->itemqtys[$itemid] > 0) { $this->itemqtys[$itemid] = $qty + $this->itemqtys[$itemid]; $this->_update_total(); } else { $this->items[]=$itemid; $this->itemqtys[$itemid] = $qty; $this->itemprices[$itemid] = $price; $this->iteminfo[$itemid] = $info; } $this->_update_total(); }
為什麼$price價格,$info商品資訊= FALSE if(!$price)是指如果$price FALSE的反值為true就執行接下來{...}的動作嗎? 為什麼要寫成if(!$price)這樣? wf_get_price() wf_get_info()這兩個是什麼作用的函式?
-----------------------------------------------
5.可以詳細說明一下add_item()裡的if($this->itemqtys[$itemid] > 0) { // the item is already in the cart.. // so we'll just increase the quantity $this->itemqtys[$itemid] = $qty + $this->itemqtys[$itemid]; $this->_update_total(); } else { $this->items[]=$itemid; $this->itemqtys[$itemid] = $qty; $this->itemprices[$itemid] = $price; $this->iteminfo[$itemid] = $info; } $this->_update_total();這部份嗎?
----------------------------------------------- 6.function edit_item($itemid,$qty) {
if($qty < 1) { $this->del_item($itemid); } else { $this->itemqtys[$itemid] = $qty; // $this->itemprices[$itemid] = wf_get_price($itemid,$qty); } $this->_update_total(); } 1.為什麼要註解這段呢?// $this->itemprices[$itemid] = wf_get_price($itemid,$qty);
2.請問為什麼要有更新數量這方法呢? 我們加入購物車的商品跟移除購物車的商品不是都在頁面當下被完成的嗎?為什麼cart.php這頁面要更新購物車的這功能呢? -----------------------------------------------
7.function del_item($itemid) { $ti = array(); $this->itemqtys[$itemid] = 0; foreach($this->items as $item) { if($item != $itemid) { $ti[] = $item; } } $this->items = $ti; $this->_update_total(); } 1.煩請說明刪除方法的程式內容 -----------------------------------------------
8.function _update_total() { $this->itemcount = 0; $this->total = 0; if(sizeof($this->items > 0)) { foreach($this->items as $item) { $this->total = $this->total + ($this->itemprices[$item] * $this->itemqtys[$item]); $this->itemcount++; } } } } 1.sizeof()是代表什麼? 2.煩請說明foreach{}程式裡面的執行內容 謝謝回答 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 09:28:39 |
|
1.沒錯,是5-8頁的傳址呼叫,因為如此一來參數在頁面上使用時不會因為其他的函式及方法的宣告而影響到,這也是wfcart類別官方建議的宣告方式。 2.其他的項目要以陣列來宣告的意思是因為它們要儲存多個商品的資料啊! function cart() 是這個購物車的開始建置的函式,不過它留空是可以讓有需要的人加入自訂的內容。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 10:05:15 |
|
3.$items = array();與前相同,可以不加。但是這裡的原始碼為wfCart原來所示,我們並沒有加以修改。 get_contents()的功能在取得Session中所記錄的購物車內容。 $this->items就是之前所宣告的$items = array()。 $item 是使用 foreach() 函式每一次去取得 $items 中購物車內容資料時所存取的暫存陣列,一開始宣告$item = FALSE;即是將這個值的內容歸零,再往下取得購物車的值。 使用foreach()函式每次執行都可以取得目前這筆資料在陣列中的索引值,$item['id'] = $tmp_item;也就是將索引值代入暫存的陣列$item['id']中,而$item['qty'] = $this->itemqtys[$tmp_item];也就是將宣告的itemqtys[]陣列中的值代入暫存的陣列$item['qty']中。 最後將由$items[] = $item;將取得值回存到$items陣列中,再送回程式去顯示,你所說cart.php 104-116中所要顯示的資料,即是這裡所回傳的。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 10:18:21 |
|
4.函式宣告時可以同時定義所帶的參數的初值,這裡設定FALSE表示這二個參數沒有初值為空。 if(!$price)是代表如果沒有價格的內容,就執行以下的函式取得價格的內容。不過這裡與下面的if(!$info)都可以不加,因為原作者已經去除wf_get_price及wf_get_info的內容,而且每次加入購物車項目都會設定這二個值,所以不會執行到這二個判斷式,所以應是原作者忘了去除的地方。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 10:37:26 |
|
5.這段函式是先判別原來購物車中有沒有這個產品,如果有的話就更新這個產品的數量。 如果沒有的話,就新增產品到購物車的陣列之中。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 11:32:11 |
|
6.剛才有說過,目前wfCart已經不再使用wf_get_price($itemid,$qty);的函式了,而是統一使用$this->_update_total();來更新購物車的內容,所以舊的區塊要註解起來。 而這一段更新購物車的內容最主要就是針對於數量,不同的數量會有不同的購物車內容及總價,甚至是運費的計算。 所以刪除或是新增,都與整個購物車內容變動有關,就必須更新整個購物車的資料。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 11:34:15 |
|
7.這裡宣告了一個陣列,並設定它的數量值是0,並一一代入目前的購物車中將其數量歸零,所以在執行更新購物車動作時,因為數量都為0,就會一一被移除了。 |
|
|
|
文淵閣工作室
更新時間:2009/8/28 上午 11:43:35 |
|
8.sizeof() 可以計算指定的陣列中的元素數目。 foreach()函式中是要一一加總總價(total),總計費用是由每一個產品的單價(itemprices) X 數量(itemqtys),並計次(itemcount)即可知道有多少產品。 |
|
|
|
caris
更新時間:2016/2/14 下午 11:49:04 |
|
老師您好,想請問~ 1. var $items = array(); var $itemprices = array(); var $itemqtys = array(); var $iteminfo = array(); 和 add_item()的 $this->items[] = $itemid; $this->itemqtys[$itemid] = $qty; $this->itemprices[$itemid] = $price; $this->iteminfo[$itemid] = $info; 請問這裡是否可以理解成假設買家加了A產品進購物車,A產品的 id、價格、數量、info這些資訊會被分別放在以上四個陣列的索引0 中,而之後又加了產品B就會分別被放在以上陣列的索引1中呢?
2.如果是那在function get_contents中使用foreach的用途就是,比 如產品C的資訊存在這四個陣列的index[3]中,要用foreach將每個陣 列的同index值抓出來?
3.function add_item($itemid, $qty = 1, $price = FALSE, $info = FALSE) { 在product.php中的<input name="qty" type="hidden" id="qty" value="1”>這裡已設值為1, 所以這裡$qty = 1是否可以不用設值,比如用 function add_item($itemid, $qty, $price = FALSE, $info = FALSE) 或function add_item($itemid, $qty = FALSE, $price = FALSE, $info = FALSE)?
4._update_total()的if (sizeof($this->items > 0))這裡格式是不是要寫成if (sizeof($this->items) > 0)? |
|
|
|
文淵閣工作室
更新時間:2016/2/15 下午 03:18:10 |
|
1.是 2.是 3.不好, 這個預設值就是怕您新增時沒有加上數量, 如果您有加數量就會以你的數量為準, 如果沒有就是為預設值. 4.是, 當初使用這個class時也有看到這個地方, 不過為了依循原來class中的程式碼就沒有去更改, 寫成您的格式也是我們認為較對的方式, 您可以測試看看。 |
|
|
|
宇
更新時間:2016/12/10 下午 10:34:55 |
|
現在網路上都找不到wfcart.php,有人可以寄給我嗎?謝謝 |
|
|
|
宇
更新時間:2016/12/10 下午 10:35:55 |
|
E-mail:elfgolf0800720@gmail.com |
|
|
|
文淵閣工作室
更新時間:2016/12/12 上午 09:20:45 |
|
您好,在書上的範例中就有喔,請參考。 |
|
|
|