编写Smarty插件使得Smarty成为数据要求型(模板拉数据)模板
来源:互联网 发布:windows系统隐藏文件夹 编辑:程序博客网 时间:2024/06/05 02:59
大家都知道我们在设计网站的时候 会对数据库做大量的select操作,而各种形式表现出来,比如很多的列表性质的区块,无论我们是采用过程的还是OO的,我们需要写大量的语句产生需要的结果,我们如果同时使用模板,比如Smarty作为表现层,我们要在PHP脚本层把数据assign给模板,再在模板上进行各种不同显示表示。
最近写了个网站,在前台上有大量类似的List页。虽然整个系统基于MVC模式,使用工厂来抽象了很多操作,不过写起来仍然很烦琐,比如在设计模板的时候发现数据多了两条,就要到后面的model中去修改,想一想能不能让模板直接要求要显示的数据呢?经过实验,利用smarty的插件,我们很容易实现这一点:
最近写了个网站,在前台上有大量类似的List页。虽然整个系统基于MVC模式,使用工厂来抽象了很多操作,不过写起来仍然很烦琐,比如在设计模板的时候发现数据多了两条,就要到后面的model中去修改,想一想能不能让模板直接要求要显示的数据呢?经过实验,利用smarty的插件,我们很容易实现这一点:
首先写个最最简单的smarty插件
<?php
// function.list.php
/**
* Smarty 插件
* @author doodoo<pwtitle@yahoo.com.cn>
* @date 2005-09-12
*/
function smarty_function_list($params, &$smarty)
{
$sql = $params['sql'];
$assign = $params['assign'];
$limit = $params['limit'];
$conn = mysql_connect("localhost","root","");
mysql_select_db("test");
$r = mysql_query($sql." limit $limit");
while($row=mysql_fetch_array($r)){
$data[] = $row;
}
$smarty->assign($assign,$data); // 自赋值
}
function smarty_function_list($params, &$smarty)
{
$sql = $params['sql'];
$assign = $params['assign'];
$limit = $params['limit'];
$conn = mysql_connect("localhost","root","");
mysql_select_db("test");
$r = mysql_query($sql." limit $limit");
while($row=mysql_fetch_array($r)){
$data[] = $row;
}
$smarty->assign($assign,$data); // 自赋值
}
?>
把这个文件放在smarty目录的plugins目录,这个插件就可以使用了。
然后我们来编写主程序文件
<?php
/**
* 主程序
* @author doodoo<pwtitle@yahoo.com.cn>
*/
require_once 'Smarty.class.php';
$smarty=&new Smarty();
$smarty->display('test.html');
?>
最后我们来设计模板文件 test.html
{* 调用我们刚编写的插件 *}
{list assign="datas" sql="select name from singers order by rand()" limit=6}
{section name=i loop=$datas}
{$smarty.section.i.index+1}. 姓名:{$datas[i].name}<br>
{/section}
{$smarty.section.i.index+1}. 姓名:{$datas[i].name}<br>
{/section}
现在我们运行程序,发现我们只需要把sql语句写在{list assign.. sql=...} 这里模板就可以根据我们的需要取得数据并且赋值给自己。这样一来虽然我们设计模板多了一个步骤,但却获得了更少的编程量
当然,现实使用中我们多半不会直接把sql写在模板里,我们可能再进行一些封装,毕竟,写SQL对美工难度大了点,我这里只是提供一个思路,基于这样的思路。大家一定能更好的使用模板,更快的加块项目速度,如果您有更好的想法欢迎邮件(pwtitle@yahoo.com.cn)与我联系
- 编写Smarty插件使得Smarty成为数据要求型(模板拉数据)模板
- 编写Smarty插件在模板中直接加载数据
- smarty模板 数据的操作
- smarty自定义插件,支持模板传参数调用数据
- smarty模板引擎(三)配置文件数据和保留数据
- Smarty数据缓存与模板缓存
- >+ smarty 模板
- smarty 模板
- smarty模板
- smarty模板
- smarty模板
- smarty模板
- smarty模板
- smarty 模板
- smarty模板
- smarty模板
- smarty模板
- smarty模板
- 在存储过程中分页
- 悲苦人生
- 常用字符的7位ASCII值
- win32/win64 assembly programming
- FreeBSD下设置个人开发平台
- 编写Smarty插件使得Smarty成为数据要求型(模板拉数据)模板
- Log4j使用点滴
- 如何引用工业卡的头文件和动态库(十万火急)
- 普及环境中面向服务的体系结构(SOA)[转IBM]
- 团队开发模式的转变
- Linux内核的时钟中断机制(2)
- Linux内核的时钟中断机制(3)
- Linux内核的时钟中断机制(4)
- Linux内核的时钟中断机制(5)