商业源码热门下载www.html.org.cn
同样,我在关键的地方加了数标,下面来说明一下它们的含义:1. 建立一个连接对象$conn,大家在这里要注意的是它的初始不是以$conn = new adonewconnection($dbtype)这样的形式出现的,也就是说
,adonewconnection不是一个class,你不能使用new 对它进行初始化.看看它的源码你就会明白,这只不过是一个函数.
2. 这个就不用说了吧?打开一个news的数据库,主机为:localhost, 用户名为root, 密码为""
3. 一个查询语句,注意,这里要将查询的字段使用as关键字来重新标识,名称为你在模板中设置的模板变量的名称.
4. 使用execute来执行这个查询,结果返回一个recordset数据集
5. 这里有个方法:$rs->getarray($num) 这个在上边介绍过,它是要从$rs这个数据集中返回$num行,结果为一个可被smarty所识别的二维数
据.这样adodb就自动为我们构建起了这样的结构,而在我们以前的例子中,都是使用一个循环构建这样的数组的.
6. 这一句我看也不用说了吧?
7. 关闭内存中的相关资源.
大家可以看看,整个程序中再没有出现什么while语句,程序整体结构显的非常清楚,这就是为什么adodb+smarty是黄金组合的原因.不过话也
说回来了,简单有简单的问题,不知大家想过没有,这里对显示的新闻标题的长度没有控制,也就是说,如果某条新闻标题的长度超出一行显示的范
围,它就是自动折行到下一行,那么整个的版面就会变乱,所说大家自已适自己的情况来决定是否这样使用吧当然,你也可以使用像上一节中介
绍的那样,使用一个循环语句重构这个二维数组,使它符合你的用途,怎么做大家自己去想吧,参考phplib中的做法,上节我介绍过了...
再来看看新闻页吧
=============================================================
news.php
=============================================================
<?php
/*********************************************
*
* 文件名: news.php
* 作 用: 新闻显示程序
*
* 作 者: 大师兄
* email: [email protected]
*
*********************************************/
include_once("./comm/mysmarty.class.php"); file://包含smarty的扩展类文件
include_once("./comm/adodb/adodb.inc.php"); file://包含adodb主执行文件
$smarty = new mysmarty(); file://建立smarty实例对象$smarty
$conn = adonewconnection("mysql"); file://初始化adodb
$conn->connect("localhost", "root", "", "news"); file://连接数据库
$newsid = $_get["id"]; file://获取新闻编号
$newstype = $_get["type"]; file://要显示的新闻类型
switch($newstype)
{
case 1:
$dbname = "tb_news_ch";
break;
case 2:
$dbname = "tb_news_in";
break;
case 3:
$dbname = "tb_news_mu";
break;
}
$strquery = "select vcnewstitle as newstitle, ltnewscontent as newscontent from " . $dbname;
1. $row = &$conn->getrow($strquery); file://返回一个一维数组,下标为模板变量名
$smarty->display($row);
unset($row);
$conn->close();
?>
=============================================================
说明一下关键的地方,其实在news.php中也只有一个地方值的说明一下了.
1. $conn->getrow($strquery):这一句返回一个一维数组,返回的形式为:
$array = ("newstitle"=>"xxxx", "newscontent"=>"yyyyy...")
明白如果使用$smarty($array)后smarty会干什么吗?对了,就是相当于:
$smarty->assign("newstitle", "xxxx");
$smarty->assign("newscontent", "yyyyy...");
简单吧,确实很简单
下面再来看看新闻列表:
================================================================
newslist.php
================================================================
<?php
/*********************************************
*
* 文件名: newslist.php
* 作 用: 新闻列表显示程序
*
* 作 者: 大师兄
* email: [email protected]
*
*********************************************/
include_once("./comm/mysmarty.class.php"); file://包含smarty的扩展类文件
include_once("./comm/adodb/adodb.inc.php"); file://包含adodb主执行文件
$smarty = new mysmarty(); file://建立smarty实例对象$smarty
$conn = adonewconnection("mysql"); file://初始化adodb
$conn->connect("localhost", "root", "", "news"); file://连接数据库
>file://获取新闻编号
$newstype = $_get["type"]; file://要显示的新闻类型
switch($newstype)
{
case 1:
$tbname = "tb_news_ch";
break;
case 2:
$tbname = "tb_news_in";
break;
case 3:
$tbname = "tb_news_mu";
break;
}
$strquery = "select inewsid as newsid, vcnewstitle as newstitle from " . $tbname;
1. $rs = &$conn->getall($strquery);
2. $smarty->assign("newstype", $newstype); file://这一句为新闻列表中的链接服务
3. $smarty->assign("newslist", $rs);
unset($rs);
$conn->close();
$smarty->display("newslist.tpl");
?>
================================================================
分别来说明一下:
1. getall($strquery):这个函数可是个好东东,它的作用是将$strquery查询到的所有数据组合成为一个能够被smarty所识别的二维数组,
记住:它返回的是一个二维数组而不是一个recordset,所在你可以程序中直接在3处使用.
2. 这里是为了给新闻标题做链接时要get参数type=xx而做的
后记:
大家在使用adodb时有几个地方要注意:
1. 初始化: 初始化的方式不是使用new,因为它不是一个对象
2. 方 法: 基本上每个方法都是以大写字母开头大小写混合的名称,这一点好像与*nix的习惯有些不同,也不同于php的整体风格,所以
注意这里的大小写问题.
好了,这个smarty的系列教程到这里就基本已经完成了,我的这几篇初级教程就算是抛砖引玉吧,希望更多的高手将更多的经验写出来,大家共同提高!
新闻热点
疑难解答