ecshop中模板中路徑的處理給我們模板的制作帶來了極大的方便
ecshop會自動解析模板文件中的圖片,css文件,js文件的路徑,但并不是所有的圖片,css文件,js文件的路徑都會替換,
例如在dwt模板文件中有:
<link href="css/index.css" rel="stylesheet" type="text/css">
將會自動替換成
<link href="themes/模板目錄名/css/index.css" rel="stylesheet" type="text/css">
例如在dwt模板文件中有:
<link href="css/public.css" rel="stylesheet" type="text/css">
將會被自動替換為
<link href="themes/模板目錄名/css/public.css" rel="stylesheet" type="text/css">
能自動替換路徑的css文件一定要以路徑css開頭的css文件
例如在dwt模板文件中有:
<script type="text/javascript" src="js/index.js"></script>
將會被自動替換為
<script type="text/javascript" src="themes/模板目錄名/js/index.js"></script>
能自動替換路徑的js文件一定要以路徑js開頭的js文件
例如在dwt模板文件中有:
<img src="images/icon.png">
將會被自動替換為
<img src="themes/模板目錄名/images/icon.png">
能自動替換路徑的圖片文件一定要以路徑img開頭的圖片文件
這種自動解析方便我們可以把這些css,js,img和模板放在一起而不用考慮實際的路徑
ecshop對圖片,CSS,JavaScript的路徑替換原則可以參看include/cls_template.php文件里面的smarty_prefilter_preCompile()的最后幾行正則替換:
/* 在頭部加入版本信息 */
$source = preg_replace('/<head>/i', "<head>/r/n<meta name=/"Generator/" content=/"" . APPNAME .' ' . VERSION . "/" />", $source);
/* 修正css路徑 */
$source = preg_replace('/(<link/shref=["|/'])(?:/.//|/././/)?(css//)?([a-z0-9A-Z_]+/.css["|/']/srel=["|/']stylesheet["|/']/stype=["|/']text//css["|/'])/i','/1' . $tmp_dir . '/2/3', $source);
/* 修正js目錄下js的路徑 */
$source = preg_replace('/(<script/s(?:type|language)=["|/']text//javascript["|/']/ssrc=["|/'])(?:/.//|/././/)?(js//[a-z0-9A-Z_/-/.]+/.(?:js|vbs)["|/']><//script>)/', '/1' . $tmp_dir . '/2', $source);
/* 更換編譯模板的編碼類型 */
$source = preg_replace('/<meta/shttp-equiv=["|/']Content-Type["|/']/scontent=["|/']text//html;/scharset=(?:.*?)["|/'][^>]*?>/r?/n?/i', '<meta http-equiv="Content-Type" content="text/html; charset=' . EC_CHARSET . '" />' . "/n", $source);
}
/**
* 處理庫文件
*/
elseif ($file_type == '.lbi')
{
/* 去除meta */
$source = preg_replace('/<meta/shttp-equiv=["|/']Content-Type["|/']/scontent=["|/']text//html;/scharset=(?:.*?)["|/']>/r?/n?/i', '', $source);
}
/* 替換文件編碼頭部 */
if (strpos($source, "/xEF/xBB/xBF") !== FALSE)
{
$source = str_replace("/xEF/xBB/xBF", '', $source);
}
$pattern = array(
'/<!--[^>|/n]*?({.+?})[^<|{|/n]*?-->/', // 替換smarty注釋
'/<!--[^<|>|{|/n]*?-->/', // 替換不換行的html注釋
'/(href=["|/'])/././/(.*?)(["|/'])/i', // 替換相對鏈接
'/((?:background|src)/s*=/s*["|/'])(?:/.//|/././/)?(images//.*?["|/'])/is', // 在images前加上 $tmp_dir
'/((?:background|background-image):/s*?url/()(?:/.//|/././/)?(images//)/is', // 在images前加上 $tmp_dir
'/([/'|"])/././//is', // 以../開頭的路徑全部修正為空
);
$replace = array(
'/1',
'',
'/1/2/3',
'/1' . $tmp_dir . '/2',
'/1' . $tmp_dir . '/2',
'/1'
);
新聞熱點
疑難解答