Ecshop商城商品属性筛选插件制作方法
- 格式:doc
- 大小:29.00 KB
- 文档页数:4
ecshop优化之Robots设置技巧使用过ecshop的朋友都会知道ECSHOP有严重的重复收录过多的问题,很多朋友的网站实际产品加文章数量仅仅1000来个,查询链接居然有3,4千,google甚至会有上万。
重复链接因为Title一样,所以常常会被搜索引擎惩罚导致收录差,对于这个问题,SEOer们是必须要解决的,以下发表ecshop模板堂ecshop模板堂的解决经验,欢迎点评。
分析会有哪些重复链接产生1.就ecshop模板堂使用的情况,首先是产品页和文章页会有很多的页面以 ?from=rss 结束如 /goods-1.html?from=rss这个的解决方法有二,一是通过删除rss信息订阅功能,二是Robots设置ecshop模板堂ecshop模板堂选择的是第二种所以ecshop模板堂在Robots里加了一条禁止搜索引擎索引的语句:Disallow: /*rss*这句的意思是只要根目录下的链接带“rss”就不索引,除非你的网站会有带页面地址里正好出现rss这连续三个子母,这个语句都可以解决这个问题。
2.分类页里的动态链接分类页里充斥了大量的动态链接包括属性筛选的链接排序的链接显示方式的链接接下来ecshop模板堂们逐一击破首先是属性筛选的链接如/category-1-min80-max90-attr0.html这个是筛选里面的价格的筛选包括其他属性的链接,ecshop模板堂们发现规律就是都会出现“min” “max” “attr”三个词,分别是最小,最大,属性值和上面的,ecshop模板堂们在Robots加了一跳禁止抓取包括这三个词的语句:Disallow: /*min*Disallow: /*max*Disallow: /*attr*然后,排序的链接和显示方式的链接ecshop模板堂们点击后同样会出现类似一长串,其中仍然包括“min” “max” “attr”三个词因而上面Robots的设置已经可以解决这样就完了吗?没有,虽然ecshop模板堂们设置了Robots的抓取,但为了让蜘蛛爬行更方面直接,ecshop模板堂们需要做另外一个工作,就是限制爬行找到模板文件里对应的属性筛选和产品列表的模板文件(ecshop 模板堂自己的是cat_filter.lbi和goods_list.lbi)找到属性筛选、排序、显示方式的链接代码,在其里增加一句rel=”nofollow”,意思就是限制爬行robots的作用在于禁止抓取,而nofollow则在于禁止爬行,双管齐下很好的引导了蜘蛛和搜索引擎3.其它的一些重复动态链接ecshop模板堂ecshop模板堂发现的其它重复链接还包括品牌商品里的显示方式如ecshop模板堂在Robots同样加了三句Disallow: /*min*Disallow: /*max*Disallow: /*attr*就解决了不同显示方式还有不同链接的重复收录问题以上ecshop模板堂所提到的并未包含所有的动态链接,但给大家做了一个不错的参考,因为万变不离其宗,朋友们可以依据ecshop模板堂提到的方法和思路慢慢的把自己的Robots写完整,同时适当的使用nofollow在模板里限制蜘蛛的爬行注意的是对于已经收录了大量的重复链接,您进行以上提到的修改,搜索引擎并不能快速做出反应,对待新的页面会限制收录重复页面,但对于已经收录的重复链接,搜索引擎需要花了一段时间取消收录而重新收录主页面,ecshop模板堂的经验是至少需要2个月。
添加商品属性界面设计
工作流和业务流
简述
本功能主要描述添加一个商品属性的过程。
点击添加商品属性的按钮,通过ID 查询出需要修改的商品属性的信息,将信息显示到表单中,由用户修改完成后,再提交到处理页面,由处理页面负责将数据接收,组合成更新使用的SQL语句,将数据更新至数据库表中,确认更新完成后,返回列表页面,完成更新。
字段说明:
属性名称:单行文本,必填项,同一分类下不允许同名。
所属商品类型:下拉列表,必填项
属性组:下拉列表,当设置了属性分组后才显示
能否进行检索:单选,默认为:不需要检索。
用于设置商品分类的检索条件和进行数据缓存。
相同属性的商品是否关联:单选,默认为:否。
用于相关商品运算规则。
属性是否可选:单选,默认为唯一属性。
录入方式:单选,默认为手工录入。
手工录入:单行文本方式;列表选择:下拉列表方式;多行文本:textarea类型。
可选值列表:多行文本。
通过换行分隔字符串,为下拉列表方式提供可选值。
dedcms织梦实现⾃定义字段进⾏产品筛选(类似于购物商城参数筛选)企业⽹站中如果⼀些产品有很多不同的交叉属性,就需要⽤到:1、后台为该产品添加⼀些⾃定义的筛选字段 2、前台根据这些字段逐层筛选更⽅便客户找到他需要的产品(⽂章)本插件(⽂件)完全不动dedecms 任何核⼼⽂件;需要增加和修改的地⽅为:1、进⾏筛选的动态php页⾯;本篇在wwwroot/plus 下⾯增加 pcba.php页⾯;2、在模板⽬录下增加⽤于显⽰的模板⽂件;本篇在wwwroot/templets/default/ 下⾯增加 list_PCBA_with_type.htm 页⾯;3、在/include/⽂件价下找到 extend.func.php ⽂件增加⼀些函数本⽂仅作抛砖引⽟(功能已实现),希望⼤家⼀起来完善(美化)该插件;本⼈⽔平有限,还有很多不⾜之处;不过以下代码已经能将核⼼功能完成,也很实⽤(很多⽹友需要⽤到的)1、在wwwroot/plus 下⾯增加 pcba.php页⾯;代码如下:------------------------------------------------------------------------------------------<?phprequire_once("../ouyp/config.php");require_once(DEDEINC."/dedetag.class.php");require_once(dirname(__FILE__).'/../include/common.inc.php');require_once(DEDEINC."/extend.func.php");$currentUrl = $_SERVER["REQUEST_URI"];//根据当前URL中包含的查询字符串进⾏进⾏筛选并返回所有符合条件的板卡的ID值,以逗号分隔function returnQueryIDS($url){$data = array();$parameter = explode('&',end(explode('?',$url)));$addquery = count($parameter);foreach($parameter as $val){$tmp = explode('=',$val);$data[$tmp[0]] = $tmp[1];}$query = $query."and".$tmp[0];if($addquery == '1'){foreach ($data as $key => $value) {$value = urldecode($value);$query = "SELECT * FROM `#@__pcba` WHERE FIND_IN_SET('$value',$key)";}}else {$firstquery = array_slice($data,0,1);$otherquery = array_slice($data,1);foreach ($firstquery as $key => $value) {$value = urldecode($value);$query = "SELECT * FROM `#@__pcba` WHERE FIND_IN_SET('$value',$key)";}foreach ($otherquery as $key => $value) {$value = urldecode($value);$query = $query." and FIND_IN_SET('$value',$key)";}}$orderby = ' order by aid desc ';$query = $query.$orderby;if($addquery !== 0){global $dsql;$array = array();$dsql->SetQuery($query);$dsql->Execute();while($row = $dsql->GetArray()){$aids = array_push($array,$row['aid']);}$aids = join(",",$array);}else{$aids = 0;}return $aids;}//根据⽹址查询的字段返回所有符合条件的板卡ID值集合,并输出ID值集合中所有的产品returnPCBAArc(returnQueryIDS($currentUrl));require_once(DEDETEMPLATE.'/default/list_PCBA_with_type.htm');-------------------------------------------------------------------------------------------2、在wwwroot/templets/default/ 下⾯增加 list_PCBA_with_type.htm 页⾯核⼼显⽰代码如下:<div style="width:750px; float:left; padding-left:10px; height:150px; padding-top:7px; text-align:left; clear:both"> <table width="99%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="top" width="120px">板卡架构:</td><td valign="top"><?php returnFieldValuesPHP($currentUrl,"jiagou","1"); ?></td></tr><tr><td valign="top"> CPU 核⼼:</td><td valign="top"> <?php returnFieldValuesPHP($currentUrl,"hexin","1"); ?></td></tr><tr><td valign="top">应⽤领域</td><td valign="top"><?php returnFieldValuesPHP($currentUrl,"hangye","1"); ?></td></tr><tr><td valign="top">板卡尺⼨</td><td valign="top"><?php returnFieldValuesPHP($currentUrl,"type_size","1"); ?></td></tr><tr><td valign="top"> </td><td valign="top"> </td></tr></table></div>-----------------------------------------------------------------------------------------3、在/include/⽂件价下找到 extend.func.php ⽂件增加以下函数------------------------------------------------------------//根据传递过来的多个以逗号拼接的产品ID,形成数组、查询并返回相应的产品function returnPCBAArc($qstr,$orderby='id',$desc ='desc'){global $dsql;if(!empty($qstr)){$arcids = preg_replace("#[^0-9,]#", '', preg_replace("#,#", ',', $qstr));$query = "SELECT * FROM `#@__archives` WHERE id in($arcids) order by $orderby $desc";$dsql->SetQuery($query);$dsql->Execute();while($row = $dsql->GetArray()){$url = GetOneArchiveUrl($row['id']);$aTitle = $row['title'];$picURL = $row['litpic'];$gonghao = $row['gonghao'];$size = $row['size'];$gaisu = $row['gaisu'];$keydesc = $row['keydesc'];$msg .="<DIV style='float:left; border-right:1px #d0d9e2 solid; border-bottom:1px #d0d9e2 solid; width:332.6px;' >";$msg .="<UL class="productline_2"><LI><DIV class="font14" style=overflow:hidden><SPAN style='FONT-WEIGHT: bold'id=BrandList_ctl06_lblSeriesName><a href=$url class='title' title='$aTitle'>$aTitle</a></SPAN> </DIV><DIV class="pic"><a href=$url> <img class='lazy' style='BORDER:none;WIDTH: 150px;' data-original=$picURL src='/templets/default//js/grey.gif' /> </a></DIV>";$msg .="<DIV style='HEIGHT: 90px; OVERFLOW: hidden' class="intro"><SPAN id=BrandList_ctl06_lblSeriesDescription><P> <STRONG>$keydesc </STRONG><BR>$gaisu</P></SPAN></DIV><SPAN class="text_o"><a href=$url class="title">了解详情></A> </SPAN><div class="sc_size"><div style=width: 80px class="left">功耗及尺⼨:</div><span onmouseout=$(this).removeClass('size_a'); onmouseover=$(this).addClass('size_a'); class="size">$gonghao W </span> <span class="size">$size mm</span> </div></LI></UL></DIV>";}}print($msg);}//将数组转化为查询筛选字符串,类似&a=111&b=222function array_implode($glue, $separator, $array) {if ( ! is_array( $array ) ) return $array;$string = array();foreach ( $array as $key => $val ) {if ( is_array( $val ) )$val = implode( ',', $val );$string[] = "{$key}{$glue}{$val}";}return implode( $separator, $string );}-----------------------------------------------------------------------第三个函数最为关键//获取⾃定义字段所有值并附带链接function returnFieldValuesPHP($currentURl,$customField,$type='',$id='17'){global $dsql;if(!empty($customField)){$fname = $customField;$row = $dsql->GetOne("SELECT fieldset,'' as maintable,addtable,issystem FROM `#@__channeltype` WHERE id='$id'");$fieldset = $row['fieldset'];$trueTable = $row['addtable'];$dtp = new DedeTagParse();$dtp->SetNameSpace("field", "<", ">");$dtp->LoadSource($fieldset);foreach($dtp->CTags as $ctag){if(strtolower($ctag->GetName())==strtolower($fname)) break;}//将当前路径数组化$parameter = explode('&',end(explode('?',$currentURl)));$addquery = count($parameter);foreach($parameter as $val){$tmp = explode('=',$val);$data[$tmp[0]] = $tmp[1];}$rowValue = explode(",",$ctag->GetAtt('default'));$filename = "pcba.php";foreach($rowValue as $key=>$value){if($addquery !== 0){//检查当前路径中是否已经存在某个查询的⾃定义字段选项,如存在则重新赋值,否则直接⽤"&"添加查询字段if(array_key_exists($customField, $data)){$data[$customField] = $value;//将路径数组重新⽣成路径$newdata = array();$newdata = $data;$firstquery = array_slice($newdata,0,1);$otherquery = array_slice($newdata,1,5);foreach($firstquery as $k1 =>$v1){$fURl = $filename."?".$k1."=".$v1;}if(count($otherquery) !== 0){next(implode("&", $otherquery));$query = array_implode( '=', '&', $otherquery);//print_r($query);$newURl = $fURl."&".$query ;}else{$newURl = $fURl;}}else{$newURl = $currentURl."&".$customField."=".$value;}}else{$newURl = $filename."?".$customField=$value;}$va = "<a href=".$newURl.">".$value."</a> ";echo $va;}}}4、在后台增加相应的⾃定义字段,本⽰例增加的字段为:jiagou,hexin,hangye,type_size ,均为checkBox多选类型思路:1、pcba.php 页⾯作⽤:根据地址栏URL⾥⾯的筛选字段及值,找到所有符合条件的产品2、extend.func.php ⾥⾯增加的 3个扩展函数⽤于⽐对当前URL⾥⾯筛选的条件(字段)的,如⽤户要筛选的字段不在URL⾥⾯则增加、如⽤户要筛选的字段在URL⾥⾯已存在则替换字段的值,并显⽰在页⾯;。
ecshop商品详细页如何添加“售后服务”、“支付方式”等栏目秦皇岛商之翼旗下ECSHOP开发中心()ecshop默认商品详细页只有‘商品描述’和‘商品属性’2个分类,在有些时候为了更清除描述商品和提供给用户更多的商品信息需要添加其它分类。
ecshop默认的分类做好了切换,所以只需要复制以下代码就可以完成分类的添加。
打开goods.dwt页面,找到如下代码红色部分设置分类名称,复制一个<h2>标签就可以添加一个分类名。
如添加一个名称为‘售后服务’,代码如下<h3 style="padding:0 5px;"><div id="com_b" class="history clearfix"><h2>{$lang.goods_brief}</h2><h2 class="h2bg">{$lang.goods_attr}</h2><!-- {if $package_goods_list} --><h2 class="h2bg" style="color:red;">{$lang.remark_package}</h2><!-- {/if} --><h2 class="h2bg">售后服务</h2></div></h3>class="h2bg"设置选中状态样式分类名称添加了,还需要添加内容才能通过切换浏览到‘售后服务’的内容,找到以下代码<blockquote><table width="100%" border="0" cellpadding="3" cellspacing="1"bgcolor="#dddddd"><!-- {foreach from=$properties item=property_group key=key} --><tr><th colspan="2" bgcolor="#FFFFFF">{$key|escape}</th></tr><!-- {foreach from=$property_group item=property} --><tr><td bgcolor="#FFFFFF" align="left"width="30%"class="f1">[{$|escape:html}]</td><td bgcolor="#FFFFFF" align="left" width="70%">{$property.value}</td></tr><!-- {/foreach}--><!-- {/foreach}--></table></blockquote><blockquote>标签包围的就是切换名称对应的内容,顺序和名称的一样至此全部修改完成其实就是在总类增加个菜单,底部是<blockquote> 调用【ECSHOP开发中心】。
ecshop商品详情页添加任意字段的方法一、在数据库添加字段,会手写的就后台添加,不会就进入phpmyadmin默认的就行。
这是通用的写法ALTER TABLE `kbt_goods` ADD `goods_gift` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL AFTER `is_check` ;表名做下修改即可。
二、修改admin/good.php找到/* 处理商品数据 */$shop_price = !empty($_POST['shop_price']) ? $_POST['shop_price'] : 0;后面依葫芦画瓢添加近自己字段。
找到/* 入库 */if ($is_insert){if ($code == '')同样依葫芦画瓢添加近自己字段,找到"goods_gift = '$goods_gift'," .同样依葫芦画瓢添加近自己字段。
三、修改admin/templates/goods_info.htm在合适的地方添加,如果想在编辑商品—其他信息处添加,找到{if $code eq ''}{$b_goods_gift}{/if}添加{$b_goods_sz}四、修改模板在合适的地方添加:如果想在商品重量下添加查找{$goods.goods_weight}在下面添加{$lang.goods_sz}{$goods.goods_sz}自己修改相应字段。
五、基本到位,下面就是修改下语言项,不想修改也可以,将{$lang.goods_sz}、{$b_goods_sz}改成自己需要的个汉字即可。
ecshop简单三步实现导航商品分类二级菜单1.在page_header.lbi对应的位置(你想显示导航的位置)插入(注意下面的themes/模板名称/util.php中的模板名称改成你模板文件夹的名称) ? php require_once(themes/模板名称/util.php); ? div class = h1.在page_header.lbi对应的位置(你想显示导航的位置)插入(注意下面的"themes/模板名称/util.php"中的"模板名称"改成你模板文件夹的名称)<?phprequire_once("themes/模板名称/util.php");><div class="header-menu"><p {if $navigator_list.config.index eq 1} class="cur" {/if}><a href="../index.php">{$lang.home}</a></p><ul><!-- {foreach name=nav_middle_list from=$navigator_list.middle item=nav} --><li onMouseOver="sw_nav(this,1);" onMouseOut="sw_nav(this,0);" {if $nav.active eq 1} class="curs"{/if}><a href="{$nav.url}" {if $nav.opennew eq 1}target="_blank" {/if}>{$}</a><?php$subcates = get_subcate_byurl($GLOBALS['smarty']->_var['nav']['url']);if($subcates!=false){if(count($subcates)>0){echo "<div class='sub_nav'>";if($subcates){foreach($subcates as $cate){echo "<a href='".$cate['url']."' class='level_1'>".$cate['name']."</a>";}}echo "</div><iframe frameborder='0' scrolling='no' class='nomask'></iframe>";}}></li><!-- {/foreach} --></ul><script type="text/javascript">//初始化主菜单function sw_nav(obj,tag){var subdivs = obj.getElementsByTagName_r("DIV"); var ifs = obj.getElementsByTagName_r("IFRAME");if(subdivs.length>0){if(tag==1){subdivs[0].style.display = "block";ifs[0].style.display = "block";}else{subdivs[0].style.display = "none";ifs[0].style.display = "none";}}}</script></div>2.在CSS文件中插入.header-menu p{ float:left;padding:1px 12px 1px 0;margin-top:-2px;}.header-menu ul li{float:left;padding:1px 12px 1px 12px;margin-top:-2px;}.header-menu ul li a,.header-menu p a{color: #333;display:block;}.header-menu ul li a:hover,.header-menu p a:hover{color:#888;}.header-menu ul li.curs{background:#999;}.header-menu ul li.curs a{color:#fff;}.sub_nav{ background:#999;width:110px; position:absolute; z-index:5003; display:none;margin-left:-12px;}.nomask{ background:#fff; width:110px; height:50px; position:absolute; z-index:5002;display:none;margin-left:-12px;}.sub_nav a.level_1{ display:block;color:#fff;padding:6px 6px 6px 13px;font:11px Tahoma,Verdana,PMingLiU,Arial;border-bottom:1px dotted #D1D1D1;*border-bottom:1px dotted #D1D1D1 !important;*border-bottom:1px solid #A8A8A8;}.sub_nava.level_1:hover{color:#fff;background:#55B46C;text-decoration:none;}3.把以下代码编辑成(util.php)解压出来拷贝到模板目录下<?phpfunction get_subcate_byurl($url){$rs = strpos($url,"category");if($rs!==false){preg_match("/\d+/i",$url,$matches);$cid = $matches[0];$cat_arr = array();$sql = "select * from ".$GLOBALS['ecs']->table('category')." where parent_id=".$cid." and is_show=1";$res = $GLOBALS['db']->getAll($sql);foreach($res as $idx => $row){$cat_arr[$idx]['id'] = $row['cat_id'];$cat_arr[$idx]['name'] = $row['cat_name'];$cat_arr[$idx]['url'] = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);$cat_arr[$idx]['children'] = get_clild_list($row['cat_id']);}return $cat_arr;else{return false;}}function get_clild_list($pid){//开始获取子分类$sql_sub = "select * from ".$GLOBALS['ecs']->table('category')." where parent_id=".$pid." and is_show=1";$subres = $GLOBALS['db']->getAll($sql_sub);if($subres){foreach ($subres as $sidx => $subrow){$children[$sidx]['id']=$subrow['cat_id'];$children[$sidx]['name']=$subrow['cat_name'];$children[$sidx]['url']=build_uri('category', array('cid' => $subrow['cat_id']), $subrow['cat_name']);}}else{$children = null; }return $children; }。
电子商务平台(网上商城)系统特色功能介绍目录1. 系统特点 (4)1.1。
技术架构 (4)1.2. 开放的插件机制 (4)1.3。
功能Ajax化 (5)1.4. 安全高效 (5)1.5. 搜索引擎友好性 (6)2。
商品展示 (7)2.1. 商品分类与品牌 (7)2.2。
商品类型与属性 (7)2。
3. 推荐商品 (9)2.4。
商品详情页 (10)2.4.1。
相关商品 (10)2.4。
2。
配件112。
4。
3.关联文章112。
4。
4.购买过该商品的人还买过的商品112.5。
RSS Feeds和T ag (11)3. 购物流程 (12)3.1。
智能化的购物流程 (12)3.2. 聪明的配送方式 (13)4。
推广促销 (13)4.1. 拍卖 (13)4。
2. 夺宝奇兵 (14)4。
3。
团购144。
4. 灵活多样的优惠活动 (14)4。
5。
推荐提成154。
6. 会员信用额度 (15)4.7. 销售专题 (16)5。
会员系统 (16)5。
1. 会员数据整合 (16)5.2。
积分兑换 (16)6. 网店管理 (17)6.1. 报表统计 (17)6.2. 办事处 (20)6.3。
短信 (20)6.4。
计划任务 (20)7. 结束语 (21)1.系统特点1.1.技术架构采用PHP、Ajax技术开发,系统可运行于Linux、Windows等多种操作系统平台。
系统采用MVC(Module,View Controller)三层架构设计,从根本上保证了系统的健壮性与可扩展性。
图表错误!未定义书签。
1.2.开放的插件机制对于电子商务网站来说支付与配送是业务流程中至关重要的一个环节,也正是网上支付与各物流公司的兴起促使了电子商务快速的发展.抛弃了传统的固定公式,由用户来设置各种参数的方式,而是采用了一个开放式的插件机制来管理各种支付和配送方式。
对于网上商店网站的站长来说,建立一个社区是一种提高网店的用户黏度的有效手段,这样也就带来了一个问题,如何将社区的用户与网店的用户进行整合.对于会员数据的整合也采用了插件的形式,目前提供的插件已经基本覆盖了国内流行的各种基于MySQL数据库的社区系统。
在ECSHOP的任意页面调用商品属性ECSHOP网店服务中心 / 2012-01-04看到标题有的人觉得这个很复杂,其实这个没那么复杂,直接用下面的方法,就可以在ECSHOP的任意页面调用商品属性一)、打开includes\lib_insert.php文件,在最后面增加一个函数:function insert_attr($arr){static $static_resNULLr /> $aid= isset($arr['aid'])?$arr['aid']:0;$gid= isset($arr['gid'])?$arr['gid']:0;if($aid==0) return '';if ($static_res[$aid][$gid] === NULL){if($gid>0){$static_res[$aid][$gid] = $GLOBALS['db']->getOne('select attr_value from ' . $GLOBALS['ecs']->table('goods_attr') . " where attr_id ='$aid' and goods_id='$gid' ");}else{$static_res[$aid][$gid] = $GLOBALS['db']->getOne('select attr_name from ' . $GLOBALS['ecs']->table('attribute') . " where attr_id ='$aid' ");}}return $static_res[$aid][$gid];}注意要加在 ?> 的前面二)、接下来就可以直接在ECSHOP模板中(dwt文件、lib文件皆可)中调用,调用方法:{insert name='attr' aid=属性id gid=商品编号} 调用商品的属性值{insert name='attr' aid=属性id} 调用商品的属性是不是很简单,经过上面修改代码或增加代码后,就可以在ECSHOP的任意页面调用商品属性了。
Ecshop商城商品属性筛选插件制作方法分享这两天用ecshop制作一个商城站时想把里面的商品属性值做成很多大商城常见的可选择分类那种,搜了不少没有提供这方面教程的,找到的也不能使用。
有的都是作为插件卖的,竟然没人分享出来,自己研究了下搞定了,免费分享给每位遇到同样问题的朋友,希望能帮助到你。
修改步骤:1、将下面这个图片上传到themes/您当前模板/images文件夹里面,这里我命名为test.gif。
如果你自己改为其他文件名,那么在下面的修改中就要保持一致。
2、找到themes/您当前模板/goods.dwt文件,做如下修改:找到下面这段代码:<!-- {* 开始循环所有可选属性*} --><!-- {foreach from=$specification item=spec key=spec_key} --><li class="padd loop"><strong>{$}:</strong><br /><!-- {* 判断属性是复选还是单选*} --><!-- {if $spec.attr_type eq 1} --><!-- {if $cfg.goodsattr_style eq 1} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="radio" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" {if $key eq 0}checked{/if} onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {else} --><select name="spec_{$spec_key}" onchange="changePrice()"><!-- {foreach from=$spec.values item=value key=key} --><option label="{$bel}" value="{$value.id}">{$bel} {if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if}{if $value.price neq 0}{$value.format_price}{/if}</option><!-- {/foreach} --></select><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --><!-- {else} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="checkbox" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --></li><!-- {/foreach} --><!-- {* 结束循环可选属性*} -->将上面这段代码替换为以下代码:<!-- {* 开始循环所有可选属性*} --><li style="border:1px solid #FBD2D2; float:left; width:315px; margin-left:5px; background:#FCF0F0; padding:10px;"><!-- {foreach from=$specification item=spec key=spec_key} -->{$}:<div class="catt"><!-- {* 判断属性是复选还是单选*} --><!-- {if $spec.attr_type eq 1} --><!-- {if $cfg.goodsattr_style eq 1} --><!-- {foreach from=$spec.values item=value key=key} --><a {if $key eq 0}class="cattsel"{/if} onclick="changeAtt(this)" href="javascript:;" name="{$value.id}" title="{$bel}">{$bel}<input style="display:none" id="spec_value_{$value.id}" type="radio" name="spec_{$spec_key}" value="{$value.id}" {if $key eq 0}checked{/if} /></a><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {else} --><select name="spec_{$spec_key}"><!-- {foreach from=$spec.values item=value key=key} --><option label="{$bel}" value="{$value.id}">{$bel} {if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if}{if $value.price neq 0}{$value.format_price}{/if}</option><!-- {/foreach} --></select><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --><!-- {else} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="checkbox" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --></div><!-- {/foreach} --></li><!-- {* 结束循环可选属性*} -->再找到下面这段代码:/*** 接收返回的信息*/function changePriceResponse(res){if (res.err_msg.length > 0){alert(res.err_msg);}else{document.forms['ECS_FORMBUY'].elements['number'].value = res.qty;if (document.getElementById('ECS_GOODS_AMOUNT'))document.getElementById('ECS_GOODS_AMOUNT').innerHTML = res.result;}}在上面这段代码下增加以下代码:/*** 颜色选择器*/function changeAtt(t) {stChild.checked='checked';for (var i = 0; i<t.parentNode.childNodes.length;i++) {if (t.parentNode.childNodes[i].className == 'cattsel') {t.parentNode.childNodes[i].className = '';}}t.className = "cattsel";changePrice();}3、打开themes/您当前模板/style.css,将下面的代码增加到最后(如果您的模板调用的css文件不是style.css,那么将下面的代码加到您调用的那个css文件里面去):/*--------------颜色选择器CSS添加-------------*/#goodsInfo .catt {width:100%;height:auto;overflow:hidden;padding-bottom:5px;}#goodsInfo .catt a {border: #c8c9cd 1px solid;text-align: center;background-color: #fff;margin-right:5px;margin-top:6px;padding-left: 10px;padding-right: 10px;display: block;white-space: nowrap;color: #666;text-decoration: none;float:left;}#goodsInfo .catt a:hover {border:#ff6701 2px solid;margin: -1px;margin-right:4px;margin-top:5px;}#goodsInfo .catt a:focus {outline-style:none;}#goodsInfo .catt .cattsel {border:#ff6701 2px solid;margin: -1px;background: url(images/test.gif) no-repeat bottom right;margin-right:4px;margin-top:5px;}#goodsInfo .catt .cattsel a:hover {border: #ff6701 2px solid;margin:-1px;background: url(images/test.gif) no-repeat bottom right;}/**/好了,更新完毕!然后再说说属性的添加方法:1、在后台商品管理下的商品类型里面,先添加您的一个商品类型,比如包包,然后给这个类型添加可能出现的所有属性,比如,颜色和尺寸(需要客户购买时候选择的属性,添加的时候要选择单选属性,然后值选择从列表里面选择),然后把所以可能用到的颜色和尺寸添加到列表里面。
ECSHOP商品详情页添加调用同类随机商品通过以下教程可以实现,在ECSHOP商品详情页中调用显示同类的随机商品1,根目录下找到goods.php文件查找代码:$smarty->assign('properties', $properties['pro']);// 商品属性在上面一行添加以下代码:$smarty->assign('category_related_random_goods', cat egory_related_random_goods($goods['cat_id'])); // 同分类随机商品接着还在goods.php文件的最低部也就是 ?>前添加以下代码:/*同分类下随机推荐商品*/function category_related_random_goods($category_id){$where = "g.is_on_sale = 1 AND g.is_alone_sale = 1 AND "."g.is_delete = 0 AND g.cat_id=$category_id ";$sql = 'SELECT g.goods_id, g.goods_name, g.goods_name_s tyle, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price A S org_price, ' ."IFNULL(er_price, g.shop_price * '$_SESSION[discount] ') AS shop_price, g.promote_price, g.goods_type, " .'g.promote_start_date, g.promote_end_date, g.goods_brief, g.goods_thumb , g.goods_img ' .'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .'LEFT JOIN ' . $GLOBALS['ecs']->table('member_price') . ' AS mp ' ."ON mp.goods_id = g.goods_id AND er_rank = '$_SES SION[user_rank]' " ."WHERE $where ORDER BY rand() limit 12";$res = $GLOBALS['db']->query($sql);$arr = array();while ($row = $GLOBALS['db']->fetchRow($res)){$arr[$row['goods_id']]['goods_id'] = $row['goods_id'];$arr[$row['goods_id']]['goods_name'] = $row['goods_nam e'];$arr[$row['goods_id']]['short_name'] = $GLOBALS['_CFG'][' goods_name_length'] > 0 ?sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_nam e_length']) : $row['goods_name'];$arr[$row['goods_id']]['goods_thumb'] = get_image_path($ row['goods_id'], $row['goods_thumb'], true);$arr[$row['goods_id']]['goods_img'] = get_image_path($ro w['goods_id'], $row['goods_img']);$arr[$row['goods_id']]['market_price'] = price_format($row[' market_price']);$arr[$row['goods_id']]['shop_price'] = price_format($row['s hop_price']);$arr[$row['goods_id']]['url'] = build_uri('goods', array(' gid'=>$row['goods_id']), $row['goods_name']);if ($row['promote_price'] > 0){$arr[$row['goods_id']]['promote_price'] = bargain_price($ro w['promote_price'], $row['promote_start_date'], $row['promote_ end_date']);$arr[$row['goods_id']]['formated_promote_price'] = price_fo rmat($arr[$row['goods_id']]['promote_price']);}else{$arr[$row['goods_id']]['promote_price'] = 0;}}return $arr;}2、新建模板文件category_related_random_goods.lbi ,代码如下<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><!-- {if $category_related_random_goods} --><div class="box"><h3>Related Products</h3><div><ul><!--{foreach from=$category_related_random_goods item=categor y_related_random_goods_data}--><li class="li1" style="float:left; margin-bottom:20px;"><a href="{$category_related_random_goods_da ta.url}"><img src="{$category_related_random_goods_data.goo ds_thumb}" alt="{$category_related_random_goods_data.goods _name}"/></a></li><li class="li2" style="float:left; margin-bottom:20px;"><a href="{$category_related_random_goods_da ta.url}" title="{$category_related_random_goods_data.goods_na me}">{$category_related_random_goods_data.short_name}</a ><br /><!-- {if $category_related_random_goods_data.promote_price neq 0} -->{$lang.promote_price}<font class="f1">{$category_related_ random_goods_data.formated_promote_price}</font> <!-- {else} -->{$lang.shop_price}<font class="f1">{$category_related_ran dom_goods_data.shop_price}</font><!-- {/if} --></li><!--{/foreach}--></ul></div></div><div class="blank5"></div><!-- {/if} -->样式可以自己定义把category_related_random_goods.lbi文件复制到/themes/你使用的模板/library/ 文件夹里3,找到 /themes/你使用的模板/goods.dwt 文件在适当的位置加上<!-- #BeginLibraryItem "/library/category_related_random_goods.lbi" --><!-- #EndLibraryItem -->一般加在<!-- #BeginLibraryItem "/library/goods_tags.lbi" --><!-- #EndLibraryItem -->下面或者上面,和其他模块是同理的PS: googs.php 里ORDER BY rand() limit 12 这个代码 12 就是显示个数的文章转载:。
ecshop标签模板教程(一)看到ecshop有许多网友强烈渴望得到标签,现在从今天开始,不定期整理ECSHOP的标签,由于水平有限,不当之处,请高手指点。
现在,开始我们的第一课:先从index.php主页开始页面关键字 {$keywords }页面标题 {$page_title}产品分类父分类列表 {foreach from=$categories item=cat }父分类超链接<a href=”{$cat.url}”>{$|escape:html}</a>相对应子分类 {foreach from=$cat.children item=child}子分类超链接<a href=”{$child.url}”>{$|escape:html}</a>促销产品 {if $promotion_info} 检验是否存在促销产品,不存在就不显示相关信息促销产品列表 {foreach from=$promotion_info item=item key=key}里面还有很多标签,没弄明白,以后在添加,修改订单查询 {if empty($order_query)} 同上看下就知道了订单用户ID {if $order_er_id}订单数量 {$lang.order_number}里面还有很多标签,没弄明白,以后在添加,修改发货查询 {if $invoice_list} 当有完成的订单测显示发货列表 {foreach from=$invoice_list item=invoice}订单号名称 {$lang.order_number}订单号 {$invoice.order_sn}发货单名称 {$lang.consignment}发货单号 {$invoice.invoice_no}销售排行 {if $top_goods} 看看就知道销售列表{foreach name=top_goods from=$top_goods item=goods}产品短名称 {$goods.short_name}看例子:<!–{foreach name=top_goods from=$top_goods item=goods}–><li class=”top10-li-{$smarty.foreach.top_goods.iteration}”> <a href=”{$goods.url}” title=”{$|escape:html}”>{$goods.short_name}</a ></li><!–{/foreach}–>精品推荐 {if $best_goods} 看看就知道精品推荐列表 {foreach from=$best_goods item=goods}市场价名称 {$lang.market_price}市场价价格 {$goods.market_price}促销价名称 {$lang.promote_price}促销价价格 {$goods.promote_price}商店价名称 {$lang.shop_price}商店价价格 {$goods.shop_price}大家看到了吗??{$lang.xxxx_xxxx}以lang开头的为相对应的名称{$goods.xxxx_xxxx}以goods开头的为价格写的好累啊,今天先介绍到这,明天将介绍热卖商品 {if $hot_goods}新货上市 {if $new_goods}团购商品 {if $group_buy_goods}拍卖商品 {if $auction_list}促销商品 {if $promotion_goods}最新公告 {$shop_notice}最新文章 {foreach name=new_articles from=$new_articles item=article}品牌专区 {if $brand_list}大家看看是否可以理解,如果可以理解将跳过此处。
ecshop增加多个产品详细描述编辑器的方法在做商产品详情的时候,经常会有选项卡类似的几个产品说明,如:商品详情,商品规格,参数列表,售后服务等。
Ecshop后台里面默认只有一个编辑框(器),那么我们还得自己添加几个,以下是ecshop 如何增加产品描述编辑器个数的步骤:1)在数据库的表esc_goods里增加二个text的字段用来存储新增的二个编辑框的内容,如:goods_desc2,goods_desc3(可以用phpmyadmin)2)修改生成编辑器的函数找到/admin/includes/lib_main.php 文件将function create_html_editor($input_name, $input_value = '')修改为function create_html_editor($input_name, $input_value = '',$fckid=0)继续向下找到$smarty-assign('FCKeditor', $FCKeditor);将它修改为if ($fckid){$smarty-assign('FCKeditor'.$fckid, $FCKeditor);}else{$smarty-assign('FCKeditor', $FCKeditor);}3)接下来要修改后台商品处理页/admin/goods.php 文件找到create_html_editor('goods_desc', $goods['goods_desc']);在它下面另添加2行create_html_editor('goods_desc2', $goods['goods_desc2'],2);create_html_editor('goods_desc3', $goods['goods_desc3'],3);4)最后修改一下对应的后台显示文件/admin/templates/goods_info.htm找到下面这些代码table width="90%" id="detail-table" style="display:none"trtd{$FCKeditor}/td/tr/table在下面复制粘贴2个并把(包括原来一个)这三个表格代码修改为table width="90%" id="detail-table" style="display:none"trtd width="80" align="right"商品详情:/tdtd{$FCKeditor}/td/tr/tabletable width="90%" id="desc2-table" style="display:none"trtd width="80" align="right"售后服务:/tdtd{$FCKeditor2}/td/tr/tabletable width="90%" id="desc3-table" style="display:none"trtd width="80" align="right"买家必读:/tdtd{$FCKeditor3}/td/tr/table修改顶部的导航:找到span class="tab-back" id="detail-tab"{$lang.tab_detail}/span后面加入span class="tab-back" id="desc2-tab"desc2/spanspan class="tab-back" id="desc3-tab"desc3/span5)最后修改内容存储进数据库的文件,打开/admin/goods.php1 找到如下代码:$sql = "INSERT INTO " . $ecs-table('goods') . " (goods_name,goods_model, goods_name_style, goods_sn, " ."cat_id, brand_id, shop_price, market_price, is_promote, promote_price, " ."promote_start_date, promote_end_date, goods_img, goods_thumb, original_img, keywords, goods_brief, " ."seller_note, goods_weight, goods_number, warn_number, integral, give_integral, is_best, is_new, is_hot, " ."is_home, is_on_sale, is_alone_sale, is_shipping, goods_desc在后面加上,goods_desc2 ,goods_desc3 即如下代码$sql = "INSERT INTO " . $ecs-table('goods') . " (goods_name,goods_model, goods_name_style, goods_sn, " ."cat_id, brand_id, shop_price, market_price, is_promote, promote_price, " ."promote_start_date, promote_end_date, goods_img, goods_thumb, original_img, keywords, goods_brief, " ."seller_note, goods_weight, goods_number, warn_number, integral, give_integral, is_best, is_new, is_hot, " ."is_home, is_on_sale, is_alone_sale, is_shipping, goods_desc,goods_desc2 ,goods_desc3在下面几行,同理找到"VALUES ('$_POST[goods_name]','$_POST[goods_model]', '$goods_name_style', '$goods_sn', '$catgory_id', " ."'$brand_id', '$shop_price', '$market_price', '$is_promote','$promote_price', "."'$promote_start_date', '$promote_end_date', '$goods_img', '$goods_thumb', '$original_img', ". "'$_POST[keywords]', '$_POST[goods_brief]', '$_POST[seller_note]', '$goods_weight', '$goods_number',"." '$warn_number', '$_POST[integral]', '$give_integral', '$is_best', '$is_new', '$is_hot', '$is_home', '$is_on_sale', '$is_alone_sale', $is_shipping, "." '$_POST[goods_desc]', '" . gmtime() . "', '". gmtime() ."', '$goods_type', '$rank_integral', '$suppliers_id')"改为:"VALUES ('$_POST[goods_name]','$_POST[goods_model]', '$goods_name_style', '$goods_sn', '$catgory_id', " ."'$brand_id', '$shop_price', '$market_price', '$is_promote','$promote_price', "."'$promote_start_date', '$promote_end_date', '$goods_img', '$goods_thumb', '$original_img', ". "'$_POST[keywords]', '$_POST[goods_brief]', '$_POST[seller_note]', '$goods_weight', '$goods_number',"." '$warn_number', '$_POST[integral]', '$give_integral', '$is_best', '$is_new', '$is_hot', '$is_home', '$is_on_sale', '$is_alone_sale', $is_shipping, "." '$_POST[goods_desc]', '$_POST[goods_desc2]', '$_POST[goods_desc3]', '" . gmtime() . "', '". gmtime() ."', '$goods_type', '$rank_integral', '$suppliers_id')"同理,又下面几行else{$sql =$sql = "INSERT INTO. $ecs-table('goods')这一段中,作上面相同修改如下:$sql = "INSERT INTO " . $ecs-table('goods') . " (goods_name,goods_model, goods_name_style, goods_sn, " ."cat_id, brand_id, shop_price, market_price, is_promote, promote_price, " ."promote_start_date, promote_end_date, goods_img, goods_thumb, original_img, keywords, goods_brief, " ."seller_note, goods_weight, goods_number, warn_number, integral, give_integral, is_best, is_new, is_hot, is_home, is_real, " ."is_on_sale, is_alone_sale, is_shipping, goods_desc, goods_desc2, goods_desc3, add_time, last_update, goods_type, extension_code, rank_integral)" ."VALUES ('$_POST[goods_name]','$_POST[goods_model]', '$goods_name_style', '$goods_sn', '$catgory_id', " ."'$brand_id', '$shop_price', '$market_price', '$is_promote','$promote_price', "."'$promote_start_date', '$promote_end_date', '$goods_img', '$goods_thumb', '$original_img', ". "'$_POST[keywords]', '$_POST[goods_brief]', '$_POST[seller_note]', '$goods_weight', '$goods_number',"." '$warn_number', '$_POST[integral]', '$give_integral', '$is_best', '$is_new', '$is_hot', '$is_home', 0, '$is_on_sale', '$is_alone_sale', $is_shipping, "." '$_POST[goods_desc]', '$_POST[goods_desc2]', '$_POST[goods_desc3]', '" . gmtime() . "', '". gmtime() ."', '$goods_type', '$code', '$rank_integral')";2 再往下几十行,找到"goods_desc = '$_POST[goods_desc]', " .在其下方再添加二行,改成如下"goods_desc = '$_POST[goods_desc]', " ."goods_desc2 = '$_POST[goods_desc2]', " ."goods_desc3 = '$_POST[goods_desc3]', " .。
Ecshop仿佛淘宝“已选择”功能效果:缺点,购买在购物车里面显示不出来选择的商品相关属性。
大家一起研究完美下。
实现功能代码:function changeAtt(t,goods_id) {stChild.checked='checked';for (var i = 0; i<t.parentNode.childNodes.length;i++) {if (t.parentNode.childNodes[i].className == 'cattsel') {t.parentNode.childNodes[i].className = '';}}t.className = "cattsel";var formBuy = document.forms['ECS_FORMBUY'];spec_arr = getSelectedAttributes(formBuy);document.getElementById('GOODS_select').innerHTML =spec_arr;Ajax.call('goods.php?act=get_products_info', 'id=' + spec_arr+ '&goods_id=' + goods_id, shows_number, 'GET', 'JSON');changePrice();}function shows_number(result){if(result.product_number !=undefined){document.getElementById('shows_number').innerHTML = result.product_number+'{$goods.measure_unit}'+'货号'+result.product_sn;}else{document.getElementById('shows_number').innerHTML = '未设置'}}第二个地方<div class="catt"><!-- {foreach from=$spec.values item=value key=key} --><a onclick="changeAtt(this,{$goods.goods_id})" href="javascript:;" name="{$value.id}" title="[{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}]">{$bel}<input style="display:none" id="spec_value_{$value.id}" type="radio" name="spec_{$spec_key}" value="{$bel}" /></a><!-- {/foreach} --></div><input type="hidden" name="spec_list" value="{$key}" />第三地方添加如下代码:<li><strong><font style="color:#990000; font-weight:bold">請選擇:</font></strong><font id="GOODS_select" style="color: #333333;font-weight: normal; font-size:14px; font-weight:bold;"></font></li>完成。
ecshop 商品属性选择使用多选框的形式============ 1,修改 /admin/includes/lib_goods.php =========中的function build_attr_html($cat_id, $goods_id = 0){}函数改为如下/*** 根据属性数组创建属性的表单** @access public* @param int $cat_id 分类编号* @param int $goods_id 商品编号* @return string*/function build_attr_html($cat_id, $goods_id = 0){$attr = get_attr_list($cat_id, $goods_id);$tmpAttr = array();$tmpindex = array();foreach ($attr AS $tmpk => $tmpv){if ($tmpv['attr_type'] == 1 || $tmpv['attr_type'] == 2){if( !in_array('a'.$tmpv['attr_id'], $tmpindex) ){$tmpindex[] = 'a'.$tmpv['attr_id'];$attr_values = explode("\n", $tmpv['attr_values']);$tmpAttr['a'.$tmpv['attr_id']]['attr_type'] = $tmpv['attr_type'] ;$tmpAttr['a'.$tmpv['attr_id']]['attr_name'] = $tmpv['attr_name'] ;$tmpAttr['a'.$tmpv['attr_id']]['attr_input_type'] = $tmpv['attr_input_type'] ; $tmpAttr['a'.$tmpv['attr_id']]['attr_id'] = $tmpv['attr_id'] ;foreach ($attr_values AS $lk){$lk = trim(htmlspecialchars($lk));$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$lk]=array('select_name'=>$lk,'is_checked '=>0);}}$vk = trim(htmlspecialchars($tmpv['attr_value']));$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_id']=$tmpv['attr_id'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_name']=$tmpv['attr_name'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_input_type']=$tmpv['attr_input _type'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_values']=$tmpv['attr_values'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_value']=$tmpv['attr_value'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['attr_price']=$tmpv['attr_price'];$tmpAttr['a'.$tmpv['attr_id']]['selectlist'][$vk]['is_checked']=1;}else{$tmpAttr[] = $tmpv;}}$html = '<table width="100%" id="attrTable">';$spec = 0;$tix = 0;foreach ($tmpAttr AS $key => $val){$html .= "<tr><td class='label'>";if ($val['attr_type'] == 1 || $val['attr_type'] == 2){$html .="$val[attr_name]</td><td style=\"border:1px solid #cdcdcd;\">";}else{$html .= "$val[attr_name]</td><td><input type='hidden' name='attr_id_list[]' value='$val[attr_id]' />";}if ($val['attr_input_type'] == 0){$html .= '<input name="attr_value_list[]" type="text" value="' .htmlspecialchars($val['attr_value']). '" size="40″ /> ';}elseif ($val['attr_input_type'] == 2){$html .= '<textarea name="attr_value_list[]" rows="3″cols="40″>' .htmlspecialchars($val['attr_value']). '</textarea>';}elseif( $val['attr_type'] != 1 && $val['attr_type'] != 2 ){$html .= '<select name="attr_value_list[]">';$html .= '<option value="">' .$GLOBALS['_LANG']['select_please']. '</option>';$attr_values = explode("\n", $val['attr_values']);foreach ($attr_values AS $opt){$opt = trim(htmlspecialchars($opt));$html .= ($val['attr_value'] != $opt) ?'<option value="' . $opt . '">' . $opt . '</option>' :'<option value="' . $opt . '" selected="selected">' . $opt .'</option>';}$html .= '</select> ';}else{$html .= '<div>';foreach ($val['selectlist'] AS $selkey => $selvalue){$tix++;$html .="<div style=\"float:left; width:190px;\"><table><tr><td><input type='checkbox' id='checkset_$tix'". ($selvalue['is_checked'] ? "checked" : "" ) ." onclick=\"setattrdisable(this,'$tix','selectvalue_','selectprice_','selectattr_')\">". $selvalue['select_name']." ";$html .="<input id='selectvalue_".$tix."' type='hidden' name='attr_value_list[]' value=\"".$selvalue['select_name']."\" ". ($selvalue['is_checked'] ? "" : 'disabled' ) ." > </td>";$html .="<td>".$GLOBALS['_LANG']['spec_price'].' <input type="text" name="attr_price_list[]" value="' . $selvalue['attr_price'] . '" size="5″ maxlength="10″'. ($selvalue['is_checked'] ? "" : 'disabled' ) .' id="selectprice_'.$tix.'" />'."<input type='hidden' id='selectattr_".$tix."' name='attr_id_list[]' value='$val[attr_id]' ". ($selvalue['is_checked'] ? "" : 'disabled' ) ." /> </td></tr></table></div>";}$html .= '</div>';}$html .= ($val['attr_type'] == 1 || $val['attr_type'] == 2) ? " ":' <input type="hidden" name="attr_price_list[]" value="0″ />';$html .= '</td></tr>';}$html .= '</table>';return $html;}======== 2,修改 admin/templates/goods_info.htm 加一个js函数上去 ============function setattrdisable(obj,ix,sv,sp,sa){document.getElementById(sv+ix).disabled = obj.checked ? false : true;document.getElementById(sp+ix).disabled = obj.checked ? false : true;document.getElementById(sa+ix).disabled = obj.checked ? false : true;}。
如何修改ECSHOP模板及了解相关标签要想彻底了解ecshop,我们就要懂得ecshop标签的功能,了解了这些我们使用起来ecshop也就如鱼得水了。
页面关键字:{$keywords}页面标题:{$page_title}产品分类:父分类列表 {foreach from=$categories item=cat }父分类超链接[url==”{$cat.url}”>{$|escape:html}</a>相对应子分类 {foreach from=$cat.children item=child}子分类超链接[url==”{$child.url}”>{$|escape:html}</a>促销产品:{if $promotion_info} 检验是否存在促销产品,不存在就不显示相关信息促销产品列表:{foreach from=$promotion_info item=item key=key} 订单查询:{if empty($order_query)}订单用户ID {if $order_er_id}订单数量:{$lang.order_number}订单编号:{$order_query.order_sn}发货查询:{if $invoice_list}发货列表:{foreach from=$invoice_list item=invoice}订单号名称:{$lang.order_number}订单号:{$invoice.order_sn}发货单名称:{$lang.consignment}发货单号:{$invoice.invoice_no}销售排行:{if $top_goods}销售列表:{foreach name=top_goods from=$top_goods item=goods}产品短名称:{$goods.short_name}下面来看一个例子:<!– {foreach name=top_goods from=$top_goods item=goods}–><li class=”top10-li-{$smarty.foreach.top_goods.iteration}”>[url==”{$goods.url}”title=”{$|escape:html}”>{$goods.short_name}</a></li><!–{/foreach}–>精品推荐:{if $best_goods}精品推荐列表:{foreach from=$best_goods item=goods}市场价名称:{$lang.market_price}市场价价格:{$goods.market_price}促销价名称:{$lang.promote_price}促销价价格:{$goods.promote_price}商店价名称:{$lang.shop_price}商店价价格:{$goods.shop_price}{$lang.xxxx_xxxx}以lang开头的为相对应的名称{$goods.xxxx_xxxx}以goods开头的为价格{$page_title} 网站标题{$keywords} 网站关键字标签{$description} 网站描述标签{$shop_notice} 商店公告$new_articles 新文章{$article.short_title} 调用文章标题{foreach from=$new_articles item=article} 循环的开始{/foreach} 循环的结束from=$best_goods 表示循环的内容来自$best_goods$best_goods 精品商品推荐的标签{$goods.short_style_name} 表示goods 这个对象的商品名称$new_goods 新品上市$hot_goods 热卖商品$categories 分类的标签$goods_list 商品标签商品图片: <img src= {$goods.goods_img} />商品名称:{$goods.goods_style_name}商品货号:{$goods.goods_sn}<br>商品品牌: {$goods.goods_brand}商品数量:{$goods.goods_number}单位:{$goods.measure_unit}添加时间:{$goods.add_time}市场价格:{$goods.market_price}本店价格:{$goods.shop_price_formated}注册用户价格:{$rank_price.price}注册用户价格:{$rank_price.price}注册用户价格:{$rank_price.price}ECSHOP模板安装,模板设置―模板选择1、首先下载你需要的风格模板,解压后,将风格模板上传到网店的根目录下的themes文件夹呢,如图 1 所示:2、将图1 中joyo风格目录通过ftp上传到网店的根目录下的themes文件夹, 如图 2 所示.3、然后,来到网店后台,找到模板选择,如图 3 所示:4、进入之后可以看到我们刚才上传的joyo风格,点击缩略图进行选择,然后点击确定,如图 4 所示:5、确定后就会提示你选择成功,如图 5 所示:6、现在新风格已经启用了,如果想备份当前模板,可以点击备份当前模板,程序将会自动打包然后弹出下载框供下载备份,如图 6 所示:设置模板设置模板主要用来设置 ECShop 页面各个模块的显示位置,管理员可以在后台根据自己的要求调整模板模块的显示位置。
商品的多属性筛选
类似京东、淘宝的商品的属性筛选功能。
问题1: 如何显⽰属性名及属性值?
创建 Map,属性=key,属性值=value
然后将map放⼊List中,最后遍历List
问题2: 如何保存点击过的商品属性及其制?
将点击过的属性值放⼊session中,当再次点击为同⼀属性时进⾏遍历替换,为其他属性时向session中添加。
问题3: 如何保持点击多的属性显红?
创建⼀个属性类Property
public class Property{
private String propertyName; //属性名
private String propertyValue; //属性值
private String properyClass; //属性的css样式
setter/getter⽅法
}
当点某⼀属性时,给该属性增加的propertyClass设置显红的样式,让后返回到前台。
涉及的SQL拼接请⾃⾏解决。
ECSHOP功能实现方案源码用途阐述:创建一个淘宝代购平台向俄罗斯人提供淘宝浏览和代购服务主要功能实现:邮件注册邮件登陆,汇率查询和换算功能,一键填单(快捷购物)插件,google翻译浏览。
支付方式。
城市设定,费用计算公式。
google翻译浏览:用户输入俄语关键词搜索,出现相应的搜索结果并同时体现俄文,案例如下:中文:裤子俄语:брюки出现如下结果:/search-poisk-na-russkom?word=%D0%B1%D1%80%D1%8E%D0%BA %D0%B8点击商品链接:全部是通过谷歌自动翻译的。
邮件注册邮件登陆:用户只能注册邮件格式的用户名,并以邮件为用户名登陆网站(网上有类似的插件)。
/goods.php?id=46汇率查询和换算功能:这个功能需要在后台修改卢布和人民币的汇率,前台显示当天的汇率并提供一个类似换算计算器功能,用户填写人民币自动转换成卢布。
演示:支付方式:支付方式只能选择预存款支付。
一键填单(快捷购物)(方案一):用户自行填写要购买商品的链接、数量、颜色、规格、型号、备注信息。
递交给后台一键填单(方案二)通过一键填单插件,用户输入谷歌翻译过的商品链接,由插件自动采集到商品图片信息,价格信息,名称信息。
/translate_c?act=url&hl=en&ie=UTF8&prev=_t&rurl=tran &sl=zh-CN&tl=ru&u=/item.htm%3Fid%3D14217694831% 26ad_id%3D%26am_id%3D%26cm_id%3D%26pm_id%3D%26tbpm%3D2&usg=ALkJrhiAPjzMbGQ o9Rv6ylvZ_LrxN3fGkQ一键填单(方案三)如果能保证用户无论用哪款浏览器浏览到的结果都是这种形式能够体现出真是的淘宝连接地址:则可以使用现有的一键填单插件,演示如下:来实现下单功能。
Ecshop商城商品属性筛选插件制作方法分享这两天用ecshop制作一个商城站时想把里面的商品属性值做成很多大商城常见的可选择分类那种,搜了不少没有提供这方面教程的,找到的也不能使用。
有的都是作为插件卖的,竟然没人分享出来,自己研究了下搞定了,免费分享给每位遇到同样问题的朋友,希望能帮助到你。
修改步骤:1、将下面这个图片上传到themes/您当前模板/images文件夹里面,这里我命名为test.gif。
如果你自己改为其他文件名,那么在下面的修改中就要保持一致。
2、找到themes/您当前模板/goods.dwt文件,做如下修改:找到下面这段代码:<!-- {* 开始循环所有可选属性*} --><!-- {foreach from=$specification item=spec key=spec_key} --><li class="padd loop"><strong>{$}:</strong><br /><!-- {* 判断属性是复选还是单选*} --><!-- {if $spec.attr_type eq 1} --><!-- {if $cfg.goodsattr_style eq 1} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="radio" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" {if $key eq 0}checked{/if} onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {else} --><select name="spec_{$spec_key}" onchange="changePrice()"><!-- {foreach from=$spec.values item=value key=key} --><option label="{$bel}" value="{$value.id}">{$bel} {if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if}{if $value.price neq 0}{$value.format_price}{/if}</option><!-- {/foreach} --></select><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --><!-- {else} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="checkbox" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --></li><!-- {/foreach} --><!-- {* 结束循环可选属性*} -->将上面这段代码替换为以下代码:<!-- {* 开始循环所有可选属性*} --><li style="border:1px solid #FBD2D2; float:left; width:315px; margin-left:5px; background:#FCF0F0; padding:10px;"><!-- {foreach from=$specification item=spec key=spec_key} -->{$}:<div class="catt"><!-- {* 判断属性是复选还是单选*} --><!-- {if $spec.attr_type eq 1} --><!-- {if $cfg.goodsattr_style eq 1} --><!-- {foreach from=$spec.values item=value key=key} --><a {if $key eq 0}class="cattsel"{/if} onclick="changeAtt(this)" href="javascript:;" name="{$value.id}" title="{$bel}">{$bel}<input style="display:none" id="spec_value_{$value.id}" type="radio" name="spec_{$spec_key}" value="{$value.id}" {if $key eq 0}checked{/if} /></a><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {else} --><select name="spec_{$spec_key}"><!-- {foreach from=$spec.values item=value key=key} --><option label="{$bel}" value="{$value.id}">{$bel} {if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if}{if $value.price neq 0}{$value.format_price}{/if}</option><!-- {/foreach} --></select><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --><!-- {else} --><!-- {foreach from=$spec.values item=value key=key} --><label for="spec_value_{$value.id}"><input type="checkbox" name="spec_{$spec_key}" value="{$value.id}" id="spec_value_{$value.id}" onclick="changePrice()" />{$bel} [{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}] </label><br /><!-- {/foreach} --><input type="hidden" name="spec_list" value="{$key}" /><!-- {/if} --></div><!-- {/foreach} --></li><!-- {* 结束循环可选属性*} -->再找到下面这段代码:/*** 接收返回的信息*/function changePriceResponse(res){if (res.err_msg.length > 0){alert(res.err_msg);}else{document.forms['ECS_FORMBUY'].elements['number'].value = res.qty;if (document.getElementById('ECS_GOODS_AMOUNT'))document.getElementById('ECS_GOODS_AMOUNT').innerHTML = res.result;}}在上面这段代码下增加以下代码:/*** 颜色选择器*/function changeAtt(t) {stChild.checked='checked';for (var i = 0; i<t.parentNode.childNodes.length;i++) {if (t.parentNode.childNodes[i].className == 'cattsel') {t.parentNode.childNodes[i].className = '';}}t.className = "cattsel";changePrice();}3、打开themes/您当前模板/style.css,将下面的代码增加到最后(如果您的模板调用的css文件不是style.css,那么将下面的代码加到您调用的那个css文件里面去):/*--------------颜色选择器CSS添加-------------*/#goodsInfo .catt {width:100%;height:auto;overflow:hidden;padding-bottom:5px;}#goodsInfo .catt a {border: #c8c9cd 1px solid;text-align: center;background-color: #fff;margin-right:5px;margin-top:6px;padding-left: 10px;padding-right: 10px;display: block;white-space: nowrap;color: #666;text-decoration: none;float:left;}#goodsInfo .catt a:hover {border:#ff6701 2px solid;margin: -1px;margin-right:4px;margin-top:5px;}#goodsInfo .catt a:focus {outline-style:none;}#goodsInfo .catt .cattsel {border:#ff6701 2px solid;margin: -1px;background: url(images/test.gif) no-repeat bottom right;margin-right:4px;margin-top:5px;}#goodsInfo .catt .cattsel a:hover {border: #ff6701 2px solid;margin:-1px;background: url(images/test.gif) no-repeat bottom right;}/**/好了,更新完毕!然后再说说属性的添加方法:1、在后台商品管理下的商品类型里面,先添加您的一个商品类型,比如包包,然后给这个类型添加可能出现的所有属性,比如,颜色和尺寸(需要客户购买时候选择的属性,添加的时候要选择单选属性,然后值选择从列表里面选择),然后把所以可能用到的颜色和尺寸添加到列表里面。