在做ecstore项目时 前端同事想把模板里的css文件 放到ecstore/themes/default/css目录下 css目录是新建的
比如styles.css之前是ecstore/themes/default/images/目录下 改到css目录下 html里改过后 实际加载的路径不正确了
<link rel="stylesheet" href="images/styles.css" />
images下
实际加载:http://域名/themes/default/images/styles.css
改成css目录下后
<link rel="stylesheet" href="css/styles.css" />
实际加载:http://域名/index.php/css/styles.css
比如styles.css之前是ecstore/themes/default/images/目录下 改到css目录下 html里改过后 实际加载的路径不正确了
<link rel="stylesheet" href="images/styles.css" />
images下
实际加载:http://域名/themes/default/images/styles.css
改成css目录下后
<link rel="stylesheet" href="css/styles.css" />
实际加载:http://域名/index.php/css/styles.css
导致样式加载不上
后端处理逻辑点在
ecstore/app/site/lib/controller.php中
display_tmpl方法里
$compile_code = $this->fix_theme_media($compile_code);
在fix_theme_media方法里处理了加载的css为绝对路径
$from = array(
'/((?:background|src|href)\s*=\s*["|\'])(?:\.\/|\.\.\/)?(images\/.*?["|\'])/is',
'/((?:background|background-image):\s*?url\()(?:\.\/|\.\.\/)?(images\/)/is',
'/<!--[^<|>|{|\n]*?-->/'
);
改为
$from = array(
'/((?:background|src|href)\s*=\s*["|\'])(?:\.\/|\.\.\/)?((images|css)\/.*?["|\'])/is',
'/((?:background|background-image):\s*?url\()(?:\.\/|\.\.\/)?(images\/)/is',
'/<!--[^<|>|{|\n]*?-->/'
);
即可兼容css目录下的文件加载