zoukankan      html  css  js  c++  java
  • PHP之Smarty模版简单应用

    什么是模版,我的理解是将界面和实现代码分离开来,

    这样做的目的将美工和程序员的工作分离开来,提高工作效率,方便后期维护。

    PHP也有比较多的模版,例如PHPLIB Template、FastTemplate、Smarty等

    今天我研究的是Smarty

    到Smarty的官方网站下载最新的Smarty套件: http://smarty.php.net/
    解开 Smarty 2.6.0 后,会看到很多档案,其中有个 libs 资料夹。在 libs 中应该会有 3 个 class.php 檔 + 1 个 debug.tpl + 1 个 plugin 资料夹 + 1 个 core 资料夹。然后直接将 libs 复制到您的程序主资料夹下

    如上项目结构         那个libs就是Smart的内库

    common.php        增强可重复性创建此  因为很多页面都会用到如下设置,所以把他提取出来,每次只要引用即可!

    <?php
    require('smarty/mysql.class.php');
    $dbcharset = 'utf8';
    $query = new dbQuery('localhost', 'root', 'sa','demo');

    require 'smarty/libs/Smarty.class.php';

    // 初始化smarty
    $smarty = new Smarty;

    $smarty->compile_check = true; // 打开编译检查
    $smarty->debugging = false;

    $smarty->template_dir   = 'templates/'; //模板目录  可自定义 只要可在项目中确实存在此目录
    $smarty->compile_dir    = 'templates_c/';//编译文件目录  同上

    $smarty->left_delimiter  = '<!--{';//左标记  解析模版页中的特定代码块   可自定义  
    $smarty->right_delimiter  = '}-->';//右标记

    ?>

     mysql.class.php

    <?php
    /**
     * mysql查询类
     *
     */
    class dbQuery {
     /**
      * 查询总次数
      *
      * @var int
      */
     var $querynum = 0;
     /**
      * 连接句柄
      *
      * @var object
      */
     var $link;
     
     /**
      * 构造函数
      *
      * @param string $dbhost 主机名
      * @param string $dbuser 用户
      * @param string $dbpw   密码
      * @param string $dbname 数据库名
      * @param int $pconnect 是否持续连接
      */
     function dbQuery($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0) {
      if($pconnect) {
       if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
        $this->halt('Can not connect to MySQL server');
       }
      } else {
       if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
        $this->halt('Can not connect to MySQL server');
       }
      }
      if($this->version() > '4.1') {
       global $dbcharset;
       if($dbcharset) {
        mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
       }

       if($this->version() > '5.0.1') {
        mysql_query("SET sql_mode=''", $this->link);
       }
      }

      if($dbname) {
       mysql_select_db($dbname, $this->link);
      }

     }
     /**
      * 选择数据库
      *
      * @param string $dbname
      * @return
      */
     function select_db($dbname) {
      return mysql_select_db($dbname, $this->link);
     }
     /**
      * 取出结果集中一条记录
      *
      * @param object $query
      * @param int $result_type
      * @return array
      */
     function fetch_array($query, $result_type = MYSQL_ASSOC) {
      return mysql_fetch_array($query, $result_type);
     }
     
     /**
      * 查询SQL
      *
      * @param string $sql
      * @param string $type
      * @return object
      */
     function query($sql, $type = '') {
      
      $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
       'mysql_unbuffered_query' : 'mysql_query';
      if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
       $this->halt('MySQL Query Error', $sql);
      }

      $this->querynum++;
      return $query;
     }
     /**
      * 取影响条数
      *
      * @return int
      */
     function affected_rows() {
      return mysql_affected_rows($this->link);
     }
     /**
      * 返回错误信息
      *
      * @return array
      */
     function error() {
      return (($this->link) ? mysql_error($this->link) : mysql_error());
     }
     /**
      * 返回错误代码
      *
      * @return int
      */
     function errno() {
      return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
     }
     /**
      * 返回查询结果
      *
      * @param object $query
      * @param string $row
      * @return mixed
      */
     function result($query, $row) {
      $query = @mysql_result($query, $row);
      return $query;
     }
     /**
      * 结果条数
      *
      * @param object $query
      * @return int
      */
     function num_rows($query) {
      $query = mysql_num_rows($query);
      return $query;
     }
     /**
      * 取字段总数
      *
      * @param object $query
      * @return int
      */
     function num_fields($query) {
      return mysql_num_fields($query);
     }
     /**
      * 释放结果集
      *
      * @param object $query
      * @return bool
      */
     function free_result($query) {
      return mysql_free_result($query);
     }
     /**
      * 返回自增ID
      *
      * @return int
      */
     function insert_id() {
      return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
     }
     /**
      * 从结果集中取得一行作为枚举数组
      *
      * @param object $query
      * @return array
      */
     function fetch_row($query) {
      $query = mysql_fetch_row($query);
      return $query;
     }
     /**
      * 从结果集中取得列信息并作为对象返回
      *
      * @param object $query
      * @return object
      */
     function fetch_fields($query) {
      return mysql_fetch_field($query);
     }
     /**
      * 返回mysql版本
      *
      * @return string
      */
     function version() {
      return mysql_get_server_info($this->link);
     }
     /**
      * 关闭连接
      *
      * @return bool
      */
     function close() {
      return mysql_close($this->link);
     }
     /**
      * 输出错误信息
      *
      * @param string $message
      * @param string $sql
      */
     function halt($message = '', $sql = '') {
      echo $message . ' ' . $sql;
      exit;

     }
    }

    ?>

    userList.php

    <?php
    include_once 'common.php';
    $result=$query->query("select * from userinfo");
    $userList=array();
    while ($row=$query->fetch_array($result))
    {
     array_push($userList,$row);
    }
    $query->free_result($result);
    $query->close();
    $smarty->assign('userList',$userList);//给模板赋值
    $smarty->display('userList.html');//显示模板内容
    ?>

    userList.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用户列表</title>
    </head>
    <body>
    <center>
    <table>

    <tr><th>用户名</th><th>密码</th><th>年龄</th><th>备注</th></tr>
    <!--{foreach  from=$userList item=user}-->
    <tr>
    <td><!--{$user.userName}--></td>
    <td><!--{$user.pwd}--></td>
    <td><!--{$user.age}--></td>
    <td><!--{$user.remark}--></td>
    </tr>
    <!--{/foreach}-->
    </table>
    </center>
    </body>
    </html>

    运行userList.php

    用户名 密码 年龄 备注
    zhangsan 12345 20 aa
    liudehua gggggg 40 aa

    测试成功! 个人小结  那模版页面就好比是含有多个Smart标记的一个占位符,然后进行动态的操作,我只是一个小小DEMO,但感觉这样的方式是挺不错的 一定程度上解耦合了,呵呵  还要继续学习啊 !

  • 相关阅读:
    为了我们自己的利益,请不要去支持番茄花园。
    游戏版本比较的算法[ZZ]
    DXUT框架剖析(9)
    强制删除任意文件以及文件夹
    安全幻想曲2008
    DXUT框架剖析(12)
    DXUT框架剖析(6)
    [Ph4nt0m] [zz]The Emergence Of A Theme
    俄国农民乘法
    写在msn签名上的I'M 计划
  • 原文地址:https://www.cnblogs.com/zhangqifeng/p/1507958.html
Copyright © 2011-2022 走看看