如何为speedphp加入layout?

#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
  



   

   

Layout 1


   

   

    <{include file=$LAYOUT_CONTENT}>  
   




//////////////////////////////////////////////////////////
layout2.html 代码如下:



   LAYOUT 2
  



   

   

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

#3 newsun668

jake 发表于 2013-11-25 20:32
googlecode上面实验版的sp里面有。
感谢JAKE,这几天忙,有空我上去看,再向你请教。回复迟了,不好意思!{:soso_e120:}

2013-11-30 14:32:52