Проблема с рекурсивной функцией

riberk

Новичок
Доброго времени суток.
Есть метод,рекурсивно выводящий материалы в <option>

PHP:
private static function option_material($pID/*текущий родитель*/
                                                      ,$number/*глубина рекурсии*/
                                                      ,$content
                                                      ,$parent_id=0/*родитель выбранного материала*/
                                                      ,$uid = 0/*идентификатор выбранного материала*/
                                                      ,$disabled = false/*надо ли делать <option> disabled*/
                                                       )
    {
        $smarty = new extSmarty();
        
        
        $result_query = mysql_query("SELECT * FROM `material` where `PID`='$pID' 
                                    and `TID` != '3' ORDER BY `number`") 
                        or die (mysql_error());
    
        global $number;
        global $content;
        $nbsp='';
        $number++;
        
        if (mysql_num_rows($result_query)>0){
            for($i=0; $i<=$number-2;$i++)
                    $nbsp .= '&nbsp;';
            
            while ($data_query = mysql_fetch_assoc($result_query))
            {
                $smarty->assign('nbsp',$nbsp);
                $smarty->assign('name',$data_query['name']);
                $smarty->assign('id',$data_query['ID']);
                
                if ($disabled){
                    $smarty->assign('disabled','true');
                    $content .= $smarty->fetch('option_article(select).tpl');
                    material::option_material($data_query['ID'], $number,$content,$parent_id, $uid, true);
                }
                else{
                    if(($parent_id!= $data_query['ID']) && ($uid !=  $data_query['ID'])){
                        $content .= $smarty->fetch('option_article(select).tpl');
                        material::option_material($data_query['ID'], $number,$content,$parent_id, $uid);  
                    }
                    elseif($parent_id == $smarty->$data_query['ID']){
                        $smarty->assign('selected','true');
                        $content .= $smarty->fetch('option_article(select).tpl');
                        material::option_material($data_query['ID'], $number,$content,$parent_id, $uid);   
                    }
                    elseif ($uid ==  $data_query['ID']){
                        $smarty->assign('disabled','true');
                        $content .= $smarty->fetch('option_article(select).tpl');
                        material::option_material($data_query['ID'], $number,$content,$parent_id, $uid,true);
                    }   
                }
                $number--;
            }
        }
   
    }
Проблема в том, что при редактировании материала, к примеру, с PID=10, у которого соответственно PID=3, вот этот блок кода повторяется для каждого материала, следующего после редактируемого и с PID=3,
PHP:
                    elseif($parent_id == $smarty->$data_query['ID']){
                        $smarty->assign('selected','true');
                        $content .= $smarty->fetch('option_article(select).tpl');
                        material::option_material($data_query['ID'], $number,$content,$parent_id, $uid);   
                    }
а вот этот для каждого материала, следующего после редактируемого и с PID=10
PHP:
                    elseif ($uid ==  $data_query['ID']){
                        $smarty->assign('disabled','true');
                        $content .= $smarty->fetch('option_article(select).tpl');
                        material::option_material($data_query['ID'], $number,$content,$parent_id, $uid,true);
                    }
причем
PHP:
$smarty->assign('id',$data_query['ID'])
нормально записывает на каждом проходе в шаблон то, что нужно.

option_article(select).tpl
PHP:
<option {if isset($disabled)}disabled{/if} {if isset($selected)}selected{/if} value="{$id}">{$nbsp}{$name}</option>
Подскажите пожалуйста, куда копать.
 

riberk

Новичок
Проблему решил. Затупил, не подумал, что смарти сохраняет переменные. Добавил в начало цикла
PHP:
$smarty->clearAllAssign();
И все нормуль.
 
Сверху