ecshop是一個(gè)很不錯(cuò)的網(wǎng)店系統(tǒng),現(xiàn)在很多公司都在用它,它本身優(yōu)化也很好,不過(guò)因?yàn)槭蔷W(wǎng)店,很多東西都是動(dòng)態(tài)的,所以,對(duì)優(yōu)化來(lái)說(shuō),不怎么好,不過(guò)慶幸的是它可以偽靜態(tài)。并且有兩種重寫(xiě)方法,在后臺(tái)的商店設(shè)置中,可以選擇簡(jiǎn)單重寫(xiě)和復(fù)雜重寫(xiě)。
偽靜態(tài)已經(jīng)基本上可以滿(mǎn)足大部分人的需求,如果不滿(mǎn)足的還可以根據(jù)前面的一篇文章對(duì)重寫(xiě)規(guī)則進(jìn)行修改,以滿(mǎn)足自己的需求。
但是本文所要描述的是,根據(jù)ECSHOP內(nèi)在的一些代碼,我們生成純靜態(tài)的網(wǎng)頁(yè),使系統(tǒng)更好的優(yōu)化。
在這里,我們先對(duì)首頁(yè)進(jìn)行純靜態(tài)生成。
ECSHOP是一套很好的PHP開(kāi)源商城系統(tǒng),但開(kāi)源產(chǎn)品總是無(wú)法符合各個(gè)項(xiàng)目的細(xì)節(jié)需求。負(fù)責(zé)人要求每個(gè)頻道頁(yè)都靜態(tài)化,以更好的收錄,那我就知道利用dedecms建設(shè)一系列的封面模板,然后手動(dòng)去控制產(chǎn)品的縮略圖,至于產(chǎn)品列表頁(yè),暫時(shí)還沒(méi)靜態(tài)化,還在考慮怎么靜態(tài)化比較好,而商城產(chǎn)品內(nèi)頁(yè)靜態(tài)化則使用以下代碼。
Php代碼
if(file_exists($htmlfile) && (!$updatehtml)){
header("HTTP/1.1 301 Moved Permanently");
header("Location: {$htmlfile}");
}else{
$htmlcontent = $smarty->make_html("goods.dwt",$cache_id);
if(file_put_contents($htmlfile,$htmlcontent)){
header("HTTP/1.1 301 Moved Permanently");
header("Location: {$htmlfile}");
}
}
if(file_exists($htmlfile) && (!$updatehtml)){ header("HTTP/1.1 301 Moved Permanently"); header("Location: {$htmlfile}"); }else{ $htmlcontent = $smarty->make_html("goods.dwt",$cache_id); if(file_put_contents($htmlfile,$htmlcontent)){ header("HTTP/1.1 301 Moved Permanently"); header("Location: {$htmlfile}"); } }
301轉(zhuǎn)向是否能夠?qū)⑹珍浀牡刂犯淖儯@個(gè)經(jīng)過(guò)實(shí)驗(yàn)是可以的,大家可以site一下我的商城就知道。其實(shí)這個(gè)靜態(tài)化方法,我的靈感也是來(lái)源于supersite,這套開(kāi)源系統(tǒng)也是經(jīng)過(guò)動(dòng)態(tài)跳轉(zhuǎn)到靜態(tài)化,收錄還不差,所以就模仿著寫(xiě)。
1.在首頁(yè)中,$smarty->display('index.dwt', $cache_id);有這一句,說(shuō)明是把網(wǎng)頁(yè)顯示出來(lái),現(xiàn)在我們把它改成如下代碼(參看注釋?zhuān)?br /> $file = 'index.html';//靜態(tài)網(wǎng)頁(yè)文件名
$content = $smarty->make_html('index.dwt');//根據(jù)index.dwt模板生成網(wǎng)頁(yè)內(nèi)容
$filename = ROOT_PATH . $file;//靜態(tài)網(wǎng)頁(yè)路徑
file_put_contents($filename, $content);//生成文件
echo $content;//輸出到頁(yè)面
這幾句放在if (!$smarty->is_cached('index.dwt', $cache_id))判斷中這樣可以利用原有的判斷來(lái)決定是不是重新生成靜態(tài)頁(yè)面(不過(guò)測(cè)試了下是一直重新生成的 這個(gè)問(wèn)題有待繼續(xù)研究)
//在判斷外加上
//echo file_get_contents(ROOT_PATH . 'index.html');//輸出靜態(tài)頁(yè)面
以上幾條簡(jiǎn)單的語(yǔ)句,我們就可以生成首頁(yè)的靜態(tài)網(wǎng)頁(yè)。同理,我們可以生成產(chǎn)品類(lèi)別和產(chǎn)品的靜態(tài)網(wǎng)頁(yè),整個(gè)系統(tǒng)的靜態(tài)化就完成了。
首頁(yè)靜態(tài)頁(yè)面生成后,我們接下來(lái)要生成的是產(chǎn)品類(lèi)別的靜態(tài)頁(yè)面,我的想法是把產(chǎn)品類(lèi)別頁(yè)面保存在跟目錄下,這樣雖然會(huì)比較亂,
但是比較適合優(yōu)化,因?yàn)橐话闼阉饕孀ト〉臅r(shí)候只抓取二到三層。把產(chǎn)品類(lèi)別放在根目錄,體現(xiàn)產(chǎn)品類(lèi)別的重要性,易于搜索引擎的
抓取,另外一方面,我們可以把產(chǎn)品放在下個(gè)目錄中。
類(lèi)似代碼:
$filename = build_uri('category', array('cid' => $catinfo['cat_id']));//構(gòu)造路徑,這個(gè)可以選擇自己喜歡的構(gòu)造方法
$content = $GLOBALS['smarty']->make_html('category.dwt');//產(chǎn)生靜態(tài)頁(yè)面內(nèi)容
$filename = ROOT_PATH . $filename;//生成文件路徑,在根目錄下
file_put_contents($filename, $content);//輸出
產(chǎn)品的靜態(tài)頁(yè)面代碼:
$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))//生成產(chǎn)品目錄
{
mkdir($html_tempdir);
}
$htmlfilename = ROOT_PATH . $goodsfile;
file_put_contents($htmlfilename,$content);
我的是使用類(lèi)alias.html' target='_blank'>別名稱(chēng)加下劃線:
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 ;
..........................
有人問(wèn) make_html 這個(gè)函數(shù)在那里: 我現(xiàn)在補(bǔ)充如下:
在 includes 下的 cls_template.php 加上
function make_html($filename, $cache_id = '')
{
ob_start();
$this->display($filename,$cache_id);