ecshop如何控制各级别分类的显示

2009-09-11 16:33 来源:www.chinab4c.com 作者:ecshop专家

/**
 * 获得指定分类同级的所有分类以及该分类下的子分类
 *
 * @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;
    }

    /*
     判断当前分类中全是是否是底级分类,
     如果是取出底级分类上级分类,
     如果不是取当前分类及其下的子分类
    */
 $where_child = '';
    $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)
    {
        /* 获取当前分类及其子分类 */
     if($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 and cat_id = $cat_id ORDER BY sort_order ASC, cat_id ASC";
    $where_child =" limit 5";
  }else{
    $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']]['parent_id']   = $row['parent_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'], $where_child);
                }
            }
        }
    }
    if(isset($cat_arr))
    {
        return $cat_arr;
    }
}

function get_child_tree($tree_id = 0,$where_child)
{
    $three_arr = array();
    $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$tree_id' AND is_show = 1 ";
    if ($GLOBALS['db']->getOne($sql) || $tree_id == 0)
    {
        $child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
                'FROM ' . $GLOBALS['ecs']->table('category') .
                "WHERE parent_id = '$tree_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC $where_child ";
  
        $res = $GLOBALS['db']->getAll($child_sql);
        foreach ($res AS $row)
        {
            if ($row['is_show'])

               $three_arr[$row['cat_id']]['id']   = $row['cat_id'];
       $three_arr[$row['cat_id']]['parent_id']   = $row['parent_id'];
               $three_arr[$row['cat_id']]['name'] = $row['cat_name'];
               $three_arr[$row['cat_id']]['url']  = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);

               if (isset($row['cat_id']) != NULL)
                   {
                       $three_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id'],$where_child);

            }
        }
    }
    return $three_arr;
}

 

 

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div class="box">
 <div class="box_1">
  <div id="category_tree">
    <!--{foreach from=$categories item=cat name = tt}-->
  <!----------foreach循环中,增加一个name =tt。用来控制循环下标----->
   <dl>
   <dt><a href="{$cat.url}">{$cat.name|escape:html}</a></dt>
   {assign var=foo value=$cat.id}
   {assign var=parent_id value=$cat.parent_id}
  
   <!----------将tt中的分类id---------->
   {if $foo eq $category}
     <!--{foreach from=$cat.cat_id item=child name = aa1}-->
        <dd><a href="{$child.url}">{$child.name|escape:html}</a></dd>
        <!--{foreach from=$child.cat_id item=childer name = aa2}-->
        <dd>&nbsp;&nbsp;<a href="{$childer.url}">{$childer.name|escape:html}</a></dd>
        <!--{/foreach}-->
        {if $parent_id == 0}<br>
        <a href="catalog.php">more</a>
        {/if}
     <!--{/foreach}-->
    
     {else}
     {assign var=m value=0}
      <!--{foreach from=$cat.cat_id item=child name = aa1}-->
       {if $smarty.foreach.aa1.iteration <= 5}
          {assign var=m value=$smarty.foreach.aa1.iteration}
           <dd><a href="{$child.url}">{$child.name|escape:html}</a></dd>
           <!--{foreach from=$child.cat_id item=childer name = aa2}-->
           <dd>&nbsp;&nbsp;<a href="{$childer.url}">{$childer.name|escape:html}</a></dd>
           <!--{/foreach}-->
         {/if}
        
       
      
      <!--{/foreach}--><br>
      {if $m == 5}
      <a href="catalog.php">more</a>
      {/if}
    {/if}
   
    
   
     </dl>
    <!--{/foreach}-->
  </div>
 </div>
</div>
<div class="blank5"></div>