应用开发范例.docx
《应用开发范例.docx》由会员分享,可在线阅读,更多相关《应用开发范例.docx(19页珍藏版)》请在冰豆网上搜索。
应用开发范例
开发流程
1.创建数据库和数据表
2.项目命名并创建项目目录
3.创建控制器类
4.创建模型类
5.创建模板文件
6.运行和调试
开发需求和开发目标
我们的礼物应用需要实现以下的功能:
1.用户可以给关注的人或粉丝发送礼物
2.用户可以看到自己送出去的全部礼物
3.用户可以看到别人送给自己的全部礼物
4.用户可以回赠礼物给好友
5.用户发送礼物时能同时发送通知信息
6.用户发送礼物成功后可发送微博分享消息
7.管理员可在后台增加,修改,删除礼物及礼物种类
8.管理员可在后台配置礼物的积分消费种类:
积分?
经验?
9.实现完善的积分消费功能,如果用户积分不足则不能赠送
创建数据表
根据上面的需求分析可知,我们需要设计三张数据表,一个用来保存礼物的分类信息,
另一个用来保存礼物的信息,还有一张用来保存用户之间的送礼记录。
增加数据表请注意表
的命名格式:
数据库表前缀+表名,其中数据库表前缀在config.inc.php里的
DB_PREFIX常量已经定义。
增加礼物分类表:
字段类型说明
idint
namevarchar分类名
statustinyint是否启用0禁用1启用(默认)
cTimeint创建时间
增加两个默认分类:
热门礼物、最新上架
增加礼物信息表:
categoryIdint分类ID,对应上面的分类表的ID
namevarchar礼物名
numint库存
priceint价格
imgvarchar礼物图片
在这里我们当然也要预先准备好部分礼物,即初始化的礼物信息。
增加送礼记录表:
fromUserIdint送礼人ID
toUserIdint送礼对象
giftPriceint价格
giftImgvarchar礼物图片
sendInfotext附加信息
sendWaytinyint赠送的方式:
1公开2私下3匿名
到此,数据表设计完毕。
在应用程序目录下的/gift/Appinfo/文件夹里的install.sql文件包含了上述建
表和插入预定义数据的sql语句。
创建应用目录
gift
├─Appinfo
├─Common
├─Conf
├─Language
├─Lib
└─Tpl
我们先在/apps/目录下增加礼物目录gift,然后在/apps/gift/目录
下创建上图所示的目录(请注意大小写)。
.应用程序目录Lib:
应用程序目录下存放的是Action控制器和Model模型的文件。
.应用模板目录Tpl:
由于本次礼物应用只有一套模板,因此我们直接在Tpl/目录创建默认模板目录
default/,然后在default/目录下添加我们需要的Index模板和一个公共模板目
录Public/。
.公共函数目录Common:
这里可以存放本次应用的公共函数,文件名为common.php,该文件会在执行过
程中自动加载,这些函数在Action/和Model/目下的文件里可以直接使用,无需再
次引入文件。
.应用配置目录Conf:
如果应用里有需要修改系统默认的常量或者在里面添加项目需要的一些配置参数,
就需要在项目的Conf/目录下面,创建一个名称是config.php的配置文件,该文件
也会自动加载。
公共函数目录和应用配置目录非必需的目录,视应用开发决定是否需要。
本次礼物开发中只用到公共函数文件夹。
.语言目录Language:
用以保存应用的系统通知模板和动态模板。
本次礼物开发中将用到系统通知模板。
在Language/目录下创建中文语言包目录cn/,然后添加通知模板文件notify.php
(动态是同样的道理,只是文件名为:
feed.php)。
.安装包目录Appinfo:
用于在系统管理后台的应用安装/卸载操作,必须包含info.php文件(用以获
取应用信息),如果含有install.php或uninstall.php文件,则会在应用安装、
卸载时自动调用。
开始编程
.公共函数层
在Common/目录下,新建common.php文件(注意文件名的大小写),写入所需
函数,如获取应用配置参数的函数:
functiongetConfig($key=NULL){
[……]
}
详细代码请参见该文件。
这个文件里的函数在Action/、Model/和Tpl/目录下的文件都可以直接使用。
.MODEL层
在Lib/Model/目录下,新建三个文件GiftCategoryModel.class.php,
GiftModel.class.php和UserGiftModel.class.php,分别创建代码如下:
classGiftCategoryModelextendsModel{}
classGiftModelextendsModel{}
classUserGiftModelextendsModel{}
通过以上步骤,我们现在已将数据库表和模型类建立了关联关系。
在项目的Action
类和Model类中,已可以直接对数据库进行相关操作。
有些人习惯在Model类里封装一些方法,这样更符合MVC规范,也有一些人习
惯把方法都写在Action里,方便程序的阅读,这主要看个人习惯。
本次开发将基本方
法写进入Model层里。
详细代码请参见相应文件。
.ACTION层
在Lib/Action/目录下,建立IndexAction.class.php,并创建代码如下:
classIndexActionextendsAction{}
详细代码参加该文件。
.模板层
我们在Tpl/default/目录下需要两个文件夹:
Index和Public。
Index文件
夹名是与IndexAction.class.php文件对应,表示Index文件夹下面的文件都是
IndexAction.class.php文件所需要的全部模板。
应用的公共文件我们一般放到
Tpl/default/Public/目录下,比如礼物应用的礼物图片、JS文件、CSS文件、应
用头文件_mainNav.html等。
当然,这些目录的设置完全由开发者自己决定,只要保
证调用文件的路径正确就可以了。
--引入系统头文件-->
--引入样式文件区-->
--引入JS文件区-->
--引入应用头文件-->
--内容begin-->
--画布begin-->
--画布end-->
--分隔层-->
--内容end-->
--引入系统尾文件-->
详细内容请参阅具体代码。
下面介绍模板文件中几处有学习价值的代码。
1.系统在头文件里已经引入jQuery库,开发人员不必重复引入。
2.Tpl/default/Index/目录下的index.html文件,这是礼物中心的模板,里
面选择发送好友的功能用到好友选择widget,只需要在模板里增加
{:
W("SelectFriend")},然后用$_POST['fri_ids']就可以获得选择的好友ID.
3.因为我们是用findPage()方式获取收到和送出的礼物列表,故返回的数据已经有
分页的变量了,只要在模板合适的地方增加如下的代码即可:
{$gifts.html}
增加积分消费功能
上面的程序基本完成了礼物的全部操作,接下来我们要增加积分消费功能。
至于礼物消
费的积分类型,是积分或者还是经验,可以在后台设置,详细请看后台程序说明。
首先在发
送礼物页面增加显示当前用户所拥有多少积分的功能,我们只要在
IndexAction.class.php文件的index()方法里增加以下程序即可:
//获取当前用户的积分
$money=X('Credit')->getUserCredit($this->mid);
$moneyType=getConfig('credit');
$this->assign('money',$money[$moneyType]);
在发送礼物的模板里增加以下一行代码:
我目前拥有的{$money.alias}是:
{$money.credit}
然后在发送礼物的函数里(UserGiftModel.class.php的sendGift()方法)增加
扣除所选礼物的相应积分程序:
//扣除相应积分
$giftPrice=intval($giftInfo['price']);
$prices=$userNum*$giftPrice;
//积分操作
$setCredit=X('Credit');
//检测积分是否足够
$userCredit=$setCredit->getUserCredit($fromUid);
if($userCredit[$moneyType]['credit']<$prices){
return$userCredit[$moneyType]['alias'].'不足,赠送失败~';
$setCredit->setUserCredit($fromUid,array($moneyType=>$prices),-1);
这里调用了公共类库services中的积分操作类,即X('Credit')。
到这里积分消费功能增加完毕。
增加发通知功能
首先需要增加礼物的通知模板。
在Language/目录下创建一个文件夹cn,再在cn文件
夹下创建通知模板文件notify.php,代码如下:
php
returnarray(
'gift_send'=>array(
'title'=>'{actor}给您送了一个礼物',
'body'=>$img.''.$sendback.'
'.$content.'
去看看
',
),
);
?
>
在发送礼物成功后增加以下程序:
//给接收人发送通知
$this->__doNotify($toUser,$sendInfo,$giftInfo,$fromUid,$appId);
__doNotify()方法的实现请参阅具体代码。
这里调用了公共类库services中的系统通知类,即X('Notify')。
到这里发通知功能完成了。
增加发送动态功能
发送动态的机制与发送通知的机制完全相同,区别只有如下两点:
.通知使用/Language/cn/feed.php,而动态使用/Language/cn/notify.php
.通知服务使用X('Notify')或service('Notify'),而动态使用X('Feed')或
service('Feed')
由于礼物应用没有用到动态,这里也不再赘述。
增加微博分享功能
首先我们需要在“管理后台-内容-模板管理”增加一个礼物赠送的模板:
在组装通知数据前,初始化一个获赠对象变量:
//赠送的对象名称用于公开赠送微博
$toUserName=NULL;
在组装公开赠送的通知信息中添加如下代码,用以@到各个获赠用户:
//赠送对象名称
$toUserName.='@'.getUserName($fid).'';
在通知信息组装结束后,添加如下代码,将微博信息暂存于SESSION中:
//公开则发微薄
if($toUserName){
$_SESSION['gift_send_weibo']=urlencode(serialize(array(
'user'=>$toUserName,
'title'=>$giftInfo['name'],
'content'=>$data['content'],
'url'=>U('gift/Index/index',array(
'uid'=>$fid,
'type'=>1,
'type_data'=>realityImageURL($giftInfo['img']))),
)));
在Lib/Index/IndexAction.class.php文件里的sendbox()函数内添加如下代
码:
//判断是否有公开赠送信息,存在,则赋值给模板,用于发微薄
if(isset($_SESSION['gift_send_weibo'])&&!
empty($_SESSION['gift_send_weibo'])){
$this->assign('tpl_data',$_SESSION['gift_send_weibo']);
unset($_SESSION['gift_send_weibo']);
在Tpl/default/Index/目录下送出的礼物sendbox.html模板文件里,添加
WeiboWidget引用(只有发送微博的信息存在时才加载),如下:
W('Weibo',array(
'tpl_name'=>'gift_send_weibo',
'button_title'=>'分享',
))}
到这里公开赠送发微博功能完成了。
增加应用后台
系统为应用增加管理后台的方法很简单,直接在应用的Action/目录下增加
AdminAction.class.php文件,然后导入并继承AdministratorAction类即可完成权限
管理:
//引入后台管理类
import('admin.Action.AdministratorAction');
classAdminActionextendsAdministratorAction{
function_initialize(){
//管理权限判定
parent:
:
_initialize();
注意:
在_initialize函数里,首先要执行parent:
_initialize(),进行管理权限判定。
更多详细代码请见具体文件。
接着我们增加对应的管理页面的模板,Tpl/default/目录下增加Admin/目录,然后
在该目录下增加_header.html,_footer.html,_tab.html,index.html,
giftlist.html,category.html,edit_gift_tab.html,
edit_category_tab.html几个模板文件。
模板开发方式同前台的模板一样,在此不再
重复。
制作安装/卸载包
在应用的目录下增加安装信息目录,命名为Appinfo,然后在该目录下增加应用图标
(ico_app.gif、ico_app_large.gif)、应用配置文件(info.php)、应用安装文件
(install.php)、应用数据库文件(install.sql)和应用卸载文件(uninstall.php)。
.配置文件内容:
if(!
defined('SITE_PATH'))exit();
//应用名称[必填]
'NAME'=>'礼物',
//应用简介[必填]
'DESCRIPTION'=>'礼物赠送',
//托管类型[必填](0:
本地应用,1:
远程应用)
'HOST_TYPE'=>'0',
//前台入口[必填](格式:
Action/act)
'APP_ENTRY'=>'Index/index',
//应用图标[必填]
'ICON_URL'=>SITE_URL.'/apps/gift/Appinfo/ico_app.gif',
'LARGE_ICON_URL'=>SITE_URL.'/apps/gift/Appinfo/ico_app_large.gif',
//后台入口[选填]
'ADMIN_ENTRY'=>'Admin/index',
//统计入口[选填](格式:
Model/method)
'STATISTICS_ENTRY'=>'GiftStatistics/statistics',
其中的SITE_URL是站点根目录网址,如果直接使用它本身的话程序会自
动解释成绝对网址,还有一个好处就是网站转移的时候这些信息都不需要修改,程序会
自动解释出新的网址赋值给它。
当然,你也可以使用绝对网址。
.安装文件内容:
数据库操作的语句均统一放在数据库文件install.sql中,install.php的功
能就是执行该文件:
header('Content-Type:
text/html;charset=utf-8');
$sql_file=APPS_PATH.'/gift/Appinfo/install.sql';
//执行sql文件
$res=M('')->executeSqlFile($sql_file);
empty($res)){//错误
echo$res['error_code'];
echo'';
echo$res['error_sql'];
//清除已导入的数据
include_once(APPS_PATH.'/gift/Appinfo/uninstall.php');
exit;
.数据库文件内容:
首先,写入该应用三张数据表的添加语句;然后,再加入应用系统配置信息和微博
模板的插入语句,若有设定积分规则的应用,也加上积分规则的插入语句,可以参见日
志、相册等应用的数据库文件,代码如下:
SETFOREIGN_KEY_CHECKS=0;
[……三张数据表及其预设信息的sql语句]
#添加ts_system_data数据
REPLACEINTO`ts_system_data`(`uid`,`list`,`key`,`value`,`mtime`)
VALUES
(0,'gift','credit','s:
5:
\"score\";','2010-12-2411:
22:
17');
#模板数据
DELETEFROM`ts_template`WHERE`name`='gift_send_weibo';
INSERTINTO`ts_template`(`name`,`alias`,`title`,`body`,`lang`,`type`,
`type2`,`is_cache`,`ctime`)
('gift_send_weibo','礼物赠送','','我送给{user}一份礼物:
【{title}】
{content}参与送礼{url}','zh','gift','weibo',0,1290417734);
这里可以直接使用由工具导出的sql文件和语句。
.卸载文件内容:
删除应用的数据表、应用系统配置信息和微博模板。
若应用还设置了积分规则,则
也要同时删除其积分规则,可以参见日志、相册等应用的卸载文件。
$db_prefix=C('DB_PREFIX');
$sql=array(
//gift数据
"DROPTABLEIFEXISTS`{$db_prefix}gift`;",
"DROPTABLEIFEXISTS`{$db_prefix}gift_category;",
"DROPTABLEIFEXISTS`{$db_prefix}gift_user;",
//ts_system_data数据
"DELETEFROM`{$db_prefix}system_data`WHERE`list`='gift'",
//模板数据
"DELETEFROM`{$db_prefix}template`WHERE`name`='gift_send_weibo';",
foreach($sqlas$v)
M('')->execute($v);
至此,安装\卸载包制作完成。
登录后台后进入“应用->应用管理->添加应用”点击“安装”应用就可以了。
然后
更新一下系统缓存就可以在前台的应用列表中看到我们的礼物应用了。
调试
要调试我们的有程序,有很多种方法,在此我们推荐几种常用的调试方法。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1