详细说明:
- View层是指模板层,用于展示静态HTML页面
- View层有两部分组成,API和模板标签规则。
- API:$this->view在Controller类中使用,一共提供5个框架内置函数,用户模板赋值、页面输出。
- 模板标签:InitPHP提供default和simple两套模板标签规则,根据框架的规范您还可以设计自己的模板体系
- View层的代码主要在:
initphp/core/view/文件夹下
- 建议使用Zend Studio工具开发,有代码提示功能,能将所有的API提示显示,方便您的开发速度
API使用:
- View的API在Controller类中使用,主要用来变量赋值,模板设置和输出等操作,一共5个接口函数。
- API:set_tpl('test')是设置模板,test是指模板目录下的test.htm文件,.htm默认后缀不需要填写
- API: set_tpl('test','F')设置模板的第二个参数,F-头模板,L-脚步模板
- 下面的示例代码中包含了API的所有使用方法。
class indexController extends Controller {
public $initphp_list = array('test');
public function run() {
$this->view->assign('username', '模板赋值方法');
//模板会按照顺序设置,但是set_tpl函数中的第二个参数F和L分别让模板最先和最后显示
$this->view->set_tpl('test'); //设置一个template/test.htm的模板页面
$this->view->set_tpl('user/userinfo'); //设置template/user/userinfo.htm
$this->view->set_tpl('header', 'F'); //设置为头部,最先显示
$this->view->set_tpl('footer', 'L'); //最后显示
$this->view->remove_tpl('test'); //可以移除上面已经设置的test.htm模板
$this->view->get_tpl(); //可以得到已经设置的模板数组
$this->view->display(); //模板显示
}
public function test() {
echo 'index.php?c=index&a=test 才会执行';
$code = $this->getLibrary('code');
$code->getcode();
}
public function before() {
echo '前置执行Action';
}
public function after() {
echo '后置执行Action';
}
/**
* @return testService
*/
private function getTestService() {
return InitPHP::getService('test','test');
}
}
配置详解:
- 框架配置文件:
initphp/initphp.conf.php
- 如果你需要自定义修改模板参数,可以从
initphp/initphp.conf.php
放进应用
conf/conf.php文件中
- 一般情况下,不需要修改配置文件
/**
* 模板配置
* 1. 可以自定义模板的文件夹,编译模板路径,模板文件后缀名称,编译模板后缀名称
* 是否编译,模板的驱动和模板的主题
* 2. 一般情况下,默认配置是最优的配置方案,你可以不选择修改模板文件参数
*/
$InitPHP_conf['template']['template_path'] = 'template'; //模板路径
$InitPHP_conf['template']['template_c_path'] = 'template_c'; //模板编译路径
$InitPHP_conf['template']['template_type'] = 'htm'; //模板文件类型
$InitPHP_conf['template']['template_c_type'] = 'tpl.php';//模板编译文件类型
$InitPHP_conf['template']['template_tag_left'] = '<!--{';//模板左标签
$InitPHP_conf['template']['template_tag_right'] = '}-->';//模板右标签
$InitPHP_conf['template']['is_compile'] = true;//模板每次编译-系统上线后可以关闭此功能
$InitPHP_conf['template']['driver'] = 'simple'; //不同的模板驱动编译
$InitPHP_conf['template']['theme'] = ''; //模板主题
模板使用:
- 框架自带两个模板:default和simple,这两个模板标签的规则使用起来都是非常大众的方法,也非常简单。
- 配置文件中$InitPHP_conf['template']['driver']参数来修改不同的模板驱动,例如值为:'default'或者'simple'
- InitPHP模板标签支持原生的
代码
- 具体参看以下使用方法:
/* 以下是simple的模板标签使用方法:*/
/* 配置文件修改: */
$InitPHP_conf['template']['driver'] = 'simple';
/* 标签使用方法: */
/* 普通使用方法:*/
<!--{echo $uid;}-->
/* if语句使用:*/
<!--{if ($a == 'yes')}-->
<!--{elseif ($a == 'no')}-->
<!--{else}-->
<!--{if}--> //注意:if结束标签前需要加'/if',这里文档无法显示
/* foreach语句使用:*/
<!--{foreach ($a as $k => $V)}-->
<!--{foreach}--> //注意:foreach结束标签前需要加'/',这里文档无法显示
/* for语句使用:*/
<!--{for ($i=0; $i<100; $i++)}-->
<!--{for}--> //注意:for结束标签前需要加'/',这里文档无法显示
/* 输出变量:*/
<!--{$username}-->
/* 输出常量:*/
<!--{APP_PATH}-->
<!--{layout:user}-->
/* 以下是default的模板标签使用方法(具体使用和PHP中一样):*/
/* 配置文件修改:*/
$InitPHP_conf['template']['driver'] = 'default';
/* 一个简单的模板*/
<!--{echo $uid;}-->
<!--{if (true == true) { }-->
<!--{}}-->
<!--{layout:user}-->
设计自己的模板:
- 自定义的模板标签放置在:
initphp/core/view/driver/文件夹下,该文件夹下已经有
default.init.php 和
simple.init.php,分别为default和simple两个模板标签驱动。
- 文件的名称为:标签驱动名称+'.init.php',例如:simple.init.php
- 类名称为:标签驱动名称+'Init',例如:simpleInit
- 需要定义一个init($str, $left, $right)的公有函数,$str是需要替换的HTML代码,$left是模板标签的左标记(默认:'<!--{'),$right是模板标签的右标记(默认:'}-->')
- 需要使用自定义模板标签的时候,别忘记修改配置文件中的:$InitPHP_conf['template']['driver']
- 具体参看下面的simple模板标签驱动:
if (!defined('IS_INITPHP')) exit('Access Denied!');
/*********************************************************************************
* InitPHP 2.1 国产PHP开发框架 View-simple 简单模板驱动规则模型
*-------------------------------------------------------------------------------
* 版权所有: CopyRight By initphp.com
* 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
*-------------------------------------------------------------------------------
* $Author:zhuli
* $Dtime:2011-10-09
***********************************************************************************/
class simpleInit {
/**
* 模板驱动-简单的驱动
* @param string $str 模板文件数据
* @return string
*/
public function init($str, $left, $right) {
//if操作
$str = preg_replace( "/".$left."if\s+(.+?)".$right."/", "", $str );
$str = preg_replace( "/".$left."else".$right."/", "", $str );
$str = preg_replace( "/".$left."elseif\s+(.+?)".$right."/", "", $str );
//for操作
$str = preg_replace("/".$left."for\s+(.+?)".$right."/","",$str);
$str = preg_replace("/".$left."\/for".$right."/","",$str);
//foreach操作
$str = preg_replace("/".$left."foreach\s+(.+?)".$right."/","",$str);
$str = preg_replace("/".$left."\/foreach".$right."/","",$str);
//输出变量
$str = preg_replace( "/".$left."(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)".$right."/", "", $str );
//常量输出
$str = preg_replace( "/".$left."([A-Z_\x7f-\xff][A-Z0-9_\x7f-\xff]*)".$right."/s", "", $str );
//标签解析
$str = preg_replace ( "/".$left."\/if".$right."/", "", $str );
$pattern = array('/'.$left.'/', '/'.$right.'/');
$replacement = array('');
return preg_replace($pattern, $replacement, $str);
}
}
layout布局:
- 模板HTML页面中使用Layout:<!--{layout:version}-->。规则:左标签+'layout:'+'模板名称(不需要带.htm,有目录则user/version,和set_tpl()一样使用)'+右标签
- Layout是为了解决用户在HTML页面中来实现模板布局,html中使用了<!--{layout:version}-->,则会显示version.htm静态页面
/* 模板布局,在所有模板引擎中该方法都通用 */
/* 模板布局主要是为了解决模板切割成多个小模板,模板中能直接调用使用*/
/* 标签使用:layout:模板名称(不需要带模板名称后缀,例如user.htm模板,则直接user。如果模板有多个文件夹,则test/user 代表test/user.htm模板)*/
<!--{layout:user}-->
模板主题:
- 一般情况下,一个网站会有多个模板主题,InitPHP提供了简单的模板主题配置方法
- 用户只需要配置$InitPHP_conf['template']['theme']这个变量,如果是red的主题,则值为'red'
- 模板主题都是放在模板默认的目录下面的,例如'red'主题,则模板文件夹目录为:
template/red/文件夹下
- 实际上只是在模板默认的文件目录下再添加了一层目录,这样可以方便多主题的应用
编译机制:
- InitPHP的模板机制都会将HTML页面编译成.php文件,默认为(template_c/编译文件夹和.tpl.php后缀名称)
- $InitPHP_conf['template']['is_compile']是否开启编译机制,建议开发的时候开启,开发完成上线后,关闭该参数