用smarty打造你的留言板

用smarty打造你的留言板(一)

先讲讲smarty的配置,懂的请跳过这部分
---------------------------------------------------------------------------------------------------

还没有smarty的请先到http://smarty.php.net下载,目前最新版本是2.6.3,下载后解压,只需把其中的libs目录拷
贝到你的Web根目录下,接着在web目录下再建几个子目录:

templates     //存放模板
templates_c //存放被编译的文件
configs       //存放配置文件
cache         //存放缓存文件
上面四个是smarty需要设定的

为了方便规划,再建几个目录
function       //存放自定义函数
inc               //存放头文件
js                //脚本文件
css             //样式表
images       //图片

另外,libs目录除了smarty类外,还可把自己写的类也放在这里面,方便规划

下面是在文件中的设置,请将此文件保存在inc目录中,以便调用

<?php
/*==============================================================================
*
* 文 件 名: smarty.inc.php
* 程序功能: smarty设置
* 更新时间: 2004-08-29
*
* 程序设计: Jzealot
*  E-mail : web-xy@163.com
*
*===============================================================================*/

require("./libs/Smarty.class.php");
$smarty = new Smarty();

//-------------------------------------------------------------------------------
//指定功能目录(模板,编译,配置,缓存)
//-------------------------------------------------------------------------------
$smarty -> templatfe_dir  = './templates';
$smarty -> compile_dir    = './templates_c';
$smarty -> config_dir     = './configs';
$smarty -> cache_dir      = './cache';
//$smarty -> caching        = true;
//$smarty -> cache_lifetime = 300;


//-------------------------------------------------------------------------------
//模板边界符设定,主要是防止标签冲突
//-------------------------------------------------------------------------------
$smarty -> left_delimiter  = '<{';
$smarty -> right_delimiter = '}>';

//-------------------------------------------------------------------------------
//共用模板变量替换
//-------------------------------------------------------------------------------
$smarty -> assign('banner','images/banner.jpg');

?>

(待续)

用smarty打造你的留言板(二) <script language="javascript" type="text/javascript"> document.title="用smarty打造你的留言板(二) - "+document.title </script>

接下来我们先开始写显示留言的程序
-------------------------------------------------------------------------------
为了简要,我们在这里建一个简单的表guestbook,字段三个gb_id,gb_name,gb_content
表建好后,填几条记录方便测试 (附:我这里用的数据库是mysql)

接着写个数据库连接程序gb_conn.inc.php放在inc目录下
代码如下:

<?php

mysql_connect("localhost","root","") or die("Sorry,can't connect data server!");
mysql_select_db("test") or die("Sorry,can't open database!");

extract($_GET);
extract($_POST);

?>

再写一个分页处理的函数,写进gb_function.php,文件放在function里
<?php
/*==============================================================================
*
* 文 件 名: gb_function.php
* 程序功能: 自定义函数集
* 更新时间: 2004-09-02
*
* 程序设计: Jzealot
*  E-mail : web-xy@163.com
*
*===============================================================================*/

/*******************************************
 函 数 名: pagedeal()
 函数功能: 分页处理 
*******************************************/
function  pagedeal($pagesql, $pagesize)

    global $recordcount, $pagecount, $page, $startloc;
 
 $rs          = mysql_query($pagesql);
 $recordcount = mysql_num_rows($rs); //取得记录总数
 
 //******计算总页数*******/
 if ( $recordcount % $pagesize == 0 )
     $pagecount = $recordcount / $pagesize;
 else
    $pagecount  = intval($recordcount / $pagesize) + 1;
   
 if ( empty($page)||$page<1 )//$page是当前页
     $page = 1;
  
 if ( $page>$pagecount )
    $page = $pagecount;
   
 $startloc = ($page - 1) * $pagesize;//确定当前页的起始记录

 

    //-----------------当前页的前部分数字分页----------------------//
    if ($page<=5);
    $i = 0;

    if ( $page>5 && $pagecount - $page < 5 && $pagecount>10 )
        $i = $pagecount - 10;

    if ($page>5 && $pagecount - $page >=5)
        $i = $page - 5;

    for (; $i < $page; $i++)
        $numpage[$i] = $i  + 1;


    //--------------当前页的后半部分(包括当前页)数字分页------------//
    $j = $pagecount;

    if ($page<=5 && $pagecount>10)
       $j = 10;

    if ($page>5 && $pagecount - $page >=5)
       $j = $page + 5;

    for (; $i<$j; $i++)
       $numpage[$i] = $i+1;


    return $numpage;//返回数字分页

}

?>

最后我们再写留言显示程序gb_list.php
<?php
/*==============================================================================
*
* 文 件 名: gb_list.php
* 程序功能: 显示留言
* 更新时间: 2004-09-02
*
* 程序设计: Jzealot
*  E-mail : web-xy@163.com
*
*===============================================================================*/

include_once("inc/gb_conn.inc.php");//载入数据库连接&请求设置
include_once("inc/smarty.inc.php");//载入smarty设置
include_once("function/gb_function.php");


//--------------------------------------------------------------------------------
//分页处理查询数据
//--------------------------------------------------------------------------------
$sql      = "select gb_id from guestbook";
$pagesize = 5;
$fpage    = "gb_list.php";
$numpage  = pagedeal($sql,$pagesize);//调用分页处理函数

//----------------------分页相关的模板变量替换-------------------------// 
$smarty -> assign("recordcount", $recordcount);//总记录数
$smarty -> assign("page",        $page);       //当前页
$smarty -> assign("pagecount",   $pagecount);  //总页数
$smarty -> assign("prepage",     $page-1);     //上一页
$smarty -> assign("nexpage",     $page+1);     //下一页
$smarty -> assign("numpage",     $numpage);    //数字分页
$smarty -> assign("fpage",       $fpage);      //要分页的网页


//-------------------------------------------------------------------------------
//查询数据并传递到模板
//-------------------------------------------------------------------------------
$rs  = mysql_query("select * from guestbook limit $startloc,$pagesize");
$num = 0;
while ( $row = mysql_fetch_array($rs) )
{
 $rss[$num] = array("gb_name" => $row["gb_name"], "gb_content" => $row["gb_content"]);
 $num++;
}
$smarty -> assign("rss",$rss);

$smarty -> display('gb_list.tpl');//显示模板
?>

下次说说模板的写法

(续)

用smarty打造你的留言板(三) <script language="javascript" type="text/javascript"> document.title="用smarty打造你的留言板(三) - "+document.title </script>

我们先来写显示留言的模板gb_list.tpl,保存在templates下
模板编写其实非常简单,实质上就是插一些php程序传递来的替换变量,并且在编辑器中也变成了可视化了,
非常方便修改
由于html代码太多,所以弄了个gb_list.tpl的截图

smarty31
通过section循环读出记录集的内容,另外用了三个子模板top.tpl,gb_fpage.tpl(分页),footer.tpl

在这里,我的top.tpl做得很简单,内容只有
<div align="center"><img src="<{$banner}>" width="750" height="150"> </div>

footer.tpl就放入一些版权信息

gb_fpage.tpl的内容如下:

<table width=750 height="22" border=0 align="center" cellpadding=0 cellspacing=1 background="<{#tdbg#}>" style="border: 1px solid;">
 <tr>
   <td align="right" background="<{#fpagebg#}>" bgcolor="<{#tablebg#}>">
  
     <{if $page>1}>
 <a href="<{$fpage}>?page=1">首页</a>&nbsp;<a href="<{$fpage}>?page=<{$prepage}>" title="上一页"> <<< </a>&nbsp;
    <{/if}>
  
    <{if $page>0 }>
 <{foreach from=$numpage item=curr_id}>
     <a href="<{$fpage}>?page=<{$curr_id}>"><{if $page==$curr_id}>[<{$curr_id}>]<{else}><{$curr_id}><{/if}></a>&nbsp;
        <{/foreach}>
    <{/if}>
  
   <{if $page<$pagecount}>
      <a href="<{$fpage}>?page=<{$nexpage}>" title="下一页"> >>> </a>&nbsp;<a href="<{$fpage}>?page=<{$pagecount}>">末页</a>& nbsp;
   <{/if}>
    
   总计留言<{$pagecount}>页<{$recordcount}>条  

    </td>
  </tr>
</table>

(续)


用smarty打造你的留言板(四) <script language="javascript" type="text/javascript"> document.title="用smarty打造你的留言板(四) - "+document.title </script>

除了用php程序传过来的变量外,另外还可以从配置文件中读取变量
这在控制整体网站风格上非常方便
下面是本留言板的配置文件gb_config.conf的内容(注意,配置文件要放在configs目录下)
你可自己增加,修改成任何风格
几乎所有的html的标签属性都可以在这里控制

############ 全局变量 ##########

pageTitle = "smarty留言板v1.0"
vlink="#000000"
link="#000000"
alink="#000000"
text="#000000"


########### 界面风格 ###########

### 风格一: 绿色风格
[greenstyle]
background="#ffffff"      #网页背景
daohangbg="images/bg2.jpg"#导航条背景
fpagebg="images/bg2.jpg"  #分页背景
tdbg="images/bg2.jpg"     #单元格背景
tablebg="#66cc33"         #表格背景
linecolor="#669900"       #直线color

### 风格二: 蓝色风格
[bluestyle]
background="images/bihaibg.jpg"
daohangbg="images/dh.gif"
fpagebg="images/dh.gif"
tdbg="images/title.gif"
tablebg="#99CCFF"
linecolor="#B4C9E7"


在模板文件中引用这些变量的方法的例子如下:

注意:在引用之前,一定要有声明(载入配置文件):
<{config_load file="gb_config.conf" section="greenstyle"}>
这里我用的是绿色风格,要用其它风格,修改section即可

(续)

用smarty打造你的留言板(五) <script language="javascript" type="text/javascript"> document.title="用smarty打造你的留言板(五) - "+document.title </script>

最后说说撰写的程序gb_write.php
内容更简单,因为根本没用到模板替换变量(除配置文件中的变量外)
<?php
include_once("inc/smarty.inc.php");//载入smarty设置
$smarty -> display('gb_write.tpl');//显示模板
?>
就这么两句,呵呵
模板文件gb_write.tpl的截图smarty5_1
其中form的action为gb_submit.php(留言提交处理)
代码如下:
<?php
/*==============================================================================
*
* 文 件 名: gb_submit.php
* 程序功能: 留言提交处理
* 更新时间: 2004-08-29
*
* 程序设计: Jzealot
*  E-mail : web-xy@163.com
*
*===============================================================================*/
include_once("inc/gb_conn.inc.php");//载入数据库连接&请求设置
include_once("gb_error.php");//载入错误处理页面


//-------------------------------------------------------------------------------
//用户输入检测
//-------------------------------------------------------------------------------
if ( empty($gb_name) )
  $errmsg = '-姓名不能为空<br>';
if ( empty($gb_content) )
  $errmsg = $errmsg.'-内容不能为空';
if ( !empty($errmsg) ) {
 $errmsg = '你的输入有以下错误:<br>'.$errmsg; 
 throw_err($errmsg);
 } else {
//-------------------------------------------------------------------------------
//当输入无错时插入留言到数据库
//-------------------------------------------------------------------------------
mysql_query("insert into guestbook (gb_name, gb_content) values ('".$gb_name."', '".$gb_content."' )");
header("location:gb_list.php");
}

?>

其中gb_error.php也只有一句
<?php
function throw_err($errmsg)
{
 require("templates/gb_error.tpl");
}
?>

错误页面模板gb_error.tpl的内容如下:

<!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=gb2312">
<title>错误</title>
<link rel="stylesheet" href="css/gb.css">
<style type="text/css">
<!--
.style1 {
 font-size: 18px;
 font-weight: bold;
 color: #FF0000;
}
-->
</style>
</head>

<body>
<table width="416" border="0" align="center" cellspacing="1" bgcolor="#006600">
  <tr>
    <td width="414" bgcolor="#FFFFFF"><div align="center"><span class="style1">错误!</span></div></td>
  </tr>
  <tr>
    <td bgcolor="#FFFFFF">&nbsp;<?=$errmsg?></td>
  </tr>
  <tr>
    <td height="20" bgcolor="#FFFFFF"><div align="right"><a href="javascript:history.back();">&lt;-返回</a></div> </td>
  </tr>
</table>
</body>
</html>

注:在这里用到了一点点php代码(输出错误信息),很遗憾

(全文完)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值