Heim > php教程 > php手册 > 无限极分类相关代码

无限极分类相关代码

WBOY
Freigeben: 2016-06-06 19:35:01
Original
937 Leute haben es durchsucht

无详细内容 无 //非递归获取所有后代分类 function get_offspring($pids, $list) { $npid = array(); $offspring = array(); $has_child = true; while($has_child) { $has_child = false; foreach($list as $lk = $lv) { if(in_array($lv['pid'], $pids)) {

    //非递归获取所有后代分类
    function get_offspring($pids, $list)
    {
        $npid = array();
        $offspring = array();
        $has_child = true;
        while($has_child)
        {
            $has_child = false;
            foreach($list as $lk => $lv)
            {
                if(in_array($lv['pid'], $pids))
                {
                    $offspring[] = $lv;
                    $npid[] = $lv['cid'];
                    unset($list[$lk]);
                    $has_child = true;
                }
            }
            $pids = $npid;
        }
        return $offspring;
    }
    //利用路径字段获取后辈分类
    function get_offspring($pid)
    {
        $offspring = array();
        $cats = $this->getList('cat_id,cat_name,parent_id,cat_path', array(), 0, -1);
        foreach($cats as $cv)
        {
            if(in_array($pid, explode(',', $cv['cat_path'])))
            {
                $offspring[] = $cv;
            }
        }
        return $offspring;
    }
    //更新后辈分类路径
    function update_offspring_path($pid, $ppath)
    {
        if($ppath == ',')
        {
            $ppath = '';
        }
        $offspring = $this->get_offspring($pid);

        foreach($offspring as $ov)
        {
            $ov['cat_path'] = substr($ov['cat_path'], 0, strlen($ov['cat_path'])-1);
            $old_path = explode(',', $ov['cat_path']);
            foreach($old_path as $oldk => $oldv)
            {
                if($oldv == $pid)
                {
                    break;
                }
                unset($old_path[$oldk]);
            }
            $new_path = $ppath.implode(',', $old_path).',';
            if(!$this->update(array('cat_path'=>$new_path), array('cat_id'=>$ov['cat_id'])))
            {
                return false;
            }
        }
        return true;
    }
    //将列表整理为树形 返回二维数组
    function get_tree_list($pid, $arr, &$r)
    {
        foreach($arr as $k => $v)
        {
            if($v['parent_id'] == $pid)
            {
                if(isset($r[$pid]))//设置含有子类标记
                {
                    $r[$pid]['has_child'] = 1;
                }

                $v['cat_path'] = trim($v['cat_path']);//计算深度
                $path_str = substr($v['cat_path'], 0, strlen($v['cat_path'])-1);
                if($path_str == '')
                {
                    $v['deep'] = 0;
                }
                else
                {
                    $v['deep'] = count(explode(',', $path_str));
                }

                $v['format'] = str_repeat(' ', 6*$v['deep']);//计算缩进

                $r[$v['cat_id']] = $v;//加入有序列表

                unset($arr[$k]);//已加入 从无序列表中剔除

                $this->get_tree_list($v['cat_id'], $arr, $r);
            }
        }
    }
	//整理数据 返回多维树形数组
	public function getTree()
	{
		$key = 'operate_gettree';
		$cache = Bin_Cache::instance('Bin_Cache_File');
		$tree  = $cache->get($key);
		if(!$tree)
		{
			$men_sql = '
				SELECT
					`cat_id`,`alias_name`,`cat_name`,`cat_type`,`parent_id`,`cat_path`,`img`,`url`,`brand`,`condition`
				FROM
					`'.$this->_prefix.'b2c_virtual_cat`
				ORDER BY
					`order`
			';
			$items = $this->findAll($men_sql);
			$all_brand = $this->getAllBrand();
			foreach($items as $item)
			{
				$item['brands'] = $this->getBrand($item['brand'], $all_brand);
				$tmp[$item['cat_id']] = $item;
			}
		    $tree = array();
		    foreach($tmp as $k => $item){

		        if(isset($tmp[$item['parent_id']]))
	            {
		            $tmp[$item['parent_id']]['son'][] = &$tmp[$item['cat_id']];
		        }
	            else
	            {
		            $tree[] = &$tmp[$item['cat_id']];
		        }
		    }
		    $cache->set($key, $tree);
		}
	    return $tree;
	}
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage