1

PHPとMySQLでDataTablesを使用して素晴らしい結果が得られましたが、行のクラスを設定するのに多くの問題があります。私のSQLテーブルには、「blue_class」、「green_class」、「red_class」、...などの値を含む「class_style」という名前の列があります。

私の目標は、結果のすべての行でこのクラス名を宣言することです。これにより、たとえば、この例http://www.datatables.net/release-datatables/examples/のように、背景が赤い「red_class」行を表示できます。 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>
4

6 に答える 6

4

サーバー側でテーブルをレンダリングしてからクライアント側に送り返し、その後 DataTables を呼び出しているようです。あれは正しいですか?

別のアプローチは、「サーバー側処理」モードでDataTables を使用することです。つまり、サーバーは現在の「ページ」のデータの JSON のみを送り返します。または、データ ソースがそれほど大きくない場合は、Ajax ソースを使用することもできます (これも JSON を返す必要がありますが、データ セット全体を返します)。次に、fnRowCallback関数を使用して行のスタイルを設定できます [編集: 1.10 以降、単に「rowCallback」と呼ばれるようになりました]。データ セットからクラス名を取得し、jQuery を使用して行に追加します。

このようなもの:

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


無視できる完全な衒学はさておき(招待されていないところに私が鼻を突っ込んでいるだけなので)、色付きのクラスを使用することはおそらく最適な長期的な決定ではありません。「赤」、「緑」などはすべて、個々のレコードの何らかの状態に対応していると思います。たぶん、「緑」は「現在アクティブ」などを意味します。外観ではなく目的を反映するクラスを使用する必要があります。これは、ある日、「現在アクティブ」(またはその他のもの) を表すには「紫」が実際にはより適切な色であると判断する可能性があるためです。

于 2012-05-29T04:34:14.507 に答える
1

前にデフォルトのクラスを設定します。

$.fn.dataTableExt.oStdClasses.sStripeOdd = '';

$.fn.dataTableExt.oStdClasses.sStripeEven = '';

さらなる参照については、こちらを参照してください

http://www.datatables.net/styling/custom_classes

于 2013-04-23T08:16:30.110 に答える
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>
于 2014-10-01T10:46:41.797 に答える
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>";
于 2012-05-28T21:04:59.587 に答える