ECshop 模版开发 汇总

2016-07-07 16:03 来源:www.chinab4c.com 作者:ecshop专家

免费开源网店系统ecshop广告的调用的方法




免费开源网店系统ecshop广告的调用的方法,分享多种调用ecshop广告的方法,对用ecshop建站的朋友可以学习一下。
  
  方法1:
  第一步、 从后台首先添加广告位置 ,然后选择这个广告位置添加图片。
  第二步、 需要调广告的,php文件里加以下代码,获取要显示的广告
  //中部第一广告位
  $ads = array(
  'num'=>'1',//广告数量
  'id'=>'1'//广告位置id 这个id 你打开后台广告位置列表 鼠标放到每一条可以看到袄。
  );
  $banner =insert_ads($ads);
  $smarty->assign("banner",$banner);//设置广告位内容,在模板里调用
  第三步 打开模板文件 如果是只有一个广告{$banner} ok搞定,如果多个, 要循环数组{$banner},显示广告内容。
    
  方法2:(目前在用的,推荐)
  在后台添加广告位置,然后在该广告位置下添加广告(注意:每个广告位置下加一个广告),记住该广告位置的ID,然后在模板中加入下面代码即可
  {insert name=‘ads‘ id=2 num=1}
  ID:广告位置ID
  num:显示数量
  
  方法3:就是官方默认的方法。先添加广告位,然后添加模板的广告位区域,再在将两者对应上。

回答:
ecshop之transport和jquery冲突之完美解决方案

ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:

原因分析:
在transport.js文件中,大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJS**tring = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。


解决方案:
根本的解决办法是不用transport.js中的json功能,那么就要有一个相同的功能来代替它,这里我选用jquery-json1.3.js。首先要把transport.js中的json功能删除。由于实现json功能的函数有区别,所以要麻烦改掉原ecshop中各个地方用到的toJS**tring()函数。

解决步骤:
1. 下载附件中的js附件,并替换掉原文件。(主要去掉了transport.js的json功能并新增新的json功能)
2. page_header.lbi 中添加 {insert_scripts files='jquery.js,jquery.json-1.3.js'}
3. 在所有的JS中。
替换 *.toJS**tring() 为 $.toJSON(*)
替换 *.parseJSON() 为 $.evalJSON(*)
替换(不是去掉)页面所有的$(){}函数,防止jquery不生效(解释:这一步是要替换掉原ecshop里的$(){}这个函数,因为它与jquery是冲突的,解决的办法很多,可以用其他函数代替,比如getId(){}等等,也可以用jquery本身来解决,在此,我就不具体做例子了,由于最近比较忙,好多天没研究ecshop了。^_^ .还有一个解决办法,大家自行研究吧:
jQuery.noConflict()
运行这个函数将变量$的控制权让渡给第一个实现它的那个库。
这有助于确保jQuery不会与其他库的$对象发生冲突。
在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。
注意:这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。

)

注意:可能要替换掉很多地方,请大家不要怕麻烦


解决范例:
1.在商品浏览页,用户评论这里:
Ajax.call('comment.php', 'cmt=' + cmt.toJS**tring(), commentResp**e, 'POST', 'JSON');
替换为
Ajax.call('comment.php', 'cmt=' + $.toJSON(cmt), commentResp**e, 'POST', 'JSON');

2.index.js 里
var res = result.parseJSON();
替换为
var res = $.evalJSON(result);

ecshop支持用户名邮箱或手机号码登录
开源网店系统ecshop支持用户名,邮箱或手号码登录的插件,发布出来与大家共享下。
在user.php 的
if (empty($_POST['captcha']))
{
show_message($_LANG['invalid_captcha'], $_LANG['relogin_lnk'], ‘user.php’, ‘error’);
}
后面增加:
if(is_email($username))
{
$sql =”select user_name from “.$ecs->table(‘users’).” where email=’”.$username.”‘”;
$username_e = $db->getOne($sql);
if($username_e) $username=$username_e;
}
if(is_telephone($username))
{
$sql =”select user_name from “.$ecs->table(‘users’).” where mobile_phone=’”.$username.”‘”;
$username_e = $db->getOne($sql);
if($username_e) $username=$username_e;
}
在user.php的最底部加:
function is_telephone($phone){
$chars = “/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$/”;
if (preg_match($chars, $phone)){
return true;
}
}

网店系统ECSHOP设置用户登录后才能查看商品详情
今天有一个网友通过网站咨询我关于如何**ecshop网店系统登录后才可以看到商品,实现ecshop网店系统登录后才看商品需要在商品详情页模板文件里加判断代码。
实现ecshop网店系统登录后才看商品需要判断当前用户的登录状态,鲜志建站以默认模板为例,打开 /themes/default/goods.dwt

<!–当前位置 end–>
后边添加
{if $smarty.session.user_id gt 0}
继续,在
<!–友情链接 end–>
下添加
{else}
<div>您未登录,只有登录用户才有权查看!<a href="login.php">请登录</a></div>
{/if}
这样修改以后,就可以实现只有登录用户才能查看商品详情,未登录用户无法查看商品详情。ecshop网店系统登录后才看商品的方法分享给<a href="http://www.xazzz.com">制作网店</a>的朋友们。

ecshop之transport和jquery冲突之完美解决方案

ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:

原因分析:
在transport.js文件中,大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJS**tring = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。


解决方案:
根本的解决办法是不用transport.js中的json功能,那么就要有一个相同的功能来代替它,这里我选用jquery-json1.3.js。首先要把transport.js中的json功能删除。由于实现json功能的函数有区别,所以要麻烦改掉原ecshop中各个地方用到的toJS**tring()函数。

解决步骤:
1. 下载附件中的js附件,并替换掉原文件。(主要去掉了transport.js的json功能并新增新的json功能)
2. page_header.lbi 中添加 {insert_scripts files='jquery.js,jquery.json-1.3.js'}
3. 在所有的JS中。
替换 *.toJS**tring() 为 $.toJSON(*)
替换 *.parseJSON() 为 $.evalJSON(*)
替换(不是去掉)页面所有的$(){}函数,防止jquery不生效(解释:这一步是要替换掉原ecshop里的$(){}这个函数,因为它与jquery是冲突的,解决的办法很多,可以用其他函数代替,比如getId(){}等等,也可以用jquery本身来解决,在此,我就不具体做例子了,由于最近比较忙,好多天没研究ecshop了。^_^ .还有一个解决办法,大家自行研究吧:
jQuery.noConflict()
运行这个函数将变量$的控制权让渡给第一个实现它的那个库。
这有助于确保jQuery不会与其他库的$对象发生冲突。
在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。
注意:这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。

)

注意:可能要替换掉很多地方,请大家不要怕麻烦


解决范例:
1.在商品浏览页,用户评论这里:
Ajax.call('comment.php', 'cmt=' + cmt.toJS**tring(), commentResp**e, 'POST', 'JSON');
替换为
Ajax.call('comment.php', 'cmt=' + $.toJSON(cmt), commentResp**e, 'POST', 'JSON');

2.index.js 里
var res = result.parseJSON();
替换为
var res = $.evalJSON(result);

ECShop首页不同样式调用某分类的商品

ecshop作为免费开源的网店系统,真的很好用,鲜志建站,今天要给大家分享,在ecshop首页以不同的风格样式调用不同商品分类的ecshop模板标签处理方法,废话不多说了,直接上ecshop模板代码:
首先要确定,在ecshop首页模板文件里,出现如下含义的代码
<!– TemplateBeginEditable name="某分类区域" –><!– TemplateEndEditable –>
1、后台“模板管理——设置模板”里有“分类下的商品”,可以调用设置。
调用某个分类下的商品,都需要先在后台设置模板那里设置显示和显示条数,
2、在需要调用的模板里放上相应的代码即可:
<!--{foreach from=$cat_goods_5 item=goods}-->
<div class="xgoods">
<div class="mg"><a href="{$goods.url}" target="_blank"><img src="{$goods.thumb}" alt="{$goods.name|escape:html}" width="67" height="56" border="0" class="imgb"/></a></div>
<div class="name"><a href="{$goods.url}" target="_blank">{$goods.short_name|escape:html|truncate:10}</a><br />
<span class="fontr fontb fontbig">{$goods.shop_price}</span></div>
</div>
<!--{/foreach}-->
说明:上面的$cat_goods_5 ,其中5就是你想要调用的栏目ID值,把它改成你要调用的栏目ID值即可。

真是个有心人 不错 支持下

真是个有心人

总结的很不错哇

【转】ECShop开发系列教程-ECShop模板原理

模板的原理

类似Smarty/ECShop这类模板的原理如下图所示。






1. 首先是编译模板
ECShop/Smart是利用PHP引擎,所以编译的结果是一个PHP文件,其编译过程就是

将分隔符{}替换成PHP的标准分隔符<?PHP ?>,
将$var替换成 echo $var; 或者print $var;
将其他的比如foreach和if等也替换成标准的PHP语法。
将{include file…}之类的则替换成标准的PHP的inlcude …
其余都是等效替换。


2. 其次是生成编译结果

编译结果是PHP文件,并且编译结果可以重用,所以这种文件会存到临时缓存目录里面。


3. 利用PHP引擎执行结果

输出HTML结果。



ECShop模板的原理

ECShop的模板原理和上面基本类似,就是在编译的时候和Smarty模板有所修改,比较重要的有一下几点:

1. 模板的执行流程
$smarty->display

$smarty->fetch 返回HTML结果(所有模板)

$smarty->fetch_str(先编译成PHP、在给变量赋值、计算结果)
1) $smarty->smarty_prefilter_preCompile (编译成PHP)

2) $smarty->select (计 算每一个变量、表达式的结果,替换成标准PHP语法)
这一步是通过正则 实现的,匹配每一个{},将结果传给 $smarty->select,改方法通过switch/case逐一分析,替换成对应的表达式。
【所以添加自定义标签、自定义表达式可以修改此处。】

3) $smarty->get_para $smarty->select通过调用get_para来实现获取具体变量的值。

4) $smarty->get_val 而$smarty->get_para通过get_val来计算最终变量的值。
【自定义函数在此处添加,注意自定义函数和自定 义标签的区别】

$smarty->_eval 替换成标准的PHP文件后通过eval来执行结果。



2. Lbi文件替换
在dwt文件中,类似<!-- #BeginLibraryItem "/library/**.lbi" --><!-- #EndLibraryItem -->这样代码中间的所有的代码 被替换成一个 {include file /library/xx.lbi}

3. Editable的region替换
在dwt文件中,类似
<!-- TemplateBeginEditable name="左边区域" --><!-- TemplateEndEditable -->中间的内容,都被 动态替换。

替换原理
首先是get_dyna_libs($theme, $tmp)函数得到当前theme下$tmp文件的所有动态区域,该函数读取数据库中的记录,按照后台设置的顺序排序。
返回的每个区块有三个参数,ID、Number、Type。
ID是标识,Number表示插入的个数,Type有1、2、3、4,分别代表:分类的商品、品牌的商品、文章列表、广告位。

然后把每个<!-- TemplateBeginEditable name="区域名称" --><!-- TemplateEndEditable -->里面的内容全部替换。

4. 自定义函数等

支持一下,要是能有一个较为简介的章节目录 这样就更系统了。

[共享] 如何在商品列表页添加商品编号调用

[共享] 如何在商品列表页添加商品编号调用

本帖最后由 linxiflash 于 2012-12-7 14:04 编辑


修改category.php

448 行改为以下内容
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_sn, g.goods_name_style, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ' .
复制代码
503行
$arr[$row['goods_id']]['name'] = $row['goods_name'];

后面添加代码
$arr[$row['goods_id']]['goods_sn']= $row['goods_sn'];

然后在模版category.dwt 中需要显示编号的地方添加
{$goods.goods_sn}


或 :<strong>{$lang.goods_sn}</strong>{$goods.goods_sn}


演示 www.cnairtoy.com

挺用心的啊

果然很强大!!!

学习了,支持!