ecshop过滤
⑴ ecshop的楼层筛选如何更改删除
分类: ecshop
其实分类页面里面本来就有相关的品牌、属性、分类的筛选功能在category.php和模板加上相应的功能即可
1、读出当前分类的所有下级分类
$chlidren_category = $GLOBALS['db']->getALl('SELECT cat_id,cat_name FROM ' . $GLOBALS['ecs']->table('category') ." WHERE parent_id = '$cat_id' and is_show=1");
$category_id_all = array('all'=>array('cat_id' => $cat_id,
'cat_name' => 'all category',
'show' =>1
)
);
foreach($chlidren_category as $key=>$value)
{
if($value['cat_id']==$cat_id)
{
$chlidren_category[$key]['show']=1;$category_id_all['show']=0;continue;
}
else $chlidren_category[$key]['show']=0;
}
$category_list = array_merge($category_id_all, $chlidren_category);
$smarty->assign('category_list_all', $category_list);
2、修改goods_list.lbi文件, <form method="GET" name="listform">下面加入循环出分类的模板代码
<!--{foreach from=$category_list_all item=cat_list}-->
<a href="javascript:;" onClick="javascript:category_change({$cat_list.cat_id})">{$cat_list.cat_name}</a
<!--{/foreach}-->
<input type="hidden" name="category" value="{$category}" />改为
<input type="hidden" id="category_id" name="category" value="{$category}" />
3、common.js中加入js脚本
function category_change(cat_id)
{
document.getElementByIdx_x('category_id').value = cat_id;
setTimeout(doSubmit, 0);
function doSubmit() {document.forms['listform'].submit();}
}
⑵ 怎么去掉ecshop模板文件过滤php标签
最好不要在模板里面写php。会导致sql注入,引起后台账号泄露。
ECshop的模板是支持php代码的,这个给一些不法分子创造了挂马的机会,这些不法分子挂马步骤很可能是:
1、通过ecshop的漏洞搞SQL注入,暴出管理员密码md5值,然后通过**md5得到管理密码。(注:防止暴出管理密码md5值的方法是关闭display_errors,并且修改cls_mysql.php里的ErrorMsg函数,注释掉所有错误输出代码或把错误写入文件)
2、进入管理后台,通过模板管理->库项目管理,编辑lbi文件,添加php代码,例如<?php @eval($_POST['lx']);?>
3、到这里,就完全控制这个站了,想挂什么马就挂什么马。
可见,ECshop的模板支持php代码这点是非常危险的,因此我们应该过滤模板里的所有php代码。
如果实在要去掉ecshop模板文件过滤php标签
修改 includes/cls_template.php
可以遵循以下步骤:
去掉第288-299行以下代码:
if(preg_match_all('~(<\?(?:\w+|=)?|\?>|language\s*=\s*[\"\']?php[\"\']?)~is', $source, $sp_match))
{
$sp_match[1] = array_unique($sp_match[1]);
for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
{
$source = str_replace($sp_match[1][$curr_sp],'%%%SMARTYSP'.$curr_sp.'%%%',$source);
}
for ($curr_sp = 0, $for_max2 = count($sp_match[1]); $curr_sp < $for_max2; $curr_sp++)
{
$source= str_replace('%%%SMARTYSP'.$curr_sp.'%%%', '<?php echo \''.str_replace("'", "\'", $sp_match[1][$curr_sp]).'\'; ?>'."\n", $source);
}
}
这样,模板里的php代码就被保留了。
⑶ Ecshop首页怎么调用内页筛选属性
这段代码中调用的是商品的唯一属性,在添加商品的唯一属性后
⑷ ecshop 怎么在商品列表页 调用商品分类的筛选条件
<!-- 筛选条件Begin -->
<!--{if $brands.1 || $price_grade.1 || $filter_attr_list}-->
<div class="list-w list-screeningBox" id="filter">
<h4>
<div class="list-siteMap"> {$lang.goods_filter} </div>
</h4>
<!--{if $brands.1}--><!--品牌筛选-->
<dl class="clearfix filters-classifi">
<dt>{$lang.brand}</dt>
<dd>
<!--{foreach from=$brands item=brand}-->
<!-- {if $brand.selected} -->
<a href="javascript:void(0);" style="color:#448CA5">{$brand.brand_name}</a>
<!-- {else} -->
<a href="{$brand.url}">{$brand.brand_name}</a>
<!-- {/if} -->
<!--{/foreach}-->
</dd>
</dl>
<!--{/if}-->
<!--{if $price_grade.1}--><!--价格筛选-->
<dl class="more">
<dt>{$lang.price}</dt>
<dd class="">
<!--{foreach from=$price_grade item=grade}-->
<!-- {if $grade.selected} -->
<a href="javascript:void(0);" style="color:#448CA5">{$grade.price_range}</a>
<!-- {else} -->
<a href="{$grade.url}">{$grade.price_range}</a>
<!-- {/if} -->
<!--{/foreach}-->
</dd>
</dl>
<!--{/if}-->
<!--{foreach from=$filter_attr_list item=filter_attr}--> <!--属性筛选-->
<dl class="more">
<dt>{$filter_attr.filter_attr_name|escape:html}</dt>
<dd class="">
<!--{foreach from=$filter_attr.attr_list item=attr}-->
<!-- {if $attr.selected} -->
<a href="javascript:void(0);" style="color:#448CA5">{$attr.attr_value}</a>
<!-- {else} -->
<a href="{$attr.url}">{$attr.attr_value}</a>
<!-- {/if} -->
<!--{/foreach}-->
</dd>
</dl>
<!--{/foreach}-->
</div>
<script type="text/javascript">divheight("filter");</script>
<!-- {/if} -->
<div class="blank20"></div>
<!-- 筛选条件END -->
仅供参考,样式自己设定哦
⑸ ecshop商品列表页筛选价格删除“全部”字样
我这里由品牌筛选为例,只要在循环中在li标签中加上 style=" {if $smarty.foreach.name.first}display:none;{/if} "即可。
理由是在筛选循环中全部搜索做为循环的第一个显示,我们只要把第一个隐藏了即可。具体代码如下所示:
<!--{if $brands.1}-->
<div class="brandAttr">
<div class="j_Brand attr">
<div class="attrKey">品牌</div>
<div class="attrValues showLogo">
<ul class="av-collapse" id='p1'>
<!--{foreach from=$brands item=brand name=name}-->
<li style=" {if $smarty.foreach.name.first}display:none;{/if} ">
<a href="{$brand.url}" title="{$brand.brand_name}" {if $brand.selected}style=" border:1px solid #B10000;" {/if}>
<img src="data/brandlogo/{$brand.brand_logo}">
<span> {$brand.brand_name|escape:html}</span>
</a>
</li>
<!--{/foreach}-->
</ul>
<div class="av-options">
<a style="visibility: visible; display: inline;" class="j_More avo-more ui-more-drop-l" href="javascript:;" onclick="pclick2()" id="shousuodiv">
更多<i class="ui-more-drop-l-arrow"></i></a>
<a style="visibility: visible; display: none;" class="j_More avo-more ui-more-expand-l" href="javascript:;" onclick="pclick1()" id="zhankaidiv">收起
<i class="ui-more-expand-l-arrow"></i>
</a>
</div>
</div>
</div>
</div>
<script>
var pp=document.getElementById('p1');
pp.style.height='54px' ;
pp.style.overflow='hidden' ; //点击显示全部
function pclick1(){ var pp=document.getElementById('p1'); pp.style.height='54px';
document.getElementById('zhankaidiv').style.display="none";
document.getElementById('shousuodiv').style.display="block"
}
function pclick2(){ var pp=document.getElementById('p1'); pp.style.height='auto';
document.getElementById('zhankaidiv').style.display="block";
document.getElementById('shousuodiv').style.display="none"
}
</script>
<!--{/if}-->
是不是很简单,样式自己定义即可。
⑹ ecshop分类页怎么增加分类筛选
这个视频您可以看一下:http://www.68ecshop.com/article-600.htmlhttp://www.68ecshop.com/article-600.html
或者这样操作一下:
您可以进入后台--商品管理版--商品类型--属性列表权,然后编辑属性即可。如下图所示:
⑺ ecshop如何排除某分类下的促销商品
这个可以通过所前台调用促销商品的地方加一个限制条件,过滤掉这个特殊分类的商品就可以了,可以改的她方比较多:
例如需要改get_promote_goods
把$sql = 'SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
"promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, goods_img, b.brand_name, " .
"g.is_best, g.is_new, g.is_hot, g.is_promote, RAND() AS rnd " .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
'WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ' .
" AND g.is_promote = 1 AND promote_start_date <= '$time' AND promote_end_date >= '$time' ";
增加 and g.cat_id <> 分类id 形如:
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.shop_price AS org_price, g.promote_price, ' .
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
"promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, goods_img, b.brand_name, " .
"g.is_best, g.is_new, g.is_hot, g.is_promote, RAND() AS rnd " .
'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('brand') . ' AS b ON b.brand_id = g.brand_id ' .
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
'WHERE g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 and g.cat_id <> 6 ' .
" AND g.is_promote = 1 AND promote_start_date <= '$time' AND promote_end_date >= '$time' ";
⑻ 怎样开启ecshop的商品筛选功能
后台【商品分类】编辑一个分类,里边有一个【筛选属性】选择商品类型,选择商品属性,然后保存,前台有商品的属性就会显示了,也就是商品筛选。
⑼ ECSHOP商城系统过滤不严导致SQL注入漏洞,官方不知道吗
要防止SQL注入其实不难,你知道原理就可以了。 所有的SQL注入都是从用户的输入开始的。如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了。用户输入有好几种,我就说说常见的吧。 文本框、地址栏里***.asp?中?号后面的id=1之类的、单选框等等。一般SQL注入都用地址栏里的。。。。如果要说怎么注入我想我就和上面的这位“仁兄”一样的了。 你只要知道解决对吗? 对于所有从上一页传递过来的参数,包括request.form 、request.qurrystring等等进行过滤和修改。如最常的***.asp?id=123 ,我们的ID只是用来对应从select 里的ID,而这ID一般对应的是一个数据项的唯一值,而且是数字型的。这样,我们只需把ID的值进行判定,就可以了。vbs默认的isnumeric是不行的,自己写一个is_numeric更好,对传过来的参数进行判定,OK,搞定。算法上的话,自己想想,很容易了。但是真正要做到完美的话,还有很多要计算的。比如传递过来的参数的长度,类型等等,都要进行判定。还有一种网上常见的判定,就是判定传递参数的那一页(即上一页),如果是正常页面传弟过来就通过,否则反之。也有对' or 等等进行过滤的,自己衡量就可以了。注意一点就是了,不能用上一页的某一个不可见request.form("*")进行判定,因为用户完全可以用模拟的形式“复制”一个和上一页完全一样的页面来递交参数。