Smarty教程[6]

PHP代码:--------------------------------------------------------------------------------

    templates中的index.tpl与news.tpl与上一节的相当,不同的只是在index.php与news.tpl中,先来看看index.php:

以下为引用的内容:
index.php
===============================
<?php
    
     include_once("./comm/Smarty.class.php"); //包含smarty类文件
1. //=======================================
     include_once("./comm/db_mysql.inc.php"); //包含数据库操作类
     include_once("./comm/csubstr.inc");      //包含中文截取类
     //=======================================
     define("NUM", 5);                        //定义每次显示的新闻条数

     $smarty = new Smarty();                  //建立smarty实例对象$smarty
     $smarty->templates_dir = "./templates";       //设置模板目录
     $smarty->compile_dir   ="./templates_c";      //设置编译目录
     $smarty->cache_dir     = "./cache";           //设置缓存目录
     $smarty->caching = false;                //这里是调试时设为false,发布时请使用true
     $smarty->left_delimiter = "<{";          //设置左边界符
     $smarty->right_delimiter = "}>";         //设置右边界符

     
   2. $db = new DB_Sql();           //实例化一个DB类
      $db->Host     = "localhost"; // 数据库主机名
      $db->Database = "news";       //数据库名称
      $db->User     = "root";       //用户名
      $db->Password = "";           //密码

      $db->connet();                //进行数据库连接
     
      //这里将处理国内新闻部分
      $strQuery = "SELECT iNewsID, iNewsTitle FROM tb_news_CH ORDER BY iNewsID DESC";
3. $db->query($strQuery);
      $i = NUM;
4. while($db->next_record() && $i > 0)
      {
5.    $array[] = array("NewsID",    csubstr($db->f("iNewsID"), 0, 20),
                  "NewsTitle", csubstr($db->f("vcNewsTitle"), 0, 20));

        $i--;
      }
      $smarty->assign("News_CH", $array);
      unset($array);
6. $db->free();


      //这里处理国际新闻部分
      $strQuery = "SELECT iNewsID, iNewsTitle FROM tb_news_IN ORDER BY iNewsID DESC";
      $db->query($strQuery);
      $i = NUM;
      while($db->next_record() && $i > 0)
      {
        $array[] = array("NewsID",    csubstr($db->f("iNewsID"), 0, 20),
                 "NewsTitle", csubstr($db->f("vcNewsTitle"), 0, 20));

        $i--;
      }
      $smarty->assign("News_IN", $array);
      unset($array);
      $db->free();


      //这里将处理娱乐新闻部分
      $strQuery = "SELECT iNewsID, iNewsTitle FROM tb_news_MU ORDER BY iNewsID DESC";
      $db->query($strQuery);
      $i = NUM;
      while($db->next_record() && $i > 0)
      {
        $array[] = array("NewsID",    csubstr($db->f("iNewsID"), 0, 20),
                 "NewsTitle", csubstr($db->f("vcNewsTitle"), 0, 20));

        $i--;
      }
      $smarty->assign("News_MU", $array);
      unset($array);
      $db->free();
     

      //编译并显示位于./templates下的index.tpl模板
      $smarty->display("index.tpl");
   ?>

老规矩,对于关键的地方我加了标号,来看这些地方:
   1. 这里是将DB_Sql类文件包含进来,下面一行是将一个中文截取类包含到当前页
   2. 实例化一个类,并设置类的Host, Database, User, Password属性, 最后connect数据库
   3. 调用$db->query($strQuery)进行一次数据查询
   4. $db->next_record()读取数据库查询返回值的下一行(注:调用query()返回数据集的第一条记录的前一个记录)
   5. csubstr()是我们使用的一个中文截取类,类的源文件如下:
    =====================================================
     csubstr.inc.php
    =====================================================


   6.$db->free(): 释放当前的查询返回资源

   好了,使用类进行数据库操作,可以极大程序上提高程序的可读性,同时也方便了对数据库的操作。
   接下来我们再看看news.php:
   =================================================
    news.php
   =================================================

以下为引用的内容:
<?php
    
      include_once("./comm/Smarty.class.php"); //包含smarty类文件
      //=======================================
      include_once("./comm/db_mysql.inc.php"); //包含数据库操作类
      include_once("./comm/csubstr.inc");      //包含中文截取类
      //=======================================
      define("NUM", 5);                        //定义每次显示的新闻条数

      $smarty = new Smarty();                  //建立smarty实例对象$smarty
      $smarty->templates_dir = "./templates";       //设置模板目录
      $smarty->compile_dir   ="./templates_c";      //设置编译目录
      $smarty->cache_dir     = "./cache";           //设置缓存目录
      $smarty->cache_lifetime = 60 * 60 * 24; //设置缓存时间
      $smarty->caching = false;                //这里是调试时设为false,发布时请使用true
      $smarty->left_delimiter = "<{";          //设置左边界符
      $smarty->right_delimiter = "}>";         //设置右边界符

     
      $db = new DB_Sql();           //实例化一个DB类
      $db->Host     = "localhost"; // 数据库主机名
      $db->Database = "news";       //数据库名称
      $db->User     = "root";       //用户名
      $db->Password = "";           //密码

      $db->connet();                //进行数据库连接

      $NewsID   = $_GET["id"];    //获取新闻编号
      $NewsType = $_GET["type"]; //要显示的新闻类型
      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, ltNewsContent FROM " . $dbName;
1.    $db->query($strQuery);
2.    if($db->next_record())
      {
         $smarty->assign("NewsTitle", $db->f("vcNewsTitle"));
         $smarty->assign("NewsContent", $db->f("ltNewsContent"));
        
         $db->free();
         $smarty->display("news.tpl");
      }else
          {
            echo "没有新闻内容";
          }
     
   ?>

Smarty实例教学 实例篇(三、使用ADODB连接数据库)

前两个月因为工作上的原因一直很忙,所以没有及时完成这个教程,正好今天周六不用加班,抽个空完成它吧! 在开始新的的教程的时候,我先把以前的我写的那个教程中的一些错误的地方修改过来,在这里要感谢 nesta2001zhang兄弟,是他找出了文章中的一些错误,否则真的被别人骂"误人子弟了"(说来真是惭愧,我的初稿发布后后就发现在一大堆的问题,后来一些时候发重新修改后的文件中居然也出现了错误,真是不应该...)
在上几篇教程中的:
=========================================================

以下为引用的内容:
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID", csubstr($db->f("iNewsID"), 0, 20),
"NewsTitle", csubstr($db->f("vcNewsTitle"), 0, 20));

$i--;
}
=========================================================
应该更改为:
=========================================================
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID" => $db->f("iNewsID"),
"NewsTitle" => csubstr($db->f("vcNewsTitle"), 0, 20));

$i--;
}
=========================================================

为什么这样改呢?因为第二种方法更清晰明了一些,实际上第一种方式所执行的效果与第二种方法没什么差别,而且那几个程序我都曾经调试过, 没有任何问题.
好了,那我们今天就先来说说ADODB.说到ADODB,可能做过ASP的都知道WINDOWS平台的ADO组件,但我们这里的ADODB不是微软的那个数据库操作组件,而是由php语言写的一套数据库操作类库,先让我们来看看它倒底有什么样的优点.
1. 以标准的SQL语句书写的数据库执行代码在进行数据库移植时不用更改源程序,也就是说它可以支持多种数据库,包括ACCESS.
2. 提供与微软ADODB相似的语法功能.这一点对于从ASP转行到PHP的人们是一大福音,它的很多操作都与WINDOWS中的ADODB相似.
3. 可以生成Smarty循环需要的二维数组,这样会简化smarty开发.这一点是等会我给大家演示.
4. 支持数据库的缓存查询,最大可能的提高查询数据库的速度。
5. 其它的实用功能.
虽然说优点很多,但是由于这个类库非常的庞大,光它的主执行类就107K,所以如果大家考虑执行效率的话就要认真想想了.不过说实话,它的功能还是很强大的,有很多的很实用的功能,使用它的这些功能,可以非常方便的实现我们想要的功能.所以对于那些老板没有特殊要求时大家不妨用用它
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值