![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
========================================== example7.php ========================================== <?php /********************************************* * * 文件名: example7.php * 作 用: 显示实例程序2 * * 作 者: 大师兄 * Email: teacherli@163.com * *********************************************/ include_once("./comm/Smarty.class.php"); $smarty = new Smarty(); //建立smarty实例对象$smarty $smarty->template_dir = "./templates";//设置模板目录 $smarty->compile_dir = "./templates_c"; //设置编译目录 $smarty->cache_dir = "./cache"; //设置缓存目录 $smarty->cache_lifetime = 0; $smarty->caching = true; $smarty->left_delimiter = "<{"; $smarty->right_delimiter = "}>"; $array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻"); $array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻"); $array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻"); $array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻"); $array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻"); $array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻"); $smarty->assign("News", $array); //编译并显示位于./templates下的index.tpl模板 $smarty->display("example7.tpl"); ?> ================================================= example7.php 输出文件 =================================================
新闻编号:1
新闻内容:第1条新闻
新闻编号:2
新闻内容:第2条新闻
新闻编号:3
新闻内容:第3条新闻
新闻编号:4
新闻内容:第4条新闻
新闻编号:5
新闻内容:第5条新闻
新闻编号:6
新闻内容:第6条新闻
这里的{section}块的对于变量的命名方式感觉有些别扭,不过没关系,你只要记住模板变量使用: $loopName[name].var这种模式就行了,loopName为loop处赋予的变量名,[name]为name处赋予的字符串,.后为为你要在程序数组中设定要与值相对应的下标名称就行了。 好了,smarty学习指南---程序设计篇就写到这里,对于一般的应用,这些知识已经够用了,其它的一些高级技巧大家请参看手册中的例子,下一节将讲讲Smarty在实际应用中的例子,将分别以php内置的mysql语句,phplib中的DB类,来分别讲一下各个类库在同一个例子中的实现。 ==================================================================================================== Smarty例程学习(原创)----实例篇(一、使用php内置mysql语句) Smarty实例教程 ----实例篇(一、使用PHP内置MYSQL函数) 从本节开始我们来学习一下如果把Smarty应用到实际的例子中. 为了演示说明,我将以前写的一个站点作为实例来讲来下.先说明一下, 我本人的美术功底不是很强,所以设计出来的页面不太好看,大家就对付着看吧 在看本文之前,可以先看看indexbak.htm与newsbak.htm,它们是我们生成后的例图。 一、 首先来说明一下我们将要使用到的数据库,下面我先将数据库源文件给大家例出来: ====================================================================== CREATE DATABASE News; USE News; /**************************** * * 表 名: tb_news_ch * 用 途: 国内新闻表 * ****************************/ CREATE TABLE tb_news_ch ( iNewsID interger(11) primary key auto_increment, vcNewsTitle varchar(50) not null, ltNewsContent longtext not null ); /**************************** * * 表 名: tb_news_in * 用 途: 国际新闻表 * ****************************/ CREATE TABLE tb_news_in ( iNewsID interger(11) primary key auto_increment, vcNewsTitle varchar(50) not null, ltNewsContent longtext not null ); /**************************** * * 表 名: tb_news_mu * 用 途: 娱乐新闻表 * ****************************/ CREATE TABLE tb_news_mu ( iNewsID interger(11) primary key auto_increment, vcNewsTitle varchar(50) not null, ltNewsContent longtext not null ); ====================================================================== 我这里简单的将数据库说明一下. 第一个问题: 大家可以看到,其实3个数据表的字段名都一样,那么为什么不把它们合并成一个数据表呢,答案很简单:效率,在开发的时候我们可能感觉不出有什么可提高效率的地方,不过大家想想,当这个网站运行一段时间后,它的新闻数据量就会变的很大,而且考虑到如果将来网站做大后可能将各个类型分离出来形成类似china.xxx.com, international.xxx.com, music.xxx.com,将每一栏目独立分出去物理上做成一个单独的站点,到那时如果新闻还是合起来放置的话就会造成数据库瓶颈,所以针对当前的站点,我认为还是分开的比较合理. 第二个问题: 有人可能问了,你在字段前加的i, vc,lt干什么用?这里是按照字段类型来命名的, 这也是一种良好风格的体现,将类型前缀放在变量前,使用用户不用看字段定义就可以知道字段是什么类型,这是从微软的匈牙利命名法中参考过来的,在数据库设计时,我先将每种类型定义成1--3个字母,然后在每个字段前加相应的代码来代表它的类型.像上边,我将各个数据库字段类型定义为: integer i varchar vc longtext lt char c .... 在使用的时候,你可以往每个数据表中输入5条数据记录以备我们在调试实例时使用. 二、示例站点目录结构: PHP代码:-------------------------------------------------------------------------------- +Web (站点根目录) | |----+comm (Smarty相关文档目录) | | | |----+plugins (Smarty插件目录) | |-----Config_File.class.php (Smarty配置文件) | |-----Smarty.class.php (Smarty类主文件) | |-----Smarty_Compiler.class.php (Smarty编译类文件) | |----+cache (Smarty缓存目录,*nix下保证读写权限) | |----+templates (站点模板文件存放目录) | | | |----header.tpl(页面页头模板文件) | |----index.tpl(站点首页模板文件) | |----foot.tpl(页面页脚模板文件) | |----news.tpl (新闻页模板文件) | | |----+templates_c (模板文件编译后存放目录,*nix下保证读写权限) | |----+css (站点CSS文件目录) | |----+image (站点图片目录) | |----+media (站点Flash动画存放目录) | |----indexbak.htm (首页原始效果图) | |----newsbak,htm (新闻页原始效果图) | |----index.php (Smarty首页程序文件) | |----news.php (Smarty新闻显示文件) | |----例程说明.txt (目录说明) | |----数据库建立文件.txt (数据库的建立文档) 详细情况请大家下载实例后对照结构图。 -------------------------------------------------------------------------------- 三、模板中的实例片段: 1. index.tpl: index.tpl是站点首页的模板类,打开它的源文件后我们可以首先看到这么二句: ================================================== 1. <{*下面这一句为本页面的页面头*}> 2. <{include file="header.tpl"}> ================================================== 第 1 句大家都知道了,是模板注释 第 2 句表示在当前位置要包含另一个文件,什么文件呢,header.tpl,这里的这个header.tpl是页面的标准页头文件,把它单独拿出来是为将这一部分独立出来,以便在在其它页面进行重用,习惯上要把页头文件写在一个table中,但因为我的实例是早已做好的,所以有些不符合规范。 再来看最后一句: ================================================= 3. <{include file="foot.tpl"}> ================================================= 不用说大家都明白了,就是包含一个页脚文件。 再看看国内新闻部分的模板代码: =================================================
|
<{section name=loop loop=$News_CH}>
|
|
<{section name=loop loop=$News_IN}>
|
|
<{section name=loop loop=$News_MU}>
|
<{$NewsContext}>
这一句也容易,在当前位置显示新闻内容。 当然,这里只是简单的将新闻列出来了,在实际应用时你还可以把文章出处,发表时间,作者,相关新闻一起列出来,这里就不作多的讨论了. 三、程序部分: 1. 大家先来看看index.php的源文件,然后我们再来慢慢分析它的作用:
