我自己做了个网站,现在需要加入静态化功能
模板文件<div class="mz_product_right_2">
// 下面这个是数据库的查询标签
{mzrui:list table='product' order='uid desc'}
<span class="mz_product_right_img">
<span style="color:{$prod_id['color']};" class="mz_product_right_pic_name">{$prod_id['name']}</span>
<a href="{$v['typedir']}"><img onclick="upsee({$prod_id['uid']})" class="mz_product_right_pic" src="{$prod_id['pic']}" /></a>
</span>
{/mzrui}
<div style="clear:both;"></div>
</div>{$v['typedir']}  这个是返回当前数据库栏目路径的现在问题是静态化时路径不是全部静态化,有些比如评论,和某些需要经常更新的地方要用动态路径我现在后台静态化解析模板时和动态解析模板都是用的同一个解析函数
$str = preg_replace('/\{mzrui:([\w]+)\s+([^}]+)\}/ie',"self::mzrui_tag('$1','$2')",$str); //匹配模板文件数据库查询语句 public static function mzrui_tag($tab,$sql) //mysql 解析
{
global $mz_mysql,$prefix;
preg_match_all("/([a-z]+)\=[\']?([^\']+)[\']?/i", stripslashes($sql), $matches, PREG_SET_ORDER);
$check = array('type','rows','table','order','limit');
foreach($matches  as $v)
{
if(in_array($v[1],$check))
{
$$v[1] = $v[2]; //变量的变量
}
}
switch($tab)
{

case 'channel': // 导航栏标签
{
$result = $mz_mysql->sql("select * from ".$prefix."kind where kind=0");
while($v = mysql_fetch_array($result))
{
if($v['html'] == 0) // 这里判断如果没有生成静态栏目时就返回动态链接 否则就取数据库内的静态文件夹地址
{
$v['typedir'] = 'index.php?ac=list&id='.$v['uid'];
$str[] = $v;
}
}
$GLOBALS['data']=$str;
}
break;
case 'list': //文章栏目标签
{
if(!empty($_GET['id'])) // 这里判断如果是动态链接的话取当前分类栏目的ID,但是这里如果是后台生成静态化页面的话,这里就有问题
{
$id = $mz_mysql->sql("select * from ".$prefix."kind where uid=".$_GET['id']);


}
}
break;
}
return '<?php foreach($GLOBALS[\'data\'] as $v){ ?>'; //返回数据
}现在要解决就是路径的返回问题和栏目ID的问题,现在思路很混乱,忘有经验的指点一下

解决方案 »

  1.   

    你是用的cms吗?如果全是自己写的不可能不会啊
    静态化很简单,就是把输出的这个变量放到一个指定格式(html)的文件即可啊,
    函数file_put_contents() 或者fwrite(),都可以,在放入的时候本身就需要指定路劲的
      

  2.   

    是全部自己写的啊,是啊,放入的时候是有路径啊,就是页面不全是静态路径,有些部分分类是动态路径if($v['html'] == 0) 我解析模板标签的时候要判断是不是已经生成了静态,没生成就返回动态路径
    {
    $v['typedir'] = 'index.php?ac=list&id='.$v['uid'];
    $str[] = $v;
    } 因为动态页面和后台静态生成都是一个模板解析函数