top
Loading...
僅用PHP4Session實現的迷你購物籃(一)
作者:Evert Smith 翻譯:limodou

介紹
如果你還沒有用PHP 實現你自已的購物籃,在讀完這篇文章之后你應該可以創建一個了。甚至你可能已
經有了一個購物籃,我在這里所提供的一些技巧可能會幫助你改善你的系統。

我將給你一些提示,關于如何去做也許才能減少對購物籃表的無限的查詢,或減少無限的文本文件填充
你的文件系統,因為應用程序只會做但不會刪除它們。

如果你對這類的題目是個新手,不要害怕。它實際上相當簡單和有效,你只需要一個支持php4的主機,
象notepad或vi之類的html編輯器,你寶貴的幾分種,和這個小例子。


想法
在1998年,我有一個在硬件商店工作的朋友要求我為他們編寫一個在線商店。需要快速和簡單,同時還
要有在線管理。當我發著39度高燒的時候我變得想當有創建力,所以我用perl寫了那個東西,使用minisql
作為后端。在整個處理中我插入了我所提到的迷你購物籃。

這個迷你購物籃與平常的購物車只有很小的不同,它會在每一頁顯示你的購物車的東西,不需要在放入
一件東西后在購物車來回跳轉。這就是我寫這篇文章的初衷。


目標
人們喜歡控制,那么為什么不給他們些透明度,以便讓他們相信擁有了控制?這個迷你購物籃演示了一
個完美的方法:它提供給人們所必須的信息,并且節省了他們一次點擊,接近了在線商店的3擊范例。

所以,目標就是在任何時候將這個迷你購物籃顯示為你的頁面上的一部分,在結尾處提供一個摘要用以
修改購物籃中的物品,接著在最后發送一個訂單。

要求
你應該知道什么是session。如果不知道,這里有一個快速的綱要。已經有很多文章關于這個話題,你
可以從中找到所有你需要的代碼例子。在你的開始頁面打開一個session,使用

<?php

session_start();

?>

這樣將創建一個session名字和一個session id。你現在既可以使用缺省的通過基于cookie的設置session
的方式,通過一個表單來傳遞session id,或把它作為一個變量附在你的鏈接上(get方法)的方法。不要忘
記在最后釋放session。:)

你的商品應該有一個名字,價格和唯一標識,以便能用在這個例子中,如果不這樣,你可能需要做一點
修改。這里我使用mysql作為后端以便建立頁面及其它,為了讓購物能工作這不是必須的。:)

你應該了解數組。現在如果有人有時間利用我的代碼并且創建一個它的類,我理所當然地要感激得到它。

定義
為了簡化這個例子,我使用了四個獨立的數組和一些額外的變量。代碼可以被優化。這樣可以很容易地
顯示想法和閱讀代碼。可以使用類更好的完成,但是我不能十分肯定是否能夠把對象保存到session 里。有
人想對此發表評論嗎?

我們還需要一個項目計數器。當然可以使用count() 命令來實現,我只不過認為它足夠好,以便總能知
道有多少的項目,并且它也為循環提供了一個好的計數器。

工作
讓我們假設在你的HTML頁中有一個商品列表

ID Name Price
1 Mouse 25.00 add
2 Key 100.00 add
3 Car 5000.00 add
4 Game 25.00 add

向你的頁面增加鏈接

上面的'add'字段應該是一個鏈接,用來將商品放到迷你購物籃中。使用$PHP_SELF將這個鏈接指向它自
已。然后向它增加商品信息。這里是商品1的例子。

<A HREF="<?echo $PHP_SELF;?>?id=1&price=25&basket=Mouse">add</A>

商品的名稱能夠包含空格,所以將它放在鏈接的最后。Get方法好象對這個很挑剔。

準備迷你購物籃

為了代碼重用,讓我們創建一個額外的文件minibasket.inc。我使用.inc擴展名來標識我的包括文件。
使用這個外部文件的原因是,盡管你將使用session變量來傳遞給購物籃,代碼仍然需要有效。這個文件將
包含顯示迷你購物籃的代碼,也包話增加項目的函數。實現它的最好的地方是將 <?php include ("minibasket.inc"); ?> 命令放在你需要的地方。

minibasket.inc的邏輯

花些時間考慮一下這個。迷你購物籃應該是個什么樣子,它需要些什么特性?這里顯示的迷你購物籃應
該看上去象這樣:

# Name Price
1 Mouse 25.00
3 Game 75.00
Total 100.00

你可以很容易的通過使用一個外部樣式表格式化這個輸出。可是,它不應該太大。這個迷你購物籃是一
個信息,然而它不應該成為你所顯示頁面的焦點。

這個文件的邏輯非常簡單。

檢查是否需要增加一個新的項目。
如果true,增加項目
在加入中,它要檢查復重的記錄,通過更新數量和價格來更新存在的記錄。
片段1。檢查將要增加的新的項目

這是一個正常的IF語句,用于檢查$basket變量的值。

<?php

if ($basket!=""){
//向籃子中加入項目
}

?>

片段2。在瀏覽器中顯示籃子

<?php

if ($ses_basket_items>0){
// 如果在籃子中有項目
for ($basket_counter=0;$basket_counter<$ses_basket_items;$basket_counter++){
// 遍歷籃子,打印出每一行
// 你當然可以用格表來格式化顯示
// 需要通過格式化來顯示價格的分值。如果沒有格式化,則.00是不會顯示出來的
$price=sprintf("%01.2f",$ses_basket_price[$basket_counter]);
$amount=$ses_basket_amount[$basket_counter];
$name=$ses_basket_name[$basket_counter];
echo "$amount $name $price";
echo "<BR>";
}
} else {
// 在籃子中沒有商品
// 設置項目計數為0,且清除所有的變量
// 這是一個清除處理。它防止人們得到舊的數組
$ses_basket_items=0;
unset($ses_basket_name);
unset($ses_basket_amount);
unset($ses_basket_price);
unset($ses_basket_id);
}

?>

這段代碼不會產生任何結果。項目還沒有被填充,籃子總是空的,所以籃子不會被顯示。那么讓我們向
這個籃子中加些項目吧。

下一頁

轉自:PHPBuilder.com

北斗有巢氏 有巢氏北斗