Welcome Guest, Not a member yet? Register   Sign In
Recursive category tree Code

Usage :: $this->category_library->showCategories(45);
output:: a select menu with all subcategories inside the specified category


i used adodb as db library , and following is the table structure. copy the following functions in either library or model and use as above.

# Table structure for categories
CREATE TABLE `categories` (
`cat_id` bigint(20) unsigned NOT NULL auto_increment,`cat_name` varchar(255) default NULL,
`cat_nick` bigint(20) unsigned default NULL,`cat_description` text,`cat_parentid` bigint(20) unsigned default NULL,`cat_count` int(10) unsigned default '0',`cat_path` text,`cat_id_path` blob,PRIMARY KEY (`cat_id`)

# Records for table categories

insert into categories values (45, 'Category 1', null, null, 0, 0, null, null),
(46, 'Category2', null, null, 45, 0, null, null),
(47, 'Category 3', null, null, 46, 0, null, null);

// &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    // this is recursive category selection part
    function untree($parent, $level)
                $obj = & get_instance();
                $sql = "select cat_id, cat_name as name from categories where cat_parentid=$parent order by cat_name";
                $parentsql = $obj->adodb->Execute($sql);
                // if it is a leaf (no data underneath it) then return
                if ($parentsql === false)
                    return false;  
                //else echo the result, and recurse the function (so to speak)
                        $branch = $parentsql->fields;    
                        //give it some indents in the select box
                        $this->comv.="\r\n<option value=\"".$branch[0]."\">";
                        for ($x=1; $x<=$level; $x++)
                        //now run this function and find everthing where the parent is equal to the ID of this entry
                        $rename_level = $level;
                        $this->untree($branch[0], ++$rename_level);

    // show category tree from db
    // return as select item
    function showCategories($selected_category) {
    // un tree so to speak this data tree
    $obj = & get_instance();
    $sql = "select *,cat_name as name from categories where cat_parentid=$selected_category order by cat_name";
    // get ALL the entries that have NO parent
    $compsql = $obj->adodb->Execute($sql);
        while (!$compsql->EOF)
            //call the untree function and find all the entries that have THIS entry as a parent (therefore those entries are children of this one)
        echo $this->comv;
    } // end of showCategories()
    // &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Hope somebody who is in hurry , can use this.

Theme © iAndrew 2016 - Forum software by © MyBB