1

非常に多くのリストページがあり、すべてのデータテーブルを設定するための js ファイルは 1 つだけです。そのために、各リスト ページから aoColumns の値を、datatables ロジックが記述されている共通の js ファイルに送信しています。リストページの1つに次のような関数を書きました:

public function assignedToMeHideSort()
{
    return array(
        "{bSortable: false}", "null", "null", "{bSortable: false}", "null",
        "null", "null", "null", "null", "null", "null", "null", "null", "null",
        "null", "null", "null", "null", "{\"bSortable\": false}"
    );
}

$aoColumn = assignedToMeHideSort();
echo '<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",", $aoColumn) . '">';

次に、一般的な js ファイルで次のように記述しました。

if ($('#aoColumn').val()) {
    var ao = [];
    var aos = $('#aoColumn').val().split(',');
    for (var i = 0; i < aos.length; i++) {
        if (aos[i] == 'null') {
            //no need for processing
            ao.push('{ null }');
        } else {
            //remove {, } and whitespace, return array splitted by :
            var s = aos[i].replace('{', '').replace('}', '').replace(' ', '').split(':');
            //create object
            var o = {};
            //here you need to force a real boolean instead of "false"
            o[s[0].toString()] = (s[1] == "false") ? false : true;
            ao.push(o);
        }
    }
}
var oTable = $('#data-table').dataTable({
    "sDom": 'CT<"clear">firtlip',
    "oTableTools": {
        "sSwfPath": basePath + "/js/extras/TableTools/media/swf/copy_csv_xls_pdf.swf",
        "aButtons": [
            {"sExtends": "csv", "sFileName": curpath + ".csv", "sButtonText": "Save to CSV", "mColumns": "visible"}
        ]
    },
    "aaSorting": [
        [0, "desc"]
    ],
    "bAutoWidth": false,
    "aLengthMenu": [
        [10, 25, 50, -1],
        [10, 25, 50, "All"]
    ],
    "iDisplayLength": 10,
    "oLanguage": {
        "sSearch": "Filter : "
    },
    "aoColumns": ao,
    'sPaginationType': 'full_numbers'
});

しかし、リストページでは、すべての列幅が 100px と表示されています。それを変更したいのですが、列ごとに異なります。そのために、 withプロパティaoColumnDefsの直後に追加しました。しかし、うまくいきません。この幅の問題を解決する方法を教えてください。aoColumnssWidth

前もって感謝します。

4

0 に答える 0