当前位置:首页 > CMS教程 > ecshop > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-12-05 11:19:43 浏览: 评论:0 

ecshop会有一个自动的功能就是什自动解析模板中指定类型文件的路径,如有css,images,js这三个目录而像img,javascript就不会解析了,具体看文章最后面的图文说明.

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

  1. <link href="css/index.css" rel="stylesheet" type="text/css">  
  2. //将会自动替换成: 
  3. <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()的最后几行正则替换,代码如下:

  1. /* 在头部加入版本信息 */ 
  2. $source = preg_replace('/<head>/i'"<head>\r\n<meta name=\"Generator\" content=\"" . APPNAME .' ' . VERSION . "\" />"$source); 
  3.  
  4. /* 修正css路径 */ 
  5. $source = preg_replace('/(<link\shref=["|\'])(?:\.\/|\.\.\/)?(css\/)?([a-z0-9A-Z_]+\.css["|\']\srel=["|\']stylesheet["|\']\stype=["|\']text\/css["|\'])/i','\1' . $tmp_dir . '\2\3'$source); 
  6.  
  7. /* 修正js目录下js的路径 */ 
  8. $source = preg_replace('/(<script\s(?:type|language)=["|\']text\/javascript["|\']\ssrc=["|\'])(?:\.\/|\.\.\/)?(js\/[a-z0-9A-Z_\-\.]+\.(?:js|vbs)["|\']><\/script>)/''\1' . $tmp_dir . '\2'$source); 
  9.  
  10. /* 更换编译模板的编码类型 */ 
  11. $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); 
  12.  
  13.  
  14. /** 
  15. * 处理库文件 
  16. */ 
  17. elseif ($file_type == '.lbi'
  18. /* 去除meta */ 
  19. $source = preg_replace('/<meta\shttp-equiv=["|\']Content-Type["|\']\scontent=["|\']text\/html;\scharset=(?:.*?)["|\']>\r?\n?/i'''$source); 
  20.  
  21. /* 替换文件编码头部 */ 
  22. if (strpos($source"\xEF\xBB\xBF") !== FALSE) 
  23. $source = str_replace("\xEF\xBB\xBF"''$source); 
  24.  
  25. $pattern = array
  26. '/<!--[^>|\n]*?({.+?})[^<|{|\n]*?-->/'// 替换smarty注释 
  27. '/<!--[^<|>|{|\n]*?-->/'// 替换不换行的html注释 
  28. '/(href=["|\'])\.\.\/(.*?)(["|\'])/i'// 替换相对链接 
  29. '/((?:background|src)\s*=\s*["|\'])(?:\.\/|\.\.\/)?(images\/.*?["|\'])/is'// 在images前加上 $tmp_dir 
  30. '/((?:background|background-image):\s*?url\()(?:\.\/|\.\.\/)?(images\/)/is'// 在images前加上 $tmp_dir 
  31. '/([\'|"])\.\.\//is', // 以../开头的路径全部修正为空 
  32. );  //开源软件:phpfensi.com 
  33. $replace = array
  34. '\1'
  35. ''
  36. '\1\2\3'
  37. '\1' . $tmp_dir . '\2'
  38. '\1' . $tmp_dir . '\2'
  39. '\1' 
  40. );   

注意事项:虽然说是自动解析了但是也是有要前提了,比如说ecsho.css会被解析成themes/模板目录/ecshop.css.

css/ecshop.css会被解析成themes/模板/css/ecshop.css,而像images会被解析而img不会解析,js会被解析而javascript不会解析,具体例子如下图:

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

Tags: ecshop自动解析 ecshop模板路径

分享到: