أحتاج إلى مرشح البيانات باستخدام قائمة منسدلة مخصصة. لدي البيانات التي يتم عرضها في شكل جيد الآن ، فأنا بحاجة إلى قائمة منسدلة مخصصة في الرأس لتصفية البيانات حسب القيمة المنسدلة [ملاحظة: أحتاج إلى توفير هذه القيمة المنسدلة للتصفية في استعلام Laravel. هذه قيمة مخصصة لذا أحتاج إلى تصفية البيانات باستخدام هذه القيمة المخصصة.]
يعمل هذا الرمز مع عامل التصفية الافتراضي ولكني أضفت القائمة المنسدلة باستخدام jquery لذلك أحتاج إلى تمرير هذه القيمة في استعلام Laravel لتصفية البيانات.
$(function () {
var t = $('#user').DataTable({
order: [[ 0, 'desc' ]],
processing: true,
serverSide: true,
ajax: {
url: '{!! route('datatables.data') !!}',
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
}
},
columns: [
{ data: 'id', name: 'id' },
{ data: 'name', name: 'name' },
{ data: 'email', name: 'email' },
{ data: 'arrival_date', name: 'arrival_date', orderable: true, searchable: true },
{ data: 'pick_up', name: 'pick_up', orderable: true, searchable: true },
{ data: 'destination', name: 'destination', orderable: true, searchable: true},
{ data: 'trekking_start_date', name: 'trekking_start_date', orderable: true, searchable: true},
{ data: 'trekking_end_date', name: 'trekking_end_date', orderable: true, searchable: true},
{ data: 'action', name: 'action', orderable: false, searchable: false},
]
});
});
$(document).ready(function() {
$('<label style="margin-left: 10px;">Filter by ' +
'<select class="form-control input-sm">'+
'<option value="volvo">Completed Trip</option>'+
'<option value="saab">Upcoming Trip</option>'+
'</select>' +
'</label>').appendTo("#user_wrapper #user_length");
});
ورمز الاستعلام الخاص بي في Laravel
public function getClients(Request $request)
{
if($request->ajax()) {
return Datatables::of(DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC')))
//}))
->addColumn('arrival_date', function($user){
if(isset(Helper::getFlightsByClientID($user->id)->arrival_date)) {
return date('M j, Y', strtotime(Helper::getFlightsByClientID($user->id)->arrival_date));
} else {
return 'N/A';
}
})
->addColumn('pick_up', function($user){
if(isset(Helper::getFlightsByClientID($user->id)->pick_up)) {
return Helper::getFlightsByClientID($user->id)->pick_up == 1 ? 'Yes' : 'No';
} else {
return 'N/A';
}
})
->addColumn('destination', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_region_id)) {
return Helper::getTrekByID(Helper::getTreksByClientID($user->id)->trekking_region_id)->name;
} else {
return 'N/A';
}
})
->addColumn('trekking_start_date', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_start_date)) {
return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_start_date));
} else {
return 'N/A';
}
})
->addColumn('trekking_end_date', function($user){
if(isset(Helper::getTreksByClientID($user->id)->trekking_end_date)) {
return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_end_date));
} else {
return 'N/A';
}
})
->addColumn('action', function($user){
$html = '';
$html .= '<a class="btn bg-green btn-flat btn-xs" href="'.route('user.clients.edit', $user->id).'">Edit</a>';
if(auth()->user()->hasRole('superadmin')) {
$html .= ' <a onclick="if(!confirm(\'Are u sure to delete?\')) return false;" class="btn bg-red btn-flat btn-xs" href="'.route('user.clients.delete', $user->id).'">Delete</a>';
}
return $html;
})
->make(true);
} else {
abort(400, 'Bad Request.');
}
}
إذا كان ذلك ممكنًا ، يرجى تضمين نسخة من الكود الخاص بك الذي يؤدي إلى الخطأ المشتبه به. يمكنك استخدام علامات كود php markdown لتنسيق اللصق الخاص بك: md5-29f7d4c1ff52f0e396b313bfe2550e56
shankhadevpadam يمكنك القيام بذلك بعدة طرق. ولكن ما أفعله هو تمرير منشئ الاستعلام قبل جداول البيانات في جانب الخادم.
$model = new Example();
$model->where('column_to_filter','=',$this->request->get('filter_by'));
return datatables()->eloquent($model);
يمكنك بالطبع عمل IFs الشرطية.
$model = new Example();
if($this->request->has('name')) {
$model->where('name','=','predefined value');
}
return datatables()->eloquent($model);
إذا كنت لا تريد أن تفعل المثال أعلاه ، يمكنك الرجوع إلى المستندات. بحث العمود ، عامل تصفية مخصص
سؤالي هو كيفية ربط القائمة المنسدلة مثل الصورة أعلاه ، لقد ربطتها من خلال jquery مخصص ولكني بحاجة إلى الربط باستخدام جدول البيانات ويجب أن تكون هذه القيمة متاحة عند تغيير القائمة المنسدلة. [الرجاء الاطلاع على مقتطف الشفرة الخاص بي]
أضف id
في مربع التحديد.
<select class="form-control input-sm" id="custom-filter">
ثم قم بتضمينه في معلمات الطلب.
ajax: {
url: '{!! route('datatables.data') !!}',
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
d.filter = $('#custom-filter').val();
}
},
ثم قم بعمل المرشح اللازم على جانب الخادم.
if ($filter = request('filter')) {
$query->where('filter', $filter);
}
تحتاج إلى تشغيل الرسم عند تغيير الفلتر. ربما شيء مثل:
<select class="form-control input-sm" id="custom-filter" onchange="$('#user').DataTable().draw()">
أيضا ، أنت تستخدم المجموعة. يتحول
DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC'))
إلى شيء مثل:
DB::table('users')->whereNot(...);
شكرا تعمل الآن.
مرحبًا ، لا تنس تمييز المشروع بنجمة إذا وجدته مفيدًا. :) شكرا!
تعمل القائمة المنسدلة بشكل مثالي ولكن عرض البيانات بعد تغيير القيمة في القائمة المنسدلة لا يتم الترتيب بشكل صحيح.
هل تريد الترتيب حسب التاريخ عند التصفية؟ تحتاج إلى القيام بذلك على مستوى js
. أو عيّن الترتيب الافتراضي لهذا العمود.
نعم ، أي مثال من فضلك.
ليس لدي أي مثال. راجع مستندات js api الرسمية https://datatables.net/reference/api/ للمرجع. الحيلة هي تنفيذ أمر js يدويًا قبل تنفيذ وظيفة إعادة رسم الجدول.
yajra كيفية تطبيق المكافئ في
data: function(d) {
d.name = $('input[name=name]').val();
d.email = $('input[name=email]').val();
d.filter = $('#custom-filter').val();
}
sistemaswebbrasil باستخدام minifiedAjax()
:
$script = '
data.name = $('input[name=name]').val();
data.email = $('input[name=email]').val();
data.filter = $('#custom-filter').val();
';
return $this
->builder()
...
->minifiedAjax($url = '', $script = null, $data = [])
التعليق الأكثر فائدة
تحتاج إلى تشغيل الرسم عند تغيير الفلتر. ربما شيء مثل:
أيضا ، أنت تستخدم المجموعة. يتحول
إلى شيء مثل: