2010-03-17 122 views
0

我將如何創建一個嵌套列表,我現在有這個創建一個嵌套列表

public function getNav($cat,$subcat){ 
    //gets all sub categories for a specific category 
    if(!$this->checkValue($cat)) return false; //checks data 

    $query = false; 
    if($cat=='NULL'){ 
     $sql = "SELECT itemID, title, parent, url, description, image 
       FROM p_cat 
       WHERE deleted = 0 
       AND parent is NULL 
       ORDER BY position;"; 
     $query = $this->db->query($sql) or die($this->db->error); 
    }else{ 
     //die($cat); 
     $sql = "SET @parent = (SELECT c.itemID FROM p_cat c WHERE url = '".$this->sql($cat)."' AND deleted = 0); 

       SELECT c1.itemID, c1.title, c1.parent, c1.url, c1.description, c1.image, (SELECT c2.url FROM p_cat c2 WHERE c2.itemID = c1.parent LIMIT 1) as parentUrl 
       FROM p_cat c1 
       WHERE c1.deleted = 0 
       AND c1.parent = @parent 
       ORDER BY c1.position;"; 
     $query = $this->db->multi_query($sql) or die($this->db->error); 
     $this->db->store_result(); $this->db->next_result(); 
     $query = $this->db->store_result(); 
    } 
    return $query; 
} 


public function getNav($cat=false, $subcat=false){ 
     //gets a list of all categories form this level, if $cat is false it returns top level nav 

    if($cat==false || strtolower($cat)=='all-products') $cat='NULL'; 
    $ds = $this->data->getNav($cat, $subcat); 
    $nav = $ds ? $ds : false; 
    $html = ''; 

    //create html 
    if($nav){ 
     $html = '<ul>'; 
     //var_dump($nav->fetch_assoc()); 
     while($row = $nav->fetch_assoc()){ 
      $url = isset($row['parentUrl']) ? $row['parentUrl'].'/'.$row['url'] : $row['url']; 
      $current = $subcat==$row['url'] ? ' class="current"' : ''; 
      $html .= '<li'.$current.'><a href="/'.$url.'/">'.$row['title'].'</a></li>'; 
     } 
     $html .='</ul>'; 
    } 
    return $html; 
} 

的SQL回報父母和孩子,爲每個父我需要孩子窩在列表中。

回答

0

我已經做了任何PHP,但是想知道這是否可行。內部while循環,可能你只是重複並在新<李>再次添加getNav的輸出($貓= $行[「URL」]),有點像:

while($row = $nav->fetch_assoc()){ 
    $url = isset($row['parentUrl']) ? $row['parentUrl'].'/'.$row['url'] : $row['url']; 
    $current = $subcat==$row['url'] ? ' class="current"' : ''; 
    $html .= '<li'.$current.'><a href="/'.$url.'/">'.$row['title'].'</a>'; 
    /* Add subNav HTML */ 
    $html .= $this->getNav($row['url']); 
    $html .= '</li>'; 
} 

似乎「 getNav「指的是獲取SQL的函數以及呈現nav HTML的函數 - 爲了清楚起見,可以將HTML getNav函數名改爲getNavHtml。 也似乎可以從SQL getNav函數中刪除$ subcat參數,因爲它從不使用。