php+Smarty生成静态页原理,论坛里好多朋友都在问我这个问题。不懂的进来看下
其实用Smarty生成静态页我个人感觉比缓存生成静态页还要简单。
主要用到Smarty的这个方法 $Smarty->fetch("模板名")
这个函数用法很简单,和$Smarty->display("模板名") 是一样的。
不同的是$Smarty->fetch("模板名") 是把模板替换后的内容返回
而$Smarty->display("模板名")是直接输出也可以说是显示出来。
我们用$Smarty->fetch("模板名") 方法得到了替换模板之后的内容
之后就只要把内容写到xxx.html文件中就行了。下面我给大家说说我个人生成静态页的方法
[php]
<?php
include_once("Smarty.class.config.php"); // 调用Smarty
include_once("mysql.class.config.php"); //调用mysql类
$Result = $db->Select("message");
$Total = $db->ReTotal($Result); //这里是为了算出数据库总纪录数
$PageSIze = 10; //这里定义每页显示多少条纪录
for($i=1;$i<=$Total;$i++){
//有多少纪录就循环多少次
$HtmlName = "index_$i.html"; //我们已当前是第几条纪录命名每个.html文件 第一次文件名为 index_1.html;
$Limit = ($i-1) * $PageSize . "," . $PageSize; //这里是得到每次查询的LImit值 ,第一次为 0,10
$MenuTop = "<a href='index_".($i-1).".html'>上一页</a>"; //当前页为$i 那么$i-1就是上一页
$MenuNext = "<a href='index_".($i+1).">下一页</a>"; //同样$i+1肯定就是下一页了
//得到了文件名,分页导航条 ,我们开始替换模板
$Sql[$i] = "SELECT * FROM message limit $Limit"; //这时候$Sql = "SELECT * FROM message limit 0,10";
$Result[$i] = mysql_query($Sql[$i]); //已当前$i的值,也就是当前是第几页来给$Sql 和$Result 为名字
while($Row[$i][] = mysql_fetch_array($Result[$i])){ //我也不知道为什么$Row[$i]后面要加个[] 如果不加替换就会出现错误
//开始替换了
http://www.nibao.net/question/8104
$Smarty->assign("message",$Row);
$Smarty->assign("MenuTop",$MenuTop) //上一页
$Smarty->assign("MenuNext",$MenuNext) //下一页
$Content[$i] = $Smarty->fetch("index.html") //用$Content[$i] 得到每页的内容
}
//替换完了,我们把内容写到文件里
if(file_exists($HtmlName)){
@unlink($HtmlName) ; //如果文件已经存在就把它删除
}
$fp = fopen($HtmlName,"w"); //以可写方式打开$HtmlName ,第一次循环是打开index_1.html
fwrite($fp,$Content[$i]); //用fwrite()函数, 把内容写入每个文件
fclose($fp);//关闭打开的文件指针
}
//好了我没来看看模板页
?>
[/php]
<html>
<body>
{section name=list loop=$message} <!--这就是我们上面替换的那个模板变量-->
姓名:{$message
- .name} <br>
- 内容:{$message
- .content} <hr>
- {sectionelse}
- 暂时没有内容 <!-- 如果没有内容就显示 -->
- {/section}
- {$MenuTop} | {$MenuNext} <!--这里是我们上面替换的分页条-->
- </body>
- </html>
- 好了,先到大这,我也没调试就直接给大家讲了,如果有错误,请大家指出