深入PHP购物车模块功能分析(函数讲解,附源码)

一,购物车概述
购物车是为消费者在网上购物中提供一个临时存储商品的地方。其主要功能包括:添加商品、删除商品、更改商品数量、商品金额小计、商品金额总计和清空购物车;还包括生成订单、订单打印、订单预览、提交订单和取消购物等。
购物车的操作流程:首先,登录到网站中浏览商品;然后,购买指定的商品,进入购物车页面中,在该页面可以实现更改商品数量、删除商品、清空购物车、继续购物等;最后,填写收货人信息,生成订单,订单打印、预览,提交订单等操作。

二,热点关键技术
1,Smarty模块的安装配置
smarty是一个使用PHP写出来的PHP模板引擎,它将一个应用程序分成两部分实现:视图和逻辑控制。即将UI和PHP代码分离。PHP没有内置Smarty模板类,需要单独下载和配置,而且Smarty要求服务器上PHP版本最低为4.0.6。PHP Smarty可以在下载。将压缩包解压,其中有一个libs目录,包含Smarty类库的所有核心文件。包括smarty.class.php、smarty_Compiler.class.php、config_File.class.php和debug.tpl 4个文件,还有internals和plug-ins两个目录。
复制libs目录到服务器根目录下,并重命名。这里将libs目录重新命名为smarty。到此Smarty模板安装完毕。
2,Smarty模板的配置
(1)首先确定Smarty目录的位置。因为Smarty类库是通用的,每一个项目基本都会使用,为了调用方便,习惯将smarty放置在根目录下。

(2)新建4个目录templates、templates_c、configs和cache,用于存储不同的文件。新建的4个目录位置是可以选择的,只要配置文件路径设置正确就可以了。

(3)创建配置文件。只要应用Smarty模板,那么就一定要包含Smarty类库和相关信息。每个页面都写一遍配置是不现实的,最好的方法就是将这些配置信息都写到一个文件中,通过include来调用配置文件。配置文件创建完成后保存在根目录下。本模块配置文件config.php代码如下:

复制代码 代码如下:


<?php
 /*  定义服务器的绝对路径  */
 define('BASE_PATH','E:\PHPservices\\');
 /*  定义Smarty目录的绝地你路径  */
 define('SMARTY_PATH','SourceCode\12\01\\');
 /*  加载Smarty类库文件  */
 require BASE_PATH.SMARTY_PATH.'smarty\Smarty.class.php';
 /*  实例化一个Smarty对象  */
 $smarty = new Smarty;
 /*  定义各个目录的路径 */
 $smarty->template_dir = BASE_PATH.SMARTY_PATH.'./';
 $smarty->compile_dir = BASE_PATH.SMARTY_PATH.'templates_c/';
 $smarty->config_dir = BASE_PATH.SMARTY_PATH.'configs/';
 $smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';
 /*  定义定界符  */
 $smarty->left_delimiter = '<{';
 $smarty->right_delimiter = '}>';
 /*  使用Smarty赋值方法将一对儿名称/方法发送到模板中  */
?>


3,smarty模板动静分离
smarty模板最大的特点就是实现应用程序的动静分离,即将UI和PHP代码分离。下面介绍Smarty模板在实现动静分离的过程中常用的技术。
(1)在UI中获取PHP代码中模板变量的值
首先要确定Smarty模板的界定符,这里使用的是'<{'和'}>'。另外还应用到一些Smarty的内建函数section、php、if、elseif、else等。
a)section函数用于遍历数组中的数据。每个{section}标签必须与闭合标签{/section}成对出现,参数name和loop为必选项。
名称name是包含字母、数字和下划线的任意组合,可以嵌套但必须保证嵌套的name唯一。
变量loop(通常是数组)决定循环执行的次数,例如需要在section循环内输出变量时,必须在变量后加上中括号,中括号内包含name变量。
例如:

复制代码 代码如下:


<{section name=data  loop=$myrow }>
 <tr>
  <td bgcolor="#FFFFFF"><{$myrow[data].tb_commodity_name}></td>
  <td bgcolor="#FFFFFF"><{$myrow[data].tb_commodity_price}></td>
 </tr>
<{/section}>b)php标签的作用是直接在模板中嵌入PHP脚本,标签的格式是"<{php}>"和"<{/php}>".
c)在Smarty的模板中同样也支持if、else语句,而且还增加了几个特性以适应模板引擎。if与/if必须成对出现;可以使用else和elseif字句;可使用以下条件修饰词:eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、===、!=、>、<、<=、>=。在使用修饰词时必须和变量或者常量用空格分隔开来。示例如下:
<{if $isShow=="F" }>
 <tr>
        <td colspan="5" bgcolor="#FFFFFF"><div>对不起,您的购物车中暂无商品信息!</div></td>
    </tr>
<{else}>
 <{section name=data loop=$myrow }>
  <tr>
   <td bgcolor="#FFFFFF"><{$myrow[data].tb_commodity_name}></td>
   <td bgcolor="#FFFFFF"><div><{$myrow[data].tb_commodity_price}></div></td>
  </tr>
 <{/section}>
<{/if}>


(2)在PHP代码中定义模板变量,为模板变量赋值
UI中的数据是来自于PHP代码中定义的模板变量。在PHP代码中,完成PHP代码的编写,将要输出的值赋给一个模板变量,最后制定模板页进行输出。
a)为模板变量赋值通过自定义函数assign()来完成,其中第一个参数是被赋值的变量名,第二个参数是赋给变量的值。应用assign()函数的关键代码如下:
$smarty->assign("myrow",$array); //通过assign方法将数组$array中的数据写入到myrow中b)模板页的指定是通过display方法来完成的,其语法如下:
void display(string template[,string cache_id[,string compile_id]])
该方法用于指定模板页,其中第一个必选参数是指定一个合法模板资源的类型和路径;第2个可选参数指定一个缓存号;第3个可选参数指定一个编译号,再把一个模板编译成不同版本时使用。display方法应用的关键代码如下:
$smarty->display("index.tpl"); //指定要输出的模板页3,Session购物车的创建
Session购物车主要应用Session变量来实现。而所谓的购物车就是通过session_register()函数创建的2个Session变量;其中goodsid存储商品的ID,goodsnum存储商品的数量。Session购物车创建的代码如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/28bfed3d58053c2b1d7741743b5d9ca7.html