php 原生代码,分类方法,自动获取该分类下的子类所有商品,并带分页,传输给前台。

 <?php

// size  是个数    page  是页数



if($cat_id == "")
{
	$data['success'] = 0;
	$data['error'] = '分类ID不能为空';
	echo json_encode($data);
	exit;
}



$children = get_children($cat_id);


$count_arr = get_mall_goods_count($children,$user_dengji);


$count = $count_arr['count(*)'];  //总个数

/*传的数量如果大于真实数量,显示最后一页数据*/

$max_page = ($count> 0) ? ceil($count / $size) : 1;   

if ($page > $max_page)
{
    $page = $max_page;
}



$goodslist = get_mall_goods($children, $size, $page, 'sort_order',$user_dengji);



$page_arr = page($count,$size);  分页



if ($goodslist === null) {

	$data['success'] = 0;
	$data['error'] = '没有数据';
	
}
else
{
	$data['success'] = 1;
	$data['data']['goodslist'] = $goodslist;	
	$data['data']['page'] = $page_arr;
}




// echo "<pre>";
// print_r($data);
// echo "</pre>";
// die;
echo json_encode($data);


/**
 * 获取数量
 * @param  [type] $cat_id [description]
 * @return [type]         [description]
 */
function get_mall_goods_count($cat_id,$user_dengji){

    $where   = "g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND g.is_mall = 1 and is_luck = 0 and is_miao = 0 and is_fresh = 0 and is_zero = 0 ";
    $where  .= " and $cat_id AND g.show_vip_id LIKE '%{$user_dengji}%'";

	$sql     = "select count(*) FROM "."商品表"." as g " . 
	'LEFT JOIN ' . "分类表" . ' AS c ON c.cat_id = g.cat_id WHERE ' .
	$where;

	$res = find_query($sql);

    return $res;

}

/**
 * 获取商品
 * @param  [type] $cat_id [description]
 * @param  [type] $size   [description]
 * @param  [type] $page   [description]
 * @param  [type] $sort   [description]
 * @param  [type] $order  [description]
 * @return [type]         [description]
 */
function get_mall_goods($cat_id, $size, $page, $sort, $user_dengji){

    $where   = "g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND g.is_mall = 1 and is_luck = 0 and is_miao = 0 and is_fresh = 0 and is_zero = 0 ";
    $where  .= " and $cat_id and g.show_vip_id LIKE '%{$user_dengji}%'";
   

    $skip     = ($page - 1) * $size;

    $limit = " limit " . $skip . "," . $size;

    $sql = 'SELECT g.goods_id, g.goods_name, g.goods_number, g.suppliers_id, g.market_price, g.shop_price , ' .
                'g.goods_brief, g.original_img' .
            ' ,g.team_num,g.team_price,g.goods_type '.
            'FROM ' . "商品表" . ' AS g ' .
			'LEFT JOIN ' . "分类表" . ' AS c ON c.cat_id = g.cat_id ' .
            "WHERE $where ORDER BY g.`".$sort."`, g.goods_id DESC" . $limit;
    $res = query($sql);


    return $res;

}

function get_children($cat = 0)

{

    return 'g.cat_id ' . db_create_in(array_unique(array_merge(array($cat), array_keys(cat_list($cat, 0, false)))));

}	

/**

 * 创建像这样的查询: "IN('a','b')";

 *

 * @access   public

 * @param    mix      $item_list      列表数组或字符串

 * @param    string   $field_name     字段名称

 *

 * @return   void

 */

 
function db_create_in($item_list, $field_name = '')

{

    if (empty($item_list))

    {

        return $field_name . " IN ('') ";

    }

    else

    {

        if (!is_array($item_list))

        {

            $item_list = explode(',', $item_list);

        }

        $item_list = array_unique($item_list);

        $item_list_tmp = '';

        foreach ($item_list AS $item)

        {

            if ($item !== '')

            {

                $item_list_tmp .= $item_list_tmp ? ",'$item'" : "'$item'";

            }

        }

        if (empty($item_list_tmp))

        {

            return $field_name . " IN ('') ";

        }

        else

        {

            return $field_name . ' IN (' . $item_list_tmp . ') ';

        }

    }

}

 
/**

 * 获得指定分类下的子分类的数组

 *

 * @access  public

 * @param   int     $cat_id     分类的ID

 * @param   int     $selected   当前选中分类的ID

 * @param   boolean $re_type    返回的类型: 值为真时返回下拉列表,否则返回数组

 * @param   int     $level      限定返回的级数。为0时返回所有级数

 * @param   int     $is_show_all 如果为true显示所有分类,如果为false隐藏不可见分类。

 * @return  mix

 */

function cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0, $is_show_all = true)

{

    static $res = NULL;



    if ($res === NULL)

    {


            $sql = "SELECT c.cat_id, c.cat_name, c.commission, c.measure_unit, c.parent_id, c.is_show, c.show_in_nav, c.grade, c.sort_order, COUNT(s.cat_id) AS has_children FROM 分类表 AS c LEFT JOIN 分类表 AS s ON s.parent_id=c.cat_id GROUP BY c.cat_id ORDER BY c.parent_id, c.sort_order ASC";

            $res = query($sql);


            $sql = "SELECT cat_id, COUNT(*) AS goods_num " .

                    " FROM " . "商品表" .

                    " WHERE is_delete = 0 AND is_on_sale = 1 " .

                    " GROUP BY cat_id";

            $res2 = query($sql);

            $newres = array();

            foreach($res2 as $k=>$v)

            {

                $newres[$v['cat_id']] = $v['goods_num'];

            }


            foreach($res as $k=>$v)

            {

                $res[$k]['goods_num'] = !empty($newres[$v['cat_id']]) ? $newres[$v['cat_id']] : 0;

            }


    }



    if (empty($res) == true)

    {

        return $re_type ? '' : array();

    }


    $options = cat_options($cat_id, $res); // 获得指定分类下的子分类的数组


    $children_level = 99999; //大于这个分类的将被删除

    if ($is_show_all == false)

    {

        foreach ($options as $key => $val)

        {

            if ($val['level'] > $children_level)

            {

                unset($options[$key]);

            }

            else

            {

                if ($val['is_show'] == 0)

                {

                    unset($options[$key]);

                    if ($children_level > $val['level'])

                    {

                        $children_level = $val['level']; //标记一下,这样子分类也能删除

                    }

                }

                else

                {

                    $children_level = 99999; //恢复初始值

                }

            }

        }

    }



    /* 截取到指定的缩减级别 */

    if ($level > 0)

    {

        if ($cat_id == 0)

        {

            $end_level = $level;

        }

        else

        {

            $first_item = reset($options); // 获取第一个元素

            $end_level  = $first_item['level'] + $level;

        }



        /* 保留level小于end_level的部分 */

        foreach ($options AS $key => $val)

        {

            if ($val['level'] >= $end_level)

            {

                unset($options[$key]);

            }

        }

    }



    if ($re_type == true)

    {

        $select = '';

        foreach ($options AS $var)

        {

            $select .= '<option value="' . $var['cat_id'] . '" ';

            $select .= ($selected == $var['cat_id']) ? "selected='ture'" : '';

            $select .= '>';

            if ($var['level'] > 0)

            {

                $select .= str_repeat('&nbsp;', $var['level'] * 4);

            }

            $select .= htmlspecialchars(addslashes($var['cat_name']), ENT_QUOTES) . '</option>';

        }



        return $select;

    }

    else

    {

        // foreach ($options AS $key => $value)

        // {

        //     $options[$key]['url'] = build_uri('category', array('cid' => $value['cat_id']), $value['cat_name']);

        // }



        return $options;

    }

}

//这个是分页
function page($num,$geshu)
{
    if(is_numeric($num) && is_numeric($geshu))
    {
         $page_num = ceil($num/$geshu);//取整

        if($page_num < 1){
            $page_num = 1;
        }
        
        $arr = array();
        for ($i=1; $i <= $page_num; $i++) { 
            array_push($arr,$i);
        }

        return $arr;
    }
   
}
?>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值