2013-07-01 34 views
0

我有一個包含21個主要項目的菜單,其中大多數都有自己的子項目。 我希望能夠僅顯示其中的第一個'16' - $menu_number['VALUE']在數據庫中包含此值,因此只有前16個將正常顯示,其餘部分應該在放置後的「More」項下可用第16個主要項目,其中將包含其餘項目及其子項目。PHP Count然後在16日後添加內容

這是現在:

首頁

服務>服務1,服務2

組合>組合1,組合2

.....

項目>項目1,項目2,項目3

關於我們>子項目1,子項2

聯繫>子項目1,子項2

這是應該的樣子:

首頁

服務>服務1,服務2

組合>組合1,組合2

.....

個項目>項目1,項目2,項目3

更多>關於我們(>子ITEM1,子ITEM2),聯繫(>子ITEM1,子ITEM2)

這是當前的代碼:

$menu_number = mysql_fetch_array($menu_number, MYSQL_ASSOC); 
echo $menu_number['VALUE']; 

$counter = 0; 
$sql = "SELECT * FROM $tablename WHERE `Parent` = '0' AND Type LIKE 'top' ORDER BY `Order` ASC"; 
    $result = mysql_query($sql) or die ("Error: Query Failed! " .mysql_error()); 
    $output = "<nav><ul>"; 
    while ($rs = mysql_fetch_array($result)) { 
     $rs['Link'] = preg_replace('/\|.*$/','',$rs['Link']); 
     $output .= "<li class='menu_top' id='".$rs['ID']."'><a href='".$rs['Link']."'>".$rs['Name']."</a>".++$counter; 
     $sql2 = "SELECT * FROM $tablename WHERE `Parent` = '".$rs['ID']."' ORDER BY `Order` ASC"; 
     $result2 = mysql_query($sql2) or die ("Error: Query Failed! " .mysql_error()); 
     if (mysql_num_rows($result2) != 0) { 
      $output .= "<ul class='menu_sublinks' id='".$rs['ID']."'>"; 
      while ($rs2 = mysql_fetch_array($result2)){ 
      $rs2['Link'] = preg_replace('/\|.*$/','',$rs2['Link']); 
      $output .= "<li class='menu_sublink' id='".$rs['ID']."'><a href='".$rs2['Link']."'>".$rs2['Name']."</a></li>"; 
      } 
      $output .= "</ul></li>"; 
     } 
    } 
    $output .="</ul></nav"; 

我有一個計數器已經$counter,現在我需要找到一個方法來添加<li>More</li>和新<ul>內,包含17 ... 21 <li> ..

我希望我解釋夠好,我試過了我這樣做,但我很困惑一點... 謝謝你的任何幫助..

回答

0

那是很容易的,只需添加另一種while循環附近的第一個結束..

if ($counter >= 17) { 
    $output .= '<ul>'; 
    while ($rs2 = mysql_fetch_array($result)) { 
     /* Add li's of id's > 17 here... */ 
    } 
    $output .= '<ul>'; 
} 
$output .= "</ul></li>"; 

的內在的同時也會簡單地繼續從結果拉動結果。

另外。嘗試儘快移動到mysqli_*函數,因爲mysql_*已被棄用,並將在適當的時候從php中刪除。

PS。您在代碼結尾缺少</nav的右括號。

另一個ps。考慮切換到_fetch_object而不是數組,然後使用$rs->Link,$rs->ID等。恕我直言,這更可讀,然後陣列造成的括號混亂。

0
while ($rs = mysql_fetch_array($result)) { 
    if (counter == 16) 
    { 
    echo "<li>more...</li></ul><ul>"; 

    // Other existing code in the while loop goes here. 
    } 
} 

這將添加的代碼在第17項,這是更好的迭代,因爲你不會要添加「更多」,如果沒有更多的。

雖然在PHP中添加此代碼相當容易,但我寧願在Javascript中執行此操作,因爲Javascript也必須處理可見項的切換操作。因此,如果沒有Javascript,最好只有一個短列表,而不是一個簡短的列表,more -list,然後什麼也沒有...