Ecshop中怎样使Smarty支持模板路径替换
smarty目次是smarty顺序,themes是模板目次,themes下面的每一个子目次代表一种模板。默许是default模板。
模板下面的dwt是模板文件,lib里面lbi是模板库文件,images目次寄存图片。和ECShop非常的相似,由于我预备仿它。
每个dwt对应一个php页面,比方index.php对应index.dwt。
好了。
比方说index.dwt里面有句代码:
<div style="WIDTH: 650px; WHITE-SPACE: nowrap; OVERFLOW: auto" class="codecolorer-container html4strict mac-classic">
<div class="html4strict codecolorer"><img src="images/user.gif" alt="user" />
也许你会以为这个图片可以显示出来,然则我们翻开localhost/index.php,发现图片并未显示,图片的途径酿成了localhost/images/user.gif,而真正的途径应该是localhost/themes/default/images/user.gif。
这只是图片的例子,假如js或许css都需求交换,就需求给smarty写个插件或许是扩展smarty的代码。
小弟不才,只能在本来smarty的持续上修正代码,办法是:
翻开Smarty_Compiler.class.php,跳转到_compile_file函数的这句:
$compiled_content = $template_header . $compiled_content;
的下面添加以下代码,都是用正则表达式(preg_replace)来交换字符串,详细寄义有注释:
<div style="WIDTH: 650px; WHITE-SPACE: nowrap; OVERFLOW: auto" class="codecolorer-container php mac-classic">
<div class="php codecolorer">$tmp_dir = 'themes/' . $GLOBALS['_CFG']['template'] . '/'; // 模板地点途径
/* 批改css途径 */
$compiled_content = preg_replace('/(<link\shref=["|\'])(?:\.\/|\.\.\/)?(css\/)?([a-z0-9A-Z_]+\.css["|\']\srel=["|\']stylesheet["|\']\stype=["|\']text\/css["|\'])/i','\1' . $tmp_dir . '\2\3', $compiled_content);
/* 批改js目次下js的途径 */
$compiled_content = preg_replace('/(<script\s(?:type|language)=["|\']text\/javascript["|\']\ssrc=["|\'])(?:\.\/|\.\.\/)?(js\/[a-z0-9A-Z_\-\.]+\.(?:js|vbs)["|\']><\/script>)/', '\1' . $tmp_dir . '\2', $compiled_content);
$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'
);
$compiled_content= preg_replace($pattern, $replace, $compiled_content);
$GLOBALS['_CFG']['template']是一个全局变量,用于寄存当时模板的目次名,你可以放在装备文件中,也可以放入数据库,然后翻开页面的时分读取就行了。
也并纷歧定是一切的资本都需求交换,视你的项目状况而定,其实这几行代码都是从ECShop的cls_template.php copy过来的。在dwt里面刺进js、css的时分需求留意,rel、type、src等属性的在script和link中的挨次固定依照以上代码的挨次。不然无法交换。
新余网站建设
- 1长尾词才是企业网站流量的提升的根本
- 2企业集团网站建设解决方案
- 3怎样学习及实践网络营销
- 4Ecshop中怎样使Smarty支持模板路径替换
- 5网站权重的表现
- 6企业为什么须要权威的网站设计单位做官方网站呢?
- 7万网中,如何查看邮箱账号登录网页版日志
- 8转化率对网站的影响和改善
- 9反馈留言不能转发到指定邮箱的解决办法
- 10百度算法调整带来的优化策略的变化
- 11PHP与JAVA相比,哪个是高端OA软件御用语言
- 12新余网站设计公司如何设计方案
- 13正确使用PHP引号
- 14系统的二次开发、初试ECSHOP制作模板
- 15怎样使用php 获取远程网址头部信息
- 16网站改版后的网站优化
- 17企业网站优化中的内容营销
- 18网站设计师必须懂的
- 19企业网站制作应怎样设计细节
- 20详谈UChome核心开发
- 21清除htaccess设置的css、js缓存
- 22优化中代码需要注意的
- 23详谈UCHome数据库相关介绍
- 24养成几条PHP编程好习惯
- 25网站建设之网站定位
- 26网站建设要软硬兼施
- 27企业为什么偏偏需要权威的网站开发企业做官网呢?
- 28php中时间轴开发
- 29PHP开发者经常犯的几个MySQL错误
- 30怎么添加网站统计代码?
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼