just do it

ecshop自动解析模板文件中的图片,css文件,js文件的路径

ecshop会自动解析模板文件中的图片,css文件,js文件的路径,但并不是所有的图片,css文件,js文件的路径都会替换,
例如在dwt模板文件中有:

1
<link href="css/index.css" rel="stylesheet" type="text/css">

将会自动替换成

1
<link href="themes/模板目录名/css/index.css" rel="stylesheet" type="text/css">


能自动替换路径的css文件一定要以路径css开头的css文件

例如在dwt模板文件中有:

1
<script type="text/javascript" src="js/index.js"></script>

将会被自动替换为

1
<script type="text/javascript" src="themes/模板目录名/js/index.js"></script>

能自动替换路径的js文件一定要以路径js开头的js文件

例如在dwt模板文件中有:

1
<img src="images/lostphp.png">

将会被自动替换为

1
<img src="themes/模板目录名/images/lostphp.png">

能自动替换路径的图片文件一定要以路径img开头的图片文件
这种自动解析方便我们可以把这些css,js,img和模板放在一起而不用考虑实际的路径
ecshop对图片,CSS,JavaScript的路径替换原则可以参看include/cls_template.php文件里面的smarty_prefilter_preCompile()的最后几行正则替换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    /* 在头部加入版本信息 */
    $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'
    );
点赞