- 注册时间
- 2011-2-11
- 在线时间
- 340 小时
- 阅读权限
- 200
- 积分
- 32
- 帖子
- 716
- 精华
- 1
- UID
- 1
  
|
发表于 2011-5-28 18:20:09
|显示全部楼层
为什么要采用模板引擎?采用模板引擎(如smarty)是为了是为了程序员和美工合作?
关于这两个问题,我已经在phpchina论坛上发过帖子讨论了,帖子地址http://bbs.phpchina.com/thread-214051-1-1.html
采用模板引擎,让程序代码和模板代码分离,提高了代码的可读性和可维护性,当代码量比较大的时候,最起码会让自己看得舒服一点,而不像大杂烩一样,全部代码混合在一起,看着就头晕。
canphp框架内置了一套简单高效的模板引擎。canphp框架内置的模板引擎会什么设计得那么简单?那是故意这么设计的,因为现在的php开源系统中几乎每个系统都内置了一套模板引擎,并且都有自己的一套模板标签,为了降低大家的学习成本,所以把内置的模板引擎设计得简单一点,如果需要使用复杂一点的模板引擎,可以通过扩展第三方模板引擎,如smarty来实现。
下面开始讲解canphp内置的模板引擎的操作。
第一步,创建配置文件
- <?php
- //网站全局配置
- //在这里配置你所需的参数(与CanPHP无关)
- $config['ver']='1.0.2011.0528';//版本号,2011.0528表示发布日期
- //网站全局配置结束
- //日志和错误调试配置
- $config['DEBUG']=true; //是否开启调试模式,true开启,false关闭
- $config['LOG_ON']=true;//是否开启出错信息保存到文件,true开启,false不开启
- $config['LOG_PATH']='./data/log/';//出错信息存放的目录,出错信息以天为单位存放,一般不需要修改
- $config['ERROR_URL']='';//出错信息重定向页面,为空采用默认的出错页面,一般不需要修改
- //日志和错误调试配置结束
- //应用配置
- //网址配置
- $config['URL_REWRITE_ON']=false;//是否开启重写,true开启重写,false关闭重写
- $config['URL_MODULE_DEPR']='/';//模块分隔符,一般不需要修改
- $config['URL_ACTION_DEPR']='-';//操作分隔符,一般不需要修改
- $config['URL_PARAM_DEPR']='-';//参数分隔符,一般不需要修改
- $config['URL_HTML_SUFFIX']='.html';//伪静态后缀设置,,例如 .html ,一般不需要修改
- //模块配置
- $config['MODULE_PATH']='./module/';//模块存放目录,一般不需要修改
- $config['MODULE_SUFFIX']='Mod.class.php';//模块后缀,一般不需要修改
- $config['MODULE_INIT']='init.php';//初始程序,一般不需要修改
- $config['MODULE_DEFAULT']='index';//默认模块,一般不需要修改
- $config['MODULE_EMPTY']='empty';//空模块 ,一般不需要修改
- //操作配置
- $config['ACTION_DEFAULT']='index';//默认操作,一般不需要修改
- $config['ACTION_EMPTY']='_empty';//空操作,一般不需要修改
- //静态页面缓存
- $config['HTML_CACHE_ON']=false;//是否开启静态页面缓存,true开启.false关闭
- $config['HTML_CACHE_PATH']='./data/html_cache/';//静态页面缓存目录,一般不需要修改
- $config['HTML_CACHE_SUFFIX']='.html';//静态页面缓存后缀,一般不需要修改
- $config['HTML_CACHE_RULE']['index']['index']=1000;//缓存时间,单位:秒
- /*
- 缓存规则如下,可创建多条规则
- $config['HTML_CACHE_RULE']['模块名']['操作名']=缓存时间;//单位:秒,可创建多条数据
- $config['HTML_CACHE_RULE']['模块名1']['操作名1']=缓存时间;
- $config['HTML_CACHE_RULE']['模块名1']['操作名2']=缓存时间;
- $config['HTML_CACHE_RULE']['模块名2']['操作名1']=缓存时间;
- $config['HTML_CACHE_RULE']['模块名2']['操作名2']=缓存时间;
- */
- //应用配置结束
- //数据库配置
- $config['DB_TYPE']='mysql';//数据库类型,一般不需要修改
- $config['DB_HOST']='localhost';//数据库主机,一般不需要修改
- $config['DB_USER']='root';//数据库用户名
- $config['DB_PWD']='123456';//数据库密码
- $config['DB_PORT']=3306;//数据库端口,mysql默认是3306,一般不需要修改
- $config['DB_NAME']='cp';//数据库名
- $config['DB_CHARSET']='utf8';//数据库编码,一般不需要修改
- $config['DB_PREFIX']='cp_';//数据库前缀
- $config['DB_PCONNECT']=false;//true表示使用永久连接,false表示不适用永久连接,一般不使用永久连接
- $config['DB_CACHE_ON']=false;//是否开启数据库缓存,true开启,false不开启
- $config['DB_CACHE_PATH']='./data/db_cache/';//数据库查询内容缓存目录,地址相对于入口文件,一般不需要修改
- $config['DB_CACHE_TIME']=600;//缓存时间,0不缓存,-1永久缓存
- $config['DB_CACHE_CHECK']=false;//是否对缓存进行校验,一般不需要修改
- $config['DB_CACHE_FILE']='cachedata';//缓存的数据文件名
- $config['DB_CACHE_SIZE']='15M';//预设的缓存大小,最小为10M,最大为1G
- $config['DB_CACHE_FLOCK']=true;//是否存在文件锁,设置为false,将模拟文件锁,一般不需要修改
- //数据库配置结束
- //模板配置
- $config['TPL_TEMPLATE_PATH']='./template/';//模板目录,一般不需要修改
- $config['TPL_TEMPLATE_SUFFIX']='.php';//模板后缀,一般不需要修改
- $config['TPL_CACHE_ON']=true;//是否开启模板缓存,true开启,false不开启
- $config['TPL_CACHE_PATH']='./data/tpl_cache/';//模板缓存目录,一般不需要修改
- $config['TPL_CACHE_SUFFIX']='.php';//模板缓存后缀,一般不需要修改
- //模板配置结束
- ?>
复制代码
注意:这是canphp框架的基本配置,以后的项目都可以使用这个配置文件,可以按照自己的需求,稍微修改一下配置即可。
第二步,创建入口文件
- <?php
- @date_default_timezone_set('PRC');//定义时区,校正时间为北京时间
- //定义CanPHP框架目录
- define('CP_PATH',dirname(__FILE__).'/CanPHP/');//注意目录后面加“/”
- require(dirname(__FILE__).'/config.php');//加载配置文件
- require(CP_PATH.'core/cpApp.class.php');//加载应用控制类
- $app=new cpApp($config);//实例化应用控制类
- $app->run();//执行项目
- ?>
复制代码
以后,所有的项目,都可以使用这个入口文件。
第三步,创建公共模块
可以在公共模块的构造函数中实例化模板引擎,这样在其他模块中需要使用模板引擎的时候,只需继承公共模块即可,不需要再次实例化了。
在module目录中创建commonMod.class.php文件
公共模块代码
- <?php
- //公共模块
- class commonMod
- {
- public $model;//数据库模型对象
- public $tpl;//模板对象
- public $config;//全局配置
- static $global;//静态变量,用来实现单例模式
- public function __construct()
- {
- global $config;
- $this->config=$config;//配置
- //数据库模型初始化
- if(!isset(self::$global['model']))
- {
- self::$global['model']=new cpModel($this->config);//实例化数据库模型类
- }
- $this->model=self::$global['model'];//数据库模型对象
- //模板初始化
- if(!isset(self::$global['tpl']))
- {
- self::$global['tpl']=new cpTemplate($this->config);//实例化模板类
- }
- $this->tpl=self::$global['tpl'];//模板类对象
- }
- //模板变量解析
- protected function assign($name, $value)
- {
- return $this->tpl->assign($name, $value);
- }
- //模板输出
- protected function display($tpl='')
- {
- return $this->tpl->display($tpl);
- }
- //直接跳转
- protected function redirect($url)
- {
- header('location:'.$url,false,301);
- exit;
- }
- //出错之后跳转,后退到前一页
- protected function error($msg)
- {
- header("Content-type: text/html; charset=utf-8");
- $msg="alert('$msg');";
- echo "<script>$msg history.go(-1);</script>";
- exit;
- }
- /*
- 功能:分页
- $url,基准网址,若为空,将会自动获取,不建议设置为空
- $total,信息总条数
- $perpage,每页显示行数
- $pagebarnum,分页栏每页显示的页数
- $mode,显示风格,参数可为整数1,2,3,4任意一个
- */
- protected function page($url,$total,$perpage=10,$pagebarnum=5,$mode=1)
- {
- $page=new page();
- return $page->show($url,$total,$perpage,$pagebarnum,$mode);
- }
- }
- ?>
复制代码
注意:虽然在公共模块中实例化了模型类,但是并没有真正连接数据库,只有执行数据库操作,且缓存没有过期,才会连接数据库。
以后,所有的项目,都可以使用这个公共模块,大家可以在这个基础之上增加一些公共的方法。方便其他模块调用。
这三步,对于使用cp框架开发的所有项目都通用,下一讲的数据库操作,将不再重复。 |
|