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>

 

        好了,先到大这,我也没调试就直接给大家讲了,如果有错误,请大家指出

 

posted @ 2014-06-13 13:38  处处动人  阅读(156)  评论(0编辑  收藏  举报
你报