ecshop会有一个自动的功能就是什自动解析模板中指定类型文件的路径,如有css,images,js这三个目录而像img,javascript就不会解析了,具体看文章最后面的图文说明。
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"> |
能自动替换路径的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/lostphp.png"> 将会被自动替换为 <img src="themes/模板目录名/images/lostphp.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' ); |
注意事项:虽然说是自动解析了但是也是有要前提了,比如说ecsho.css会被解析成themes/模板目录/ecshop.css哦
页css/ecshop.css会被解析成themes/模板/css/ecshop.css哦,而像images会被解析而img不会解析, js会被解析而javascript不会解析,具体例子如下图
新闻热点
疑难解答