用来完成大量的逻辑处理,SmartTemplate用于将处理后的数据动态的封装到html模版中,最终显示的页面有PHP解析后发送到客户端。也就是说,经过封装以及解析的html模版主要用来发送给前端的用户,而PHP脚本主要来响应用户的请求,完成请求的逻辑处理,同时,充当着控制者的角色,用来负责响应的事务处理。
SmartTemplate本身没有任何的业务处理逻辑,它只是简单地检索PHP脚本定义的对象,再将动态的内容插入到预定义的html模版中。
PHP脚本创建SmartTemplate需要的变量和对象,再根据用户的行为,决定处理哪个html模版并发送给用户。
在实际开发过程中,往往是先把html模版开发出来,然后再将html模版中需要动态生成的部分用SmartTemplate预定义的标签代替。这样做的好处是充分利用了HTML的页面表现能力,避免了PHP脚本在页面表现方面的不足,大大缩短了开发周期,各尽所能。
以下是节选程序代码中的HTML模版转换为最终的页面对象:
1.首先,用HTML编辑工具开发出HTML页面
...............
搜索图片:
{flash_slideshow}
............
2.通过PHP解析将对应内容填充到HTML模版内
...............
$_obj['img_thb_block']));
$_tmp_arr_keys=array_keys($_obj['img_thb_block']);
if($_tmp_arr_keys[0]!='0')
$_obj['img_thb_block']=array(0=>$_obj['img_thb_block']);
$_stack[$_stack_cnt++]=$_obj;
foreach($_obj['img_thb_block']as$rowcnt=>$img_thb_block){
$img_thb_block['ROWCNT']=$rowcnt;
$img_thb_block['ALTROW']=$rowcnt%2;
$img_thb_block['ROWBIT']=$rowcnt%2;
$_obj=&$img_thb_block;
?>
"class="thickbox"rel="gallery-plants">
"alt=""width="70"height="70"border="0"/>
............
5.3数据库设计
图5-5图片共享系统数据库设计结构图
上图是根据需求设计出十二个数据表,分别是:系统设定表(setting),管理员操作记录表(adminlog),管理员信息表(admin_info),图片缓存记录表(hash_cache),缩略图表(photothumbs),图片表(photo),用户组表(group_setting),用户信息表(member_info),用户登陆记录表(loginlog),图片分类表(sort_setting),用户上传相册表(job)以及标签表(tags_setting)。
该表主要分为以下几个部分:
管理员相关表:
图5-6管理员相关表
系统设置表:
图5-7系统设置表
用户组设置表
图5-8用户组设置表
图片信息表
图5-9图片信息表
相册以及标签分类表
图5-10相册分类以及标签表
5.3.1前台用户主要数据库表结构设计
用户上传相册表(job)用于存储用户上传某批图片的基础信息
表5-1job表
Name
Type
Description
job_id
BIGINT(11)
编号
Article
MEDIUMTEXT
该相册的内容描述
article_title
TINYTEXT
相册标题
article_info
TINYTEXT
相册简介
Author
varchar(40)
作者
Authored
BIGINT(11)
作者ID
sort_id
BIGINT(11)
分类ID
album_id
BIGINT(11)
相册ID
Hits
mediumint(7)
点击次数
Replies
mediumint(7)
回复次数
replies_page
mediumint(7)
回复分页数
Lastpost
BIGINT(11)
最后回复
Lastposter
varchar(30)
最后回复者
Lastposterid
BIGINT(11)
最后回复用户ID
Posttime
BIGINT(11)
发表时间
Hidden
int(2)
是否隐藏
Isparseurl
int(2)
是否引用
Ipaddress
varchar(16)
发表用户的IP
用户信息表(member_info)用于图片上传用户的详细情况信息--与图片表是一对多的关系:
表5-2member_info表
Name
Type
Description
Id
BIGINT(11)
用户编号
reg_time
BIGINT(11)
注册时间
Name
varchar(32)
用户名
photo_album_name
varchar(32)
图片名称
Blog_album_describe
BLOB(100)
描述
Gander
char(1)
性别
Pwd
varchar(64)
用户密码
Gid
mediumint(6)
用户所在组ID
Email
varchar(64)
用户邮箱
5.3.2管理后台数据库表结构设计
系统设定表(setting)用于存储系统基本设定信息
表5-3setting表
Name
Type
Description
Id
int(5)
编号
Varname
varchar(255)
设定名
Setting
varchar(255)
设定描述
Value
TEXT
设定值
Type
varchar(20)
设定类型
管理员操作记录表(adminlog),用于存储管理员对后台的操作记录
表5-4adminlog表
Name
Type
Description
Adminlogid
int(5)
记录编号
Uid
BIGINT(11)
管理员编号
user_name
varchar(32)
管理员名称
Action
varchar(50)
进行操作的名称
Script
varchar(255)
该操作所调用的脚本
Date
int(10)
执行该操作的时间
Ipaddress
varchar(16)
执行该操作的管理员的IP地址
管理员信息表(admin_info),用于存储管理员的基本信息(为了降低系统复杂度,这里将管理员的权限直接和管理员信息写入同一表中,不独立分为两个表)
表5-5admin_info表
Name
Type
Description
Aid
BIGINT(11)
管理员编号
admin_name
varchar(32)
管理员名称
Pwd
varchar(64)
管理员密码
Gid
mediumint(6)
管理员组ID(预留)
can_admin
int(1)
执行系统管理的权限
can_user
int(1)
执行用户管理的权限
can_category
int(1)
执行分类管理的权限
can_setting
int(1)
执行设定管理的权限
6特殊问题解决办法
本系统在设计和开发过程中,也遇到了不少的问题,就其中较特殊问题分析及解决方案描述如下:
6.1乱码问题
在做设计的时候,遇到了乱码问题。在页面间传递时汉字会乱码,如果直接从数据库添加数据显示没有乱码,但是从后台管理添加数据就会在添加成功后的显示页面出现在乱码。对于这个问题,原因是开发平台在WINDOWS下,WINDOWS默认的编码格式是GB2312,但是运行环境却是UTF-8环境,要避免乱码,必须统一整个开发环境的字符编码:
1.首先,统一在数据库中的编码:
在创建数据库以及查询数据库时,将编码首先置为UTF-8
SETCHARACTER_SET_CLIENT=utf8,
CHARACTER_SET_CONNECTION=utf8,
CHARACTER_SET_DATABASE=utf8,
CHARACTER_SET_RESULTS=utf8,
CHARACTER_SET_SERVER=utf8,
COLLATION_CONNECTION=utf8_general_ci,
COLLATION_DATABASE=utf8_general_ci,
COLLATION_SERVER=utf8_general_ci,
AUTOCOMMIT=1";
2.在HTML模版的HEADER部分注明编码标准:
3.在PHP输出前在HEADER内容中申明所用的字符流编码:
header('Content-Type:text/html;charset=utf-8');
6.2动态显示上传进度
通过表单上传有一个缺陷,就是不能动态的显示当前文件上传了多少。这样在用户上传比较大的图片时很不方便用户判断上传所耗时间以及浏览器是否超时。解决方法:经过查找,发现一个通过JAVASCRIPT以及PHP的SOCKET库动态生成上传进度的PHP库:UGiAPHPUPLOADER。该库的使用方法很简单,下面具体说明其调用方法:
调用方法:
1.对于upu/misc/upu.js,修改varbasePath="/upload/upu/";为upu相对于网站根目录的路径
2.然后在包含上传表单的页面中加入
,这里的
upu/misc/upu.js为upu.js的路径,然后在