Datatable column değişkene aktarma sorunu?
Merhabalar.
Php sayfamda datatable kullanıyorum. Column özelliğine gelen sonuçları bir değişkene atmak istiyorum ve gelen sonuca göre butonları pasif veya aktif etmem gerekiyor bu konuda yardımcı olabilir misiniz?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
Değişkene atmaktan ziyade birçok farklı çözüm yolu vardır aslında. ColumnDefs ayarı ile column a varsayılan bir template vererek render sayesinde gelen değeri kontrol edip butonu aktif/pasif yapabilirsiniz. Belki yine rowCallback ile buna benzer bir işlem yapılabilir. Server side veya statik bir tablo mu kullanıyorsunuz?
Render ve rowCallback ile işimi çözdüm. Teşekkür ederim.
Şu an mobilde olduğum için maalesef test etme imkanım yok. Aklımdan geçen senaryoda sanırım render ile olmuyor, rowCallback daha iyi.
Bu aktif pasif yapılacak butonların son sütunda belirttiğiniz btn içlerindeki butonlar olduğunu düşündüm.
rowCallback: function (row, data) {
let veri = data.quantity // mesela dönen değerlerden quantity göre işlem yapmak istiyorsunuz diyelim. Diğer fonksiyonlarda da bu veriyi kullanabilirsiniz
// bu fonksiyon o an sayfada gösterilen satır sayısı kadar çalışır. 10 ise bu değer burada kendi çağırdığınız fonksiyon da siz müdahale etmeden 10 defa çalışır.
// Varsa bu değere göre if koşulları çalıştırsınız
$(row).find('.btnClass')...
},
JavaScript
var veri = {
title: $('#title').val()
};
$('#example').on('click', 'tbody td.dt-control', function() {
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
row.child.hide();
} else {
row.child(format(row.data())).show();
}
});
$('#example').on('requestChild.dt', function(e, row) {
row.child(format(row.data())).show();
});
var table = $('#example').DataTable({
lengthMenu: [
[10, 25, 50, 100, -1],
[10, 25, 50, 100, "Tümü"]
],
order: [
[2, 'asc']
],
pageLength: 10,
search: true,
paging: true,
info: true,
destroy: true,
retrieve: true,
select: true,
processing: true,
serverSide: true,
deferRender: true,
scroller: true,
ajax: {
type: "POST",
url: "../kt.php",
data: veri,
dataType: "json"
},
"rowId": 'id',
columns: [{
"className": 'dt-control',
"orderable": false,
"data": null,
"defaultContent": ''
},
{
data: 'imgurl'
},
{
data: 'title'
},
{
data: 'condition'
},
{
data: 'quantity'
},
{
data: 'proc'
},
{
data: 'btn'
}
]
});
table.on('stateLoaded', (e, settings, data) => {
for (var i = 0; i < data.childRows.length; i++) {
var row = table.row(data.childRows[i]);
row.child(format(row.data())).show();
}
});
};
Kodum bu şekilde. @abdullahx
Değişkene atmak istememin sebebi o değişkenleri başka fonksiyonlarda kullanıyorum.Server side tablo kullanıyorum.
@abdullahx