2018年04月6日网站服务器迁移完成……

ecshop生成静态页html方法

ecshop 苏 demo 2427℃ 0评论

ecshop是一个很不错的网店系统,现在很多公司都在用它,它本身优化也很好,不过因为是网店,很多东西都是动态的,所以,对优化来说,不怎么好,不过庆幸的是它可以伪静态。并且有两种重写方法,在后台的商店设置中,可以选择简单重写和复杂重写。
伪静态已经基本上可以满足大部分人的需求,如果不满足的还可以根据前面的一篇文章对重写规则进行修改,以满足自己的需求。
但是本文所要描述的是,根据ECSHOP内在的一些代码,我们生成纯静态的网页,使系统更好的优化。
在这里,我们先对首页进行纯静态生成。
1.复制首页index.php为index_html.php,因为ECSHOP是使用SMARTY模板引擎的,所以我们可以使用SMARTY生成文件函数,把模板
的静态网页输出。
在首页中,$smarty->display(‘index.dwt’, $cache_id);有这一句,说明是把网页显示出来,现在我们把它改成如下代码(参看注释)

$file = ‘index.html’;//静态网页文件名
$content = $GLOBALS[‘smarty’]->make_html(‘index.dwt’);//根据index.dwt模板生成网页内容
$filename = ROOT_PATH . $file;//静态网页路径
file_put_contents($filename, $content);//生成文件
以上几条简单的语句,我们就可以生成首页的静态网页。同理,我们可以生成产品类别和产品的静态网页,整个系统的静态化就完成了。

首页静态页面生成后,我们接下来要生成的是产品类别的静态页面,我的想法是把产品类别页面保存在跟目录下,这样虽然会比较乱,
但是比较适合优化,因为一般搜索引擎抓取的时候只抓取二到三层。把产品类别放在根目录,体现产品类别的重要性,易于搜索引擎的
抓取,另外一方面,我们可以把产品放在下个目录中。
类似代码:
$filename = build_uri(‘category’, array(‘cid’ => $catinfo[‘cat_id’]));//构造路径,这个可以选择自己喜欢的构造方法
$content = $GLOBALS[‘smarty’]->make_html(‘category.dwt’);//产生静态页面内容
$filename = ROOT_PATH . $filename;//生成文件路径,在根目录下
file_put_contents($filename, $content);//输出
产品的静态页面代码:
$goodinfo = get_all_goodsinfo($goods_id);
$cat_name   =   $goodinfo[‘cat_name’];
$goodsfile = build_uri(‘goods’, array(‘gid’ => $goods_id));
$content = $GLOBALS[‘smarty’]->make_html(‘goods.dwt’);
$html_tempdir = (ROOT_PATH.$cat_name.’/’);
if (!is_dir($html_tempdir))//生成产品目录
{
mkdir($html_tempdir);
}
$htmlfilename = ROOT_PATH . $goodsfile;
file_put_contents($htmlfilename,$content);
我的是使用类别名称加下划线:
function   build_uri(……..)
…………….
case ‘category’:
$cat_name = $GLOBALS[‘db’]->getOne(‘SELECT cat_name FROM ‘ . $GLOBALS[‘ecs’]->table(‘category’) . ” WHERE cat_id = ‘$cid'”);
$uri = $cat_name . ‘-‘ . $cid;
if (!empty($page))
{
$uri .= ‘-‘ . $page;
}
……..
case ‘goods’:
$goods_info = $GLOBALS[‘db’]->getRow(‘SELECT g.goods_name, c.cat_name FROM ‘ . $GLOBALS[‘ecs’]->table(‘goods’) . ” as g left join ” .
$GLOBALS[‘ecs’]->table(‘category’) . ” as c on c.cat_id = g.cat_id WHERE g.goods_id   = ‘$gid'”);
$goods_name =   $goods_info[‘goods_name’];
$cat_name = $cat_name;

$uri =   $cat_name . ‘/’ . $goods_name . ‘-‘ . $gid ;

……………………..

有人问 make_html 这个函数在那里: 我现在补充如下:

在 includes 下的 cls_template.php 加上

function make_html($filename, $cache_id = ”)
{
ob_start();
$this->display($filename,$cache_id);
$out = ob_get_contents();
ob_end_clean();
return $out;


}

打赏

转载请注明:苏demo的别样人生 » ecshop生成静态页html方法

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情
(6)个小伙伴在吐槽
  1. 博主,你好。make_html 这个函数在2.7.3怎么无法解析/。Parse error: syntax error, unexpected '}' in D:upupwhtdocsincludescls_template.php on line 1441
    真心求助2015-03-22 10:15 回复
    • 这个错误提示是表示标签没有完全闭合。再仔细看下 复制过去的function 是否大括号都闭合了。
    • 晚上抽空做了下测试 是可以用的。代码示例:$file = 'index.html';//静态网页文件名$content = $smarty->make_html('index.dwt',$cache_id);//根据index.dwt模板生成网页内容$filename = ROOT_PATH . $file;//静态网页路径file_put_contents($filename,$content);//生成文件show_message("首页静态化成功",url_domain().$file);//$smarty->display('index.dwt', $cache_id);注意 需要将make_html函数 放入cls_template.php
      苏demo2015-03-23 22:51 回复
  2. 您有空的话能不能指点下如何在2.7.3版本实现静态产品页和文章页。谢谢了
    从163博客找过来的2015-03-22 10:16 回复
    • 额,等忙完一段时间后可以搞搞。不过这个在ec论坛里好像已经存在这样的插件了。
    • ecshop2.7.3较2.7.2没有改动多少东西,很多东西还是可以用的。你可以依据文章中的描述,来一步步的进行。可以解决你的问题。注意用户动态部分,可以用JS来实现。
      苏demo2015-03-23 22:51 回复