2012-05-28 32 views
1

我使用的是帶有PHP和MySQL的DataTable,效果很好,但是我有很多麻煩設置行的類。 我的SQL表有一個名爲「class_style」的列,其中包含一些值,如「blue_class」,「green_class」,「red_class」......無法在DataTables中設置行類

我的目標是在結果的每一行上聲明這個類名我可以(例如)顯示紅色背景的「red_class」行,例如http://www.datatables.net/release-datatables/examples/basic_init/zero_config.html,其中紅色顯示。

我想會的工作代碼如下:

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     echo "<tr class='" . mysql_result($result, $i, 'class_style') . "'>";; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 

,當我打開網頁與正在顯示下面的類表的每一行的瀏覽器:

<tr class='odd'> 
<tr class='even'> 

即使如果我使用的自動化程度較低的解決方案如下所示

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     echo "<tr class='my_class'>";; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 

所有類都變成

<tr class='my_class odd'> 
<tr class='my_class even'> 

我怎麼能得到這個問題的解決方案?我想達到以下結果:

<tr class='green_class'> 
    <td>Smith</td> 
    <td>the Duck</td> 
</tr> 
<tr class='red_class'> 
    <td>Jackbson</td> 
    <td>Big great team</td> 
</tr> 
<tr class='green_class'> 
    <td>Awaiters</td> 
    <td>the flowers</td> 
</tr> 

回答

0

嘗試

echo "<tbody>"; 
    for($i=0; $i < $number_of_results; $i++){ 
     if($i%2==0){ 
      echo "<tr class='even'>"; 
      else 
      echo "<tr class='odd'>"; 
      echo "<td>" . mysql_result($result, $i, 'family_name') . "</td>"; 
      echo "<td>" . mysql_result($result, $i, 'team') . "</td>"; 
     echo "</tr>";   
    }; 
echo "</tbody>"; 
4

它看起來像你渲染表在服務器端,然後將其發送回客戶端,之後,你正在調用DataTables。那是對的嗎?

另一種方法是在「server-side processing」模式下使用DataTables,這意味着服務器只會發送當前「頁面」的數據的JSON。或者,如果你的數據源不是特別大,你可以使用一個Ajax源代碼(它也應該返回JSON,但是整個數據集)。然後,您可以使用fnRowCallback函數對行進行樣式設置[現在簡稱爲「rowCallback」,自1.10開始)。您可以從數據集中獲取類名,並使用jQuery將其添加到行中。

事情是這樣的:

"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
    var rowClass = aData[4] // imagining that your class is found in column 4 
    $(nRow).addClass(rowClass); 
    } 
} 


作爲一個完全迂腐拋開你可以忽略(因爲它只是我戳我的鼻子它沒有被邀請),使用彩色類可能不是最佳長期的決定。我認爲「紅色」,「綠色」等都對應於某種記錄的狀態。也許「綠色」意味着「目前活躍」或類似的東西。你應該使用反映目的而不是外觀的類,因爲有一天你可能會認爲「紫色」實際上是一種更好的顏色來表示「當前活躍」(或其他)。

1

看到,如果你添加的行,你需要添加獨特的類此行

var table = $('#example').DataTable(); 
var id = 99; 

table 
    .row 
    .add(['cell-1', 'cell-2', 'cell-3', 'cell-4',]) 
    .draw() 
    .nodes() 
    .to$() 
    .addClass('js__list-item-'+id); 

,並導致

<tr class="js__list-item-99 odd" role="row"> 
    <td>cell-1</td> 
    <td>cell-2</td> 
    <td>cell-3</td> 
    <td>cell-4</td> 
</tr> 
2

檢查文檔:

'DT_RowClass' => 'class', 

這是從他們的論壇拉直在這裏: https://datatables.net/reference/option/createdRow

我解決這個問題是這樣的:

jQuery('.js-dataTable-full').dataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax": "/path/to/ajax", 
     "createdRow": function(row, data, index) { 
      if(data.condition) { 
       $(row).addClass('warning'); 
      } 
     }, 
});