Also, below is the updated code that should fix the error with rebuild switch having no effect at all:

PHP Code:
<?php
/**
 * Simple Category Tree
 * @Version: Beta 1
 * @Authour: yellow1912
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 */ 

define ('SCT_REBUILD_TREE','true');
class 
simple_categories_generator{
    var 
$category_tree = array();
    var 
$parent_open_tag '';
    var 
$parent_close_tag '';
    var 
$child_open_tag '';
    var 
$child_close_tag '';
    function 
simple_categories_generator() {}
    function 
init(){
        if(
SCT_REBUILD_TREE != 'false' || count($this->category_tree) == 0){
            global 
$languages_id$db;
            
$categories_query "select c.categories_id, cd.categories_name, c.parent_id
                          from " 
TABLE_CATEGORIES " c, " TABLE_CATEGORIES_DESCRIPTION " cd
                          where c.categories_id = cd.categories_id
                          and c.categories_status=1
                          and cd.language_id = '" 
. (int)$_SESSION['languages_id'] . "'
                          order by c.parent_id, c.sort_order, cd.categories_name"
;
            
$categories $db->Execute($categories_query);

            
// reset the tree first
            
$this->category_tree = array(); 
            while (!
$categories->EOF) {
                
$this->category_tree[$categories->fields['categories_id']] = array('name' => $categories->fields['categories_name'],
                
'parent_id' => $categories->fields['parent_id']);
                
$this->category_tree[$categories->fields['categories_id']]['path'][] = $categories->fields['categories_id'];
                
$this->category_tree[$categories->fields['parent_id']]['sub_cats'][] = $categories->fields['categories_id'];
                
$categories->MoveNext();
            }
            
            
// walk through the array and build sub/cPath and other addtional info needed
            
foreach($this->category_tree as $key => $value){
                
// add sub 'class' for print-out purpose
                
$this->category_tree[$key]['sub'] = isset($this->category_tree[$key]['sub_cats']) ? 'has_sub' 'no_sub';
                
// only merge if parent cat is not 0
                
if($this->category_tree[$key]['parent_id'] > 0){
                    if(
is_array($this->category_tree[$this->category_tree[$key]['parent_id']]['path']) && count($this->category_tree[$this->category_tree[$key]['parent_id']]['path'])> 0)
                        
$this->category_tree[$key]['path'] = array_merge($this->category_tree[$this->category_tree[$key]['parent_id']]['path'],$this->category_tree[$key]['path']);
                }
                
$this->category_tree[$key]['cPath'] = is_array($this->category_tree[$key]['path']) ? implode('_',$this->category_tree[$key]['path']) : $key;
    
            }
            
// for debugging using super global mod
            
$_POST['category_tree'] = $this->category_tree;
        }
    }
    
// 9 is a ridiculous level already. If you go deeper than that, you have some problem with performance + structure
    // Max level should be around 3
    
function build_category_string($parent_tag 'div'$child_tag 'span'$divider ''$categories_id 0$max_level 9$include_root false){
        if(!
is_int($categories_id)){
            
$temp explode('_',$categories_id);
            
$categories_id $temp(count($temp)-1);
        }
        
        
$result '';
        
// don't check if max_level = 0, since we assume store owners are not crazy enough to do that
        // --> less check = faster
        
if(isset($this->category_tree[$categories_id])){
            
// 
            
$sub $this->category_tree[$categories_id]['sub'];
            
$level 0;
            
$class "level_$level $sub";
            
$this->_build_tags($parent_tag$child_tag);
            
// check if we should include the root or only its branches
            
if($include_root && $categories_id 0){
                
$result sprintf($this->parent_open_tag$class).sprintf($this->child_open_tag$class);
                
$result .= $this->_build_category_string($categories_id$level$max_level$divider);
                
$result .= $this->child_close_tag.$this->parent_close_tag;
            }
            else{
                
$result .= $this->__build_category_string($categories_id$level$max_level$divider);
            }
            
        }
        return 
$result;
    }

    function 
_build_category_string($categories_id$level$max_level$divider){        
        
$result $this->build_category_link($this->category_tree[$categories_id]['name'],$this->category_tree[$categories_id]['cPath']);
        
$level++;
        
$result .= $this->__build_category_string($categories_id$level$max_level$divider);
        return 
$result;
    }

    function 
__build_category_string($categories_id$level$max_level$divider){
        
$result '';
        if(
$level $max_level){        
            
$sub $this->category_tree[$categories_id]['sub'];
            
$class "level_$level $sub";
            if(isset(
$this->category_tree[$categories_id]['sub_cats'])){
                    
$result .= sprintf($this->parent_open_tag$class);
                    
$count count($this->category_tree[$categories_id]['sub_cats']);
                    for(
$i=0$i $count$i++){
                        
$sub $this->category_tree[$value]['sub'];
                        
$class "level_$level $sub";
                        
$result .= sprintf($this->child_open_tag$class).$this->_build_category_string($this->category_tree[$categories_id]['sub_cats'][$i],$level,$max_level$divider).$this->child_close_tag;
                        
$result .= ($i < ($count-1)) ? $divider '';
                    }
                    
$result .= $this->parent_close_tag;
                }
        }
        return 
$result;
    }
    
    function 
_build_tags($parent_tag$child_tag){
        if(!empty(
$parent_tag)){
            
$this->parent_open_tag "<$parent_tag class='%s'>";
            
$this->parent_close_tag "</$parent_tag>";        
        }
        else{
            
$this->parent_open_tag $this->parent_close_tag '';        
        }
        if(!empty(
$child_tag)){
            
$this->child_open_tag "<$child_tag class='%s'>";
            
$this->child_close_tag "</$child_tag>";        
        }
        else{
            
$this->child_open_tag $this->child_close_tag '';
        }
    }
    
    function 
build_category_link($categories_name$cPath){
        return 
'<a href="' zen_href_link(FILENAME_DEFAULT'cPath=' $cPath) . '">'.$categories_name.'</a>';
    }
}
?>

new auto loader:
PHP Code:
<?php
/**
 * ch_categories_tree_generator
 * @Version: 
 * @Authour: 
 * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0
 */ 
if (!defined('IS_ADMIN_FLAG')) {
    die(
'Illegal Access');
}
$autoLoadConfig[0][] = array('autoType'=>'class''loadFile'=> 'simple_categories_generator.php');
$autoLoadConfig[180][] = array('autoType'=>'classInstantiate',
                                
'className'=>'simple_categories_generator',
                                
'objectName'=>'category_tree',
                                
'checkInstantiated'=>true,
                                
'classSession'=>true);
$autoLoadConfig[180][] = array('autoType'=>'objectMethod',
                                
'objectName'=>'category_tree',
                                
'methodName' => 'init');

?>