« 用perl解两个BAIDU试题。 | 首页 | 生成sitemap让google搜索我blog的动态页面。 »

Smarty和Backbase凑合在一起用php返回ajax数据的尝试

对于smarty(一个php模板类库)和backbase(www.backbase.com 一个ajax类库)我都是知道一点点,因为backbase的response file一般为xml格式,而老版本的php里没有生成xml的方法,一般都是连接一个个的标签与变量到一个buffer里,把这个xml输出出来的,看得比较头疼。于是想了个馊主意,现把xml文件写好,里面放上模板变量。用模板的方式来实现xml文件的输出。

本例子测试地址。

http://www.vetcafe.net/vtt/

index.html
如下,使用了backbase的一些自定义标签,详细内容参考官方文档。
jykp.php返回xml文档,id为dataviewer层为返回的xml树的容器。

Code:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:b="http://www.backbase.com/b" xmlns:s="http://www.backbase.com/s">
<head>
<title>jykp</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<script type="text/j avascript" src="/Backbase/3_1/bpc/boot.js"></script>
</head>
<body onload="bpc.boot('/Backbase/3_1/');">
<xmp b:backbase="true" style="display:none;">
<s:event b:on="construct" b:action="show" />
<div align="center">
<form method="get" b:destination="id('dataviewer')" action="jykp.php">
姓名:<input type="text" name="name" /><br/>
性别:<input type="text" name="gender" /><br/>
籍贯:<input type="text" name="camefrom" /><br/>
<b:button>
<s:event b:on="click" b:action="submit" b:target=".." />
提交</b:button>
</form>
<div id="dataviewer" />
</div>
   </xmp>
</body>
</html>


Template.php
自定义继承smarty类
config_inc.php中定义了APP_BASE_DIR为脚本程序的物理磁盘路径
Code:


<?php

/*
* Created on 2005-11-25*
* Author:sleetdrop@gmail.com
*
*/


require_once ("config_inc.php");
require_once ("Smarty/Smarty.class.php");

class Template extends Smarty {

function Template() {
// Class Constructor. These automatically get set with each new instance.
$this->Smarty();
$this->template_dir = APP_BASE_DIR.'templates';
$this->compile_dir = APP_BASE_DIR.'templates_c';
$this->config_dir = APP_BASE_DIR.'configs';
$this->cache_dir = APP_BASE_DIR.'cache';
$this->left_delimiter = '{ ';
$this->right_delimiter = ' }';
//$this->debugging = true;
$this->caching = false;
}

}
?>


xml的模板文件
jykp.xml
里面的变量会被smarty替换。
Code:

<div xmlns="http://www.w3.org/1999/xhtml" xmlns:b="http://www.backbase.com/b" xmlns:s="http://www.backbase.com/s">
<b:box b:style="width:150px">您录入的数据为</b:box>
<b:spacer b:height="30px"></b:spacer>
<b:detailviewer>
<b:property b:label="姓名">{ $name }</b:property>
<b:property b:label="性别">{ $gender }</b:property>
<b:property b:label="籍贯">{ $camefrom }</b:property>
</b:detailviewer>
</div>


实现和服务器交换的jykp.php脚本
sleep三秒是为了体会loading,哈哈。

Code:

<?php

/*
* Created on 2005-11-25
* Author:sleetdrop@gmail.com
*
*/
require_once("./libs/Template.php");
$tmp = new Template();
$tmp->force_compile = true;
sleep(3);
$tmp->assign('name',$_REQUEST['name']);
$tmp->assign('gender',$_REQUEST['gender']);
$tmp->assign('camefrom',$_REQUEST['camefrom']);
$tmp->display('jykp.xml');
?>



最后列一下文件的目录结构。
backbase




引用:

本篇引用地址:
http://www.vetcafe.net/cgi-bin/mt3/mt-tb.cgi/2435

评论:

哇靠,好创意~~~

smarty我也在用,感觉非常爽~~~

不过本来smarty是要MVC的,用backbase一掺合,就乱了套啦。

刚刚发现居然在firefox里不工作,郁闷。

刚刚改了一下可以了。原来在xml模板里去掉xml定义才可以,不晓得为什么,刚刚体会到backbase提供的开发包里的调试功能还真的不赖,但看来写跨browser的js还是需要完美的。

发表评论

(如果您以前没在这里发表过评论,也许您发表的评论需要Blog主人的审核才能显示在这里,感谢您的静候。)