当前位置:  编程技术>php
本页文章导读:
    ▪php 简单的商城网站功能原理(一)      首先,这是我在博客园的第一篇文章!看着一些厉害的大牛们,写的那么好的文章!真是羡慕不已。今天就利用这次机会好好的也发挥下自己哈!希望各位可以多多指教。有不好之处记得评论.........
    ▪浅谈模板引擎工作原理及自定义标签      编译式模板与解析式模板编译式模板是提前生成html页面,而解析式模板则是在执行时逐个语句解析,这里解释的对象是标签。两者在解释原理上有不同,在语法上、表达能上几乎相同,但也.........
    ▪PHP分页      PHP分页器制作,自动生成分面页码,JS调用函数<?phpclass PageView{ /**页码**/ public $pageNo = 1; /**页大小**/ public $pageSize = 20; /**共多少页**/ public $pageCount = 0; /**总记录数**/ public $t.........

[1]php 简单的商城网站功能原理(一)
    来源:    发布时间: 2013-10-15

首先,这是我在博客园的第一篇文章!看着一些厉害的大牛们,写的那么好的文章!真是羡慕不已。

今天就利用这次机会好好的也发挥下自己哈!希望各位可以多多指教。有不好之处记得评论哦,本人正处于学习中哈。

临近期末了,也正好给自己复习复习,回顾一下整个学期来所学的东西。

第一:要先明确一下需求。

      1、用户注册登陆

  2、后台分类添加

  3、后台商品添加

  4、前台显示分类,例如格式为:手机(3) 数量为改分类下的所有商品数量。

  5、前台显示商品列表

  6、商品显示分页显示,例如格式为:<Prev 1  2  3 4  5  Next>   当前页面显示在中间,自动补齐功能

  7、商品详细页,有难点是:一张主图,多张小图。

  8、加入购物车(有修改数量功能,删除功能)

  9、结算填写收获地址,结账数据提交到数据库

  10、后台订单显示页

第二:需求明确后,我们就要开始设计数据库了。在设计数据库的前提下,我们又要搞定好各个表的各种关系。

  1、用户表(id,username,userpwd,ctime)由于是简单的商城网站实现,故不考虑太多的权限以及另外的功能。所以用户表较为简单。

  2、根据后台的分类添加  ----分类表(字段包括:id,pid,name,csort分别代表id,父id,分类名,排序)

  3、商品表(id,name,title,details,prices,ctime,category)   在关系中与分类表是多对一的关系。一个分类可以存放多个商品

  4、附件表(id,name,oname,type,size,extname,ctime,goods)也可称为是图片表,一个商品对应的多个图片。

  5、订单表(id,code(订单编号),total,user,ctime,st_name,st_address,st_postcode(邮编),st_mobile,st_phone)

  6、订单项表(id,goods,number,subtotal,orders) --该表由于考虑到在一个订单里面可能会存在多个不同的商品。

第三:有了需求,有了数据库,有了思路。就来赶紧完成最好完成的一块了。Model模型。当然在模型中,基本上的字段都是和数据库是一样,在这我就不一一打出来了,但是我会把我觉得需要考虑以及需要注意的重点位置给写出来。

  model的话,其实也就是一个数据临时存放的对象。

  对于商品表的model我觉得有一点是需要记住的,就是获取第一张图片。下面是商品表的model

  class Goods{

    ......

 

    private $firstimg;

    private $attachs=array();

    下面的get,set就不一一列出来了。就列个取出第一张图片的get,set就可以了。

    public function getFirstimg(){

      if(count($this->attachs)>0)

      {

        $this->firstimg=$this->attachs[0];

      }else{

        $defaultimg=new Attach();

        $defaultimg->setName("noimg.jpg");   //如果没有图片就给他初始个图片。

        $this->firstimg=$defaultimg;

      }

      return $this->firstimg;

    }

    ......

 

  }

  第二个是订单项的model,在这个model里面,主要是有个小计的功能。当你存进来的时候就要事先把小计给计算出来。

  所以需要一个构造函数:

  function __construct($id,$goods,$number)

  {

    $this->id=$id;

    $this->goods=$goods;

    $this->number=$number;

    $this->subtotal=$goods->getPrice()*$number;

  }

  这样就实现了小计的功能了。

  

第三是订单model 在当你把所有订单项放在同个订单的时候要取出总计,故当存入订单项后就要计算出总计。

  public function setOrderitems($orderitems){

    $this->orderitems=$orderitems;

    $total=0;

    for($i=0;$i<count($this->orderitems);$i++)

    {

      $total+=$this->orderitems[$i]->getSubtotal();

    }

    $this->total=$total;

  }

  public function getTotal(){

    $total=0;

    for($i=0;$i<count($this->orderitems);$i++)

    {

      $total+=$this->orderitems[$i]->getSubtotal();

    }

    $this->total=$total;

    return $this->total;

  }

  好了,前期功能终于做好了。剩下的就是DAO(我们所说的与数据库操作的文件_增删查改等),和程序的控制器了。

  今天就到期为止了。期待下篇文章的诞生吧哈。也希望自己能够在考试之前,整体的过一遍。

  下一篇我将会继续DAO的完善。

  希望大家可以多多点评。学生一名,写的不好,请谅解。

本文链接


    
[2]浅谈模板引擎工作原理及自定义标签
    来源:    发布时间: 2013-10-15

编译式模板与解析式模板

编译式模板是提前生成html页面,而解析式模板则是在执行时逐个语句解析,这里解释的对象是标签。两者在解释原理上有不同,在语法上、表达能上几乎相同,但也略有区别。现在编译式模板还较少,但将来编译式模板会逐步取代解析式模板

这篇文章主要讨论编译式模板与解析式模板运作的基本原理,以及如何自定义标签。这对使用好标签有一定意义。

1编译式模板

先来写个程序(以后root代表根目录)

root/code.php

<?php
//利用dedecms写php时,基本都要引入common.inc.php
require_once (dirname(__FILE__) . '/include/common.inc.php');
//利用编译式模板所需的文件
require_once (DEDEINC.'/dedetemplate.class.php');

//生成编译模板引擎类对象
$tpl = new DedeTemplate(dirname(__file__));
//装载网页模板
$tpl->LoadTemplate('code.tpl.htm');

//把php值传到html
$title = 'Hello World 网页';
$tpl->SetVar('title',$title);
$tpl->Display();
//把编译好的模板缓存做成code.html,就可以直接调用
$tpl->SaveTo(dirname(__FILE__).'/code.html');
?>

root/code.tpl.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<!— var标签 -->

<title> {dede:var.title/} </title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

</body>

</html>

打开http://localhost/code.php查看网页

由上面的例子可以看出编译式模板运作的套路:

1php文件调用网页模板,并显示。

2htm文件提供网页的大体框架,等待数据来完善网页的具体内容,称为网页模板。

 

之后可以看一下具体语法文件夹中的编译式标签语法 手册

 

会发现编译式模板中有四种“势力”

在include/dedetemplate.class.php中定义的编译引擎类,负责操作编译,它提供负责非自定义标签的编译。

标签翻译需要一些转换规则,一般标签的定义在dedetemplate.class.php中实现,自定义标签则在include/tpllib中。(编译式模板的标签就仅有文件夹里为数不多的几个,可见编译式标签现在还不好用),上面的例子中的SetVar就属于这部分。

待显示的php创建编译引擎类对象,对模板进行编译,在Display时,产生缓存,并显示(include)缓存文件。

htm模板,调用标签,用html的形式写出动态网页的效果,属于被翻译的部分。利用标签封装内部处理。

理论上有了这四种元素,就能写出网页。但由于现在的标签以解析式居多,所以还是以解析式的这四种组分(解析式中同样也有这几种组分)为主框架构造网页(换句话说,现在的编译式模板还派不上用场)。

编译式Display时,只是把编译好,放在cache中的结果给include一下而已。

 

之后就是自定义标签。

具体做法,在include/tpllib中找一个文件来仿制。如plus_ask

root/include/tpllib/plus_hello

<?php
if(!defined('DEDEINC')) exit('Request Error!');
/**
* 动态模板hello标签
*
* @version $Id: plus_ask.php 1 13:58 2010年7月5日Z tianya $
* @package DedeCMS.Tpllib
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/

function plus_hello(&$atts,&$refObj,&$fields)
{
global $dsql,$_vars;

//给出标签的属性默认参数值列表,以’,’分隔,即使不设置默认参数也要给出属性名
$attlist = "name=";

FillAtts($atts,$attlist);
FillFields($atts,$fields,$refObj);
extract($atts, EXTR_OVERWRITE);

//返回处理结果,以替换标签
return '你好!'.$name;
}
?>

在刚才的root/code.tpl.htm 加入这个标签

<!—rstype不用再默认参数表中给出,它默认为array,除此以外还能是string -->

{dede:hello name='Erik' rstype='string'/}<br/>

打开http://localhost/code.php查看网页

 

以上是短标签,对于块标签如下

root/include/tpllib/plus_hello

<?php
if(!defined('DEDEINC')) exit('Request Error!');

    
[3]PHP分页
    来源:    发布时间: 2013-10-15

PHP分页器制作,自动生成分面页码,JS调用函数

<?php
class PageView{
/**页码**/
public $pageNo = 1;
/**页大小**/
public $pageSize = 20;
/**共多少页**/
public $pageCount = 0;
/**总记录数**/
public $totalNum = 0;
/**偏移量,当前页起始行**/
public $offSet = 0;
/**每页数据**/
public $pageData = array();

/**是否有上一页**/
public $hasPrePage = true;
/**是否有下一页**/
public $hasNextPage = true;

public $pageNoList = array();

public $jsFunction ='jsFunction';
/**
*
* @param unknown_type $count 总行数
* @param unknown_type $size 分页大小
* @param unknown_type $string
*/
public function __construct($count=0, $size=20,$pageNo=1,$pageData =array(),$jsFunction='jsFunction'){

$this->totalNum = $count;//总记录数
$this->pageSize = $size;//每页大小
$this->pageNo = $pageNo;
//计算总页数
$this->pageCount = ceil($this->totalNum/$this->pageSize);
$this->pageCount = ($this->pageCount<=0)?1:$this->pageCount;
//检查pageNo
$this->pageNo = $this->pageNo == 0 ? 1 : $this->pageNo;
$this->pageNo = $this->pageNo > $this->pageCount? $this->pageCount : $this->pageNo;

//计算偏移
$this->offset = ( $this->pageNo - 1 ) * $this->pageSize;
//计算是否有上一页下一页
$this->hasPrePage = $this->pageNo == 1 ?false:true;

$this->hasNextPage = $this->pageNo >= $this->pageCount ?false:true;

$this->pageData = $pageData;
$this->jsFunction = $jsFunction;

}
/**
* 分页算法
* @return
*/
private function generatePageList(){
$pageList = array();
if($this->pageCount <= 9){
for($i=0;$i<$this->pageCount;$i++){
array_push($pageList,$i+1);
}
}else{
if($this->pageNo <= 4){
for($i=0;$i<5;$i++){
array_push($pageList,$i+1);
}
array_push($pageList,-1);
array_push($pageList,$this->pageCount);

}else if($this->pageNo > $this->pageCount - 4){
array_push($pageList,1);

array_push($pageList,-1);
for($i=5;$i>0;$i--){

    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3