21.5 Smarty模板的应用

21.5 Smarty模板的应用

视频讲解:光盘TMlx21Smarty模板的应用.exe

21.5.1 将Smarty的配置方法封装到类中

可以将Smarty模板的配置方法定义到一个类中,并存储在system.smarty.inc.php文件中,将类的实例化操作存储到system.inc.php文件中,然后将这两个文件存储在system文件夹下。

这里将Smarty模板的配置存储在一个类中,通过类中的构造方法完成对Smarty的配置操作,这就是system.smarty.inc.php,其代码如下:

<?php require("../Smarty/Smarty.class.php"); //调用Smarty文件 class SmartyProject extends Smarty{ //定义类,继承Smarty父类 function SmartyProject(){ //定义方法,配置Smarty模板 $this->template_dir="./"; //指定模板文件存储在根目录下 $this->compile_dir="../Smarty/templates_c/"; //指定编译文件存储在Smarty/templates_c/文件夹下 $this->config_dir = "../Smarty/configs/"; $this->cache_dir = "../Smarty/cache/"; } } ?>

在system.inc.php中对类进行实例化,根据返回的对象名称调用Smarty中的方法,返回对象名为$smarty,其代码如下:

<?php require("system.smarty.inc.php"); //调用类文件 $smarty=new SmartyProject(); //执行类的实例化操作 ?>

将配置方法封装到类中后,无论将程序复制到哪个服务器下执行,都不需要更改服务器或Smarty文件的绝对路径,即可直接运行。

【例21.10】本例应用存储在类文件中的配置方法,使用Smarty中的section循环语句输出数据库中的数据。(实例位置:光盘TMsl2110)

(1)创建index.php动态页文件。首先,连接数据库,调用Smarty配置文件,通过mysql数据库函数读取数据库中的数据,并把读取到的数据存储到一个数组中。然后,应用Smarty中的assign方法将数组赋给指定的模板变量。最后,使用Smarty中的display方法指定模板页。

<?php include_once"conn/conn.php"; //连接数据库 require_once("system/system.inc.php"); //调用指定的文件 $result=mysqli_query($conn, "select*from tb_book where id order by id limit 3"); //执行select查询语句 $array=array(); //定义空数组 while($myrow=mysqli_fetch_array($result)){ array_push($array, $myrow); //将读取到的数据写入数组中 } if(! $array){ $smarty->assign("iscommo", "F"); //判断如果执行失败,则输出模板变量iscommo的值为F }else{ $smarty->assign("iscommo", "T"); //判断如果执行成功,则输出模板变量iscommo的值为T $smarty->assign("arraybook", $array); //定义模板变量arraybook,输出数据库中的数据 } $smarty->display('index.html'); //执行模板文件 ?>

(2)创建index.html模板页。应用Smarty中的section循环语句,读取模板变量中的数据,在模板页中输出从数据库中获取的数据。其关键代码如下:

{section name=bookid loop=$arraybook} <tr> <td width="135" rowspan="5" align="center" valign="middle"> <img src="{$arraybook[bookid].pics}" width="95" height="100" style="border: 1px solid #f0f0f0; " /></td> <td height="35">图书名称:{$arraybook[bookid].name}</td> </tr> <tr> <td height="23">图书品牌:{$arraybbstell[bookid].brand}</td> </tr> <tr> <td width="160" height="23">剩余数量:{$arraybbstell[bookid].stocks}</td> </tr> <tr> <td height="23">市场价:<font color="red">{$arraybbstell[bookid].m_price}&nbsp;元</font></td> </tr> <tr> <td height="30">会员价格:<font color="#FF0000">{$arraybbstell[bookid].v_price}&nbsp;元</font></td> </tr> {/section}

运行结果如图21.11所示。

图21.11 将Smarty的配置方法封装到类中

21.5.2 Smarty+ADODB整合应用

下面介绍综合运用Smarty和ADODB技术,通过面向对象的方法完成Smarty模板的配置、ADODB连接、操作MySQL数据库和分页的功能。

【例21.11】本例应用ADODB连接操作MySQL数据库,应用分页类完成数据的分页输出,应用Smarty模板实现网页的动静分离。(实例位置:光盘TMsl2111)

(1)在system文件夹下创建system.class.inc.php文件,定义数据库的连接、操作和分页类;创建system.smarty.inc.php文件,定义Smarty的配置类;创建system.inc.php文件,完成类的实例化操作,并返回实例化对象和数据库的连接标识。代码可参考本书光盘中的内容。

(2)创建index.php动态页。调用数据库连接类中的方法完成与数据库的连接,应用分页类中的方法,实现分页读取数据库中的数据,应用Smarty中的assign方法将从数据库中读取的数据赋给模板变量,最后应用display方法指定模板页。其代码如下:

<?php require_once("system/system.inc.php"); //调用指定的文件 $shopping=$seppage->ShowDate("select * from tb_book where id order by id ", $conn,3, isset($_GET["page"])? $_GET["page"]:""); //调用分页类,实现分页功能 if(! $shopping){ $smarty->assign("istr", "F"); }else{ $smarty->assign("istr", "T"); $smarty->assign("showpage", $seppage->ShowPage("图书", "本", "", "a1")); //定义输出分页数据的模板变量 showpage $smarty->assign("shopping", $shopping); //将返回的数组赋给模板变量 } $smarty->assign('title', 'Smarty+Adodb完成数据分页显示’); $smarty->display('index.html'); //指定模板页 ?>

(3)创建index.html静态页,应用section循环语句,循环输出模板变量中传递的数据,并输出分页超链接。其关键代码如下:

{if $istr=="T"} <table width="380" height="134" border="0" cellspacing="0" cellpadding="0"> {php} $i=1; {/php} {section name=shopping_id loop=$shopping} <tr> <td width="135" rowspan="5" align="center" valign="middle"><img src="{$shopping[shopping_id].pics}" width="95" height="100" style="border: 1px solid #f0f0f0; " /></td> <td height="35">图书名称:{$shopping[shopping_id].name}</td> </tr> <tr> <td height="23">图书品牌:{$shopping[shopping_id].brand}</td> </tr> <tr> <td width="160" height="23">剩余数量:{$shopping[shopping_id].stocks}</td> </tr> <tr> <td height="23">市场价:<font color="red">{$shopping[shopping_id].m_price}&nbsp;元</font></td> </tr> <tr> <td height="30">会员价格: {$shopping[shopping_id].v_price}&nbsp;元</td> </tr> {php} $i++; {/php} {/section} </table> <table width="100%" height="22" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td align="center" class="STYLE4">&nbsp; {$showpage}</td> </tr> </table> <hr style="border: 1px solid #f0f0f0; " /> {/if}

运行结果如图21.12所示。

图21.12 Smarty+ADODB整合应用

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

21.5 Smarty模板的应用