2011-03-29 75 views
0

我創建了一個函數,它將顯示我的CMS系統的頁面列表。PHP替代行顏色幫助

function build_pages(&$table, $pid, $sub=0) { 
    global $db; 

    if ($sub == 1) { 
     $class = "section-sub"; 
    } else { 
     $class = "section-name"; 
    } 

    $i = 0; 
    $query = $db->simple_select("pages", "title,section,name,id", "pid='" . $pid . "'"); 
    while ($pages = $db->fetch_array($query)) { 
     if ($i % 2 == 0) { 
      $alt_row = "row1_alt"; // dark 
      $i++; 
     } else { 
      $alt_row = "row2_alt"; // light 
      $i++; 
     } 
     $table->construct_cell("<div class=\"" . $class . "\">" . $pages['title'] . "</div>", array("divstyle" => $alt_row)); 
     $table->construct_cell("", array("divstyle" => $alt_row)); 
     $table->construct_cell("", array("divstyle" => $alt_row)); 
     $table->construct_cell("", array("divstyle" => $alt_row)); 
     $table->construct_row(); 
     build_pages(&$table, $pages['id'], 1); 
    } 
} 

然而,這是備用行着色是做什麼的(注意行着色不完美地交替出現):http://i53.tinypic.com/2afj3mb.png

也許有人可以幫我找到這個瑕疵。

謝謝。

+0

我想我們需要看你的表類。 – Jacob 2011-03-29 13:52:56

+0

我看不出有什麼明顯的缺陷,這意味着問題不在那裏。 (如雅各布先前所述) – acm 2011-03-29 14:03:39

+0

讓CSS做它的魔力會更容易:'div:nth-​​child(2n){...}' – mario 2011-03-29 14:04:31

回答

3

這是因爲您正在使用遞歸函數。循環的第一次迭代然後再次進入build_pages(),開始一個新的循環等等。也許你可以讓$ alt_row成爲一個靜態變量,並且每次發生時都可以簡單地切換它。

+1

嘗試簡單地將$ i聲明爲靜態變量: static $ i = 0; – 2011-03-29 14:12:09

+0

完美的工作! – Spencer 2011-03-29 14:26:58

+0

用遞歸調用很好! – 2011-03-29 14:27:49