#1 newsun668
用过zend framework 应该知道其layout还是比较方便,但sp好像没有。但sp加入layout应用是很容易的,因为其采用smarty。
以前没有采用框架之前,我是从smarty继承一个类进行扩展的,我现在把我那丑陋代码发布如下,有兴趣一齐研究怎样为sp加入layout。
代码如下(摘要):
////////////////////////////////////
/*
layout.class.php
*/
class CjView extends Smarty {
public function display($page, $pid = null) {
/**
* * 使用 layout 机制
*/
$this -> assign('LAYOUT_CONTENT', $page);
parent :: display('layout/' . $this -> layout, $pid);
// 最后的smarty显示处理,调用Smarty原始函数
}
}
///////////////////////////////////////////////
写一个smarty.inc.php,代码如下:
//smarty.inc.php
//该文件用来初始化smarty模板
//定义了全局变量 $SMARTY
//定义网站根目录,注意最后一个参数尾部没有斜杠
//应用目录,即虚拟网站根目录
$MY_APP_ROOT=$_SERVER["DOCUMENT_ROOT"];
define("MY_SITE_ROOT",$MY_APP_ROOT);
//smarty模板库应该只安装一次
require_once(MY_SITE_ROOT . '/smarty/smarty.class.php');
require_once(MY_SITE_ROOT . '/layout.class.php');
$view=new CjView();
//设置模板目录在当前应用的templates目录下
//注意文件路径的写法
//如果写成象/templates/就会出错
$view->template_dir='./tpl/';
$view->compile_dir='./tpl_c/';
$view->config_dir='./conf/';
$view->cache_dir='./cache/';
//更改左右定界符,防止与javascrpt 冲突
$view->left_delimiter='<{';
$view->right_delimiter='}>';
//注意使用中文时,php文件、模板文件、配置文件的编码都要统一,一般为UTF-8,否则出现乱码
?>
////////////////////////////////////////////////////////////////
在 ./tpl/ 建立 layout目录, layout文件都放在该目录下。例如有layout1.html 和 layout2.htm
layout.html 代码如下:
Layout 1
<{include file=$LAYOUT_CONTENT}>
//////////////////////////////////////////////////////////
layout2.html 代码如下:
Layout 2
<{include file=$LAYOUT_CONTENT}>
Layout 2 by CjView extends Smarty
//////////////////////////////////////////////////////////////////
模板文件放在 ./tpl/ 文件夹里,如main_tpl.html 和 two_tpl.html ,代码分别如下:
main_tpl.html 代码
<{$hello}>
two_tpl.html 代码
<{$hello}>
/////////////////////////////////////////////////////////////
php文件位于网站根目录下,如test.php, test2.php
test.php 代码如下:
require_once("./smarty.inc.php");
$view->layout="layout1.html";
$view->assign("hello","layout1 hello");
$view->display("main_tpl.html");
?>
test2.php 代码如下:
require_once("./smarty.inc.php");
$view->layout="layout2.html";
$view->assign("hello2","======layout2 hello====");
$view->display("main_tpl.html");
?>
经测试,能成功运行。现在问题是,我如何才能把这些代码与sp整合?我想为spview.php加上一个
display($layout_name,$tpl_name)来进行扩展,但没有看明白spview.php,请大侠门指导一下吧?
2013-11-25 19:31:46
#2 jake
googlecode上面实验版的sp里面有。2013-11-25 20:32:20