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. oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)

    1. 相同字段上的多重索引   在Oracle 12c R1之前,一个字段是无法以任何形式拥有多个索引的.或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的. ...

  2. luogu 1521-求逆序对

    题意: 逆序对指在一个序列中ai>aj && i < j,也就是一前一后两个数,当大的在前面的时候即算一对. 题目求在一个由1-n组成的序列中逆序对为k的序列的个数. 出题 ...

  3. MyEclipse9.0破解

    http://www.cnblogs.com/liulanglang/archive/2011/11/15/2249702.html

  4. Google的PageRank及其Map-reduce应用(日志五)

    上一篇:Hadoop的安装(日志四) 1,算法的原理解释: 如下图所示,G就是传说中的谷歌矩阵,这个矩阵是n*n型号的,n表示共计有n个网页. 如矩阵中所示: 11位置处的元素,是表示第一个网页指向的 ...

  5. ECMAScript迭代语句

    迭代语句又叫循环语句,声明一组要反复执行的命令,直到满足某些条件为止. 循环通常用于迭代数组的值(因此而得名),或者执行重复的算术任务. do-while, while, for, for-in -- ...

  6. Java学习笔记——排序算法之简单排序

    男儿何不带吴钩,收取关山五十州.请君暂上凌烟阁,若个书生万户侯? --南园十三首 三种排序法: 1.冒泡法 2.简单选择法 3.直接插入法   上代码: 1.冒泡排序 public class Bub ...

  7. Trie树详解

    1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.Trie一词来自retrieve,发音为/tri ...

  8. 单片机IAP学习

    1.IAP是什么--简介 IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可 ...

  9. 【2017-05-17】WebForm

    ASP.NET分为:ASP.NET WebForm和ASP.NET MVC 运行机制:C/S(客户端应用程序)代码在客户端执行,仅仅去服务器上的数据库存取数据 B/S(网站应用程序)程序代码在服务器上 ...

  10. 比较容易理解的---原生js瀑布流

    最近一直在恶补基础JS H5 CSS3的基础知识 关于这个瀑布流: 本来打算看着教程来做的. 不过 感觉理解起来有点复杂. SO, 自己参考教程默写了一个.. 目前我所接触过的瀑布流布局分为2大类 主 ...