ecshop的商品分类页面category.php 下的分类,默认是取得所有同级父分类以及父类别的子分类。比如,我点击进入是A商品分类的页面 category.php?id=1,事实上 我只需要取得父ID为1的子分类即可,但是ecshop也把B商品分类、C商品分类.....下的所有子分类也输出来了。这是没必要的。在ecshop下的category.php 334行  $smarty->assign('categories',       get_categories_tree($cat_id)); //    本身也是要起到这个作用,但是徐然有参数$cat_id,但是当$cat_id为顶级分类时候,该参数是无效的。为什么呢?我们来看一下 get_categories_tree( )这个函数(该函数在目录includes/lib_goods.php下)。如下:

/**

* 获得指定分类同级的所有分类以及该分类下的子分类

*

* @access  public

* @param   integer     $cat_id     分类编号

* @return  array

*/

function get_categories_tree($cat_id = 0)

{

if ($cat_id > 0)

{

$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";

$parent_id = $GLOBALS['db']->getOne($sql);

}

else

{

$parent_id = 0;

}

/*

判断当前分类中全是是否是底级分类,

如果是取出底级分类上级分类,

如果不是取当前分类及其下的子分类

*/

$sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$parent_id' AND is_show = 1 ";

if ($GLOBALS['db']->getOne($sql) || $parent_id == 0)

{

/* 获取当前分类及其子分类 */

$sql = 'SELECT cat_id,cat_name ,parent_id,is_show ' .

'FROM ' . $GLOBALS['ecs']->table('category') .

"WHERE parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";

$res = $GLOBALS['db']->getAll($sql);

foreach ($res AS $row)

{

if ($row['is_show'])

{

$cat_arr[$row['cat_id']]['id']   = $row['cat_id'];

$cat_arr[$row['cat_id']]['name'] = $row['cat_name'];

$cat_arr[$row['cat_id']]['url']  = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);

if (isset($row['cat_id']) != NULL)

{

$cat_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);

}

}

}

}

if(isset($cat_arr))

{

return $cat_arr;

}

}

问题就在这一句

if ($cat_id > 0)

{

$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";

$parent_id = $GLOBALS['db']->getOne($sql);

}

else

{

$parent_id = 0;

}

这一句是判断参数$cat_id是否有父类,若是有父类,就取出其父类的ID,否则视为参数为父类别ID为0,也即为顶级分类。事实上,当参数$cat_id大于0,并且为顶级分类的时候,这句话是无效的,我们假设$cat_id=1,且ID1为顶级ID,也即其parent_id 为0,这种情况下

$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";

$parent_id = $GLOBALS['db']->getOne($sql);

运行得出的值还是0,也即$parent_id =0.虽然有参数,但还是取出所有顶级ID下的所有分类。实际上只需要这样修改即可,把

if ($cat_id > 0)

{

$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";

$parent_id = $GLOBALS['db']->getOne($sql);

}

else

{

$parent_id = 0;

}

修改为

if ($cat_id > 0)

{

$sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";

$parent_id = $GLOBALS['db']->getOne($sql);

if($parent_id==0)$parent_id=$cat_id;//添加上这句是关键。

}

else

{

$parent_id = 0;

}

这时候 参数$cat_id是有效的!

转载自:http://hi.baidu.com/phpser/item/0bdfab1595aa8415e3f986ab

ecshop 商品分类页 取得当前分类下的子分类方法的更多相关文章

  1. EcShop调用显示指定分类下的子分类方法

    ECSHOP首页默认的只有全部分类,还有循环大类以及下面小类的代码,貌似没有可以调用显示指定大类下的子分类代码.于是就有这个文章的产生了,下面由夏日博客来总结下网站建设过程中ECSHOP此类问题的网络 ...

  2. 转:ecshop商品分类页获取相册列表方法

    ecshop商品分类页获取相册列表方法 很久之前就看到过你好在商品列表页有获取到相册列表,但是一直没有实践过,感觉应该挺简单的吧,但是最近手上的项目刚好就需要这个功能,然后就想到网上查下资料,至少找个 ...

  3. ecshop商品分类页获取相册列表方法

    第1步:找到根目录的category.php文件,查找约:486行左右(注意这不是准确位置,看实际的哦),找到这个函数: /** * 获得分类下的商品 * * @access public * @pa ...

  4. 遍历NSView下的子视图方法

    如何遍历NSView下的子视图呢 for (NSView *aview in [SuperV subviews]) { if([aview isMemberOfClass:[NSButton clas ...

  5. 使用sklean进行多分类下的二分类

    #coding:utf-8 import matplotlib.pyplot as plt import numpy as np from sklearn.linear_model import Lo ...

  6. 根据一个分类id 获取这个分类底下所有子分类的商品信息,根据下面方法查询出所有有关分类id 再 根据这些id去商品表里查询所有商品信息

    /** * 检测该分类下所有子分类,并输出ID(包括自己) * 数据库字段 catid pid */ function getChildrenIds ($sort_id){ include_once ...

  7. ECSHOP在线手册布局参考图--商品分类页 category.dwt

        A.购物车 1,设置方法 程序自动读取购物车的商品数量 2,代码相关 cart.lbi 中 {insert_scripts files='transport.js'} <div clas ...

  8. ECSHOP:首页实现显示子分类商品,并实现点击Tab页切换分类商品

    例子:首页实现显示子分类商品,并实现点击Tab页切换分类商品(非AJAX) 开始:    1. 打开调试开关     文件地址:include/cls_template.php 找到 : functi ...

  9. ECSHOP首页调用指定分类下的商品

    转:http://bbs.ecshop.com/thread-1123207-1-1.html 调用某个分类下的商品,方法有很多种的,不过都需要先在后台设置模板那里设置显示和显示条数, 然后在需要调用 ...

随机推荐

  1. JS上了贼船

    本文纯属个人观点,没有引经据典,没有小心求证,just吐槽. 互联网的火热.移动web,带动了前端的飞速发展,js好像搭上了顺风车,身价水涨船高,如日中天. web前端是啥?html + css + ...

  2. TypeScript基本知识(为学习AngularJS2框架做个小铺垫)

    学习angularjs2框架,需要了解一些TypeScript知识点,基本了解下面这几个知识点学习AngularJS2 就够用了 1.TypeScript 1.1显示类型的定义 TypeScript类 ...

  3. ajax分页实现(php)

    ajax分页实现(php) 使用jquery.pagination.js插件 引入js文件.css文件 <link rel="stylesheet" href="/ ...

  4. 微信小程序之获取当前位置经纬度以及地图显示

    最近刚开始接触微信小程序,在弄懂其结构以及相关接口之后,准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上查看位置,通过地图获取不同位置的经纬度. 微信小程序的主体部分包括: 新增 ...

  5. 使用 onpropertychange 和 oninput 检测 input、textarea输入改变

    检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件. 缺陷:复制粘贴时无法检测 2.onchenge 缺陷:要满足触发条件:当前对象 ...

  6. 用css3动画 @keyframes里设置transform:rotate(); 控制动画暂停和运动用属性:animation-play-state:paused暂停,在微信和safari里设置paused无效,在QQ里是正常的

    这几天遇到了两个很奇葩的问题,终于找到原因,趁还记得解决方法,赶紧记下来: 用css3动画 @keyframes里设置transform:rotate(); 控制动画暂停和运动可以用属性:animat ...

  7. 微信小程序开发之获取openid及用户信息

    1. 获取openid 1.1 获取code 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的会话密钥(session_key).用户数据的加解 ...

  8. js中new一个对象的过程

    使用new关键字调用函数(new ClassA(-))的具体步骤: 1. 创建空对象{}: 2. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数 ...

  9. JS中Node节点总结

    Node的三个基本属性: 1.nodeType:表明节点类型,1是元素节点,3是文本节点. 2.nodeName:  表明节点名称,元素节点为标签名,文本节点为#text. 3.nodeValue:表 ...

  10. Navicat for mysql 11.1.20激活

    由于最近工作太忙,一直没有机会分享自己在工作中遇到的困难,今天周日,在出去之前先分享下navicat(版本很重要navicat_trial_11.1.20.0.1449226634)激活. 刚开始我是 ...