2015-10-09 7 views
6

मैं सर्वर पक्ष jQuery डेटा-टेबल के साथ लैरवेल 4.2 का उपयोग कर रहा हूं।jquery डेटाटेबल्स, सर्वर पक्ष पर कस्टम सॉर्टिंग

पैकेज: https://github.com/Chumper/Datatable

मैं कस्टम कैसे छँटाई जोड़ सकते हैं?

मुद्रा, समय की स्तंभों के लिए की तरह, आदि

+0

इसके बजाय कुछ ऐसा करने के बारे में https://github.com/lazymofo/datagrid, या इसे इस https: // github के साथ विस्तारित करें।com/ais-one/datagrid_ext –

+0

@AaronGong अन्य विकल्प उपलब्ध हैं लेकिन मैंने कई पृष्ठों पर डेटाटेबल्स एकीकृत किए हैं और मैं फिर से लिखना नहीं चाहता हूं। – Dev

+0

ठीक है, तो शुभकामनाएं, मैं डेटाटेबल्स को भी देख रहा था और कुछ अन्य समान क्रूड सामान, लैज़िमोफ डाटाग्रिड के साथ समाप्त हुआ। –

उत्तर

-2

आप प्रलेखन की जाँच नहीं की है? क्योंकि यह वहाँ समझाया है:

public function getDatatable() { return Datatable::collection(User::all(array('id','name'))) ->showColumns('id', 'name') ->searchColumns('name') ->orderColumns('id','name') ->make(); } 
+0

मैं कस्टम सॉर्टिंग के बारे में पूछ रहा हूं, कॉलम ऑर्डर या कुछ और नहीं। आपके उत्तर में कस्टम सॉर्टिंग कहां है, कृपया मुझे बताएं। – Dev

+0

कस्टम सॉर्टिंग के साथ आपका क्या मतलब है? कृपया एक बेहतर स्पष्टीकरण या उदाहरण दें। – mimo

+0

https://www.datatables.net/plug-ins/sorting/currency - यह क्लाइंट एंड जेएस समाधान के लिए है, मैं सर्वर की तरफ देख रहा हूं। – Dev

0

नोट: इस Chumper/DataTable पैकेज का इस्तेमाल नहीं किया था, लेकिन यह jQuery datatables उपयोग करती हैं इसलिए कुछ काम का हो सकता है नहीं करता है।

यहां बताया गया है कि मैंने यह कैसे किया। यह एक परिदृश्य था जिसमें मेरी अमेरिकी फुटबॉल टीमों के साथ एक टेबल थी। प्रत्येक टीम एक सम्मेलन का सदस्य था, जो एक प्रभाग का हिस्सा था। टीमों को टीम का नाम, सम्मेलन या विभाजन द्वारा क्रमबद्ध किया जा सकता है। नीचे सर्वर-साइड कोड लागू करने के लिए उपयोग किया जाता है। इसके अलावा, उन्हें सम्मेलन या विभाजन द्वारा फ़िल्टर किया जा सकता है।

/* 
* Route::get('api/v1/teams-table', '[email protected]'); 
*/ 
public function dataTable() { 
    // get the input parameters 
    $i = Input::all(); 

    // parse the parameters and set default values 
    $draw = isset($i[ 'draw' ]) ? $i[ 'draw' ] : 1; 
    $start = isset($i[ 'start' ]) ? $i[ 'start' ] : 0; 
    $length = isset($i[ 'length' ]) ? $i[ 'length' ] : 10; 
    $search = isset($i[ 'search' ][ 'value' ]) && '' != $i[ 'search' ][ 'value' ] ? $i[ 'search' ][ 'value' ] : false; 
    $ordrby = isset($i[ 'order' ]) ? $i[ 'columns' ][ $i[ 'order' ][ 0 ][ 'column' ] ][ 'name' ] : ''; 
    $ordrdr = isset($i[ 'order' ]) ? $i[ 'order' ][ 0 ][ 'dir' ] : 'asc'; 
    $total = Team::count(); 
    $filter = $total; 


    // get the data 
    if ('' == $search) { 
     switch($ordrby) { 
      case 'name': 
       $teams = Team::with('conferences', 'logo', 'conferences.division') 
        ->skip($start) 
        ->take($length) 
        ->orderBy('name', $ordrdr) 
        ->get(); 
       break; 
      case 'conference': 
       $teams = Team::with('conferences', 'logo', 'conferences.division') 
        ->join('conference_team', 'conference_team.team_id', '=', 'teams.id')->join('conferences', 'conferences.id', '=', 'conference_team.conference_id') 
        ->orderBy('conferences.abbr', $ordrdr) 
        ->skip($start) 
        ->take($length) 
        ->get(); 
       break; 
      case 'division': 
       $teams = Team::with('conferences', 'logo', 'conferences.division') 
        ->skip($start) 
        ->take($length) 
        ->conference() 
        ->division() 
        ->orderBy('abbr', $ordrdr) 
        ->get(); 
       break; 
      default: 
       $teams = Team::with([ 'conferences', 'logo', 'conferences.division' ]) 
        ->skip($start) 
        ->take($length) 
        ->get(); 
     } 
    } else { 
     $teams = Team::with('conferences', 'logo', 'conferences.division') 
      ->skip($start) 
      ->take($length) 
      ->where('name', 'LIKE', '%' . $search . '%') 
      ->orWhereHas('conferences', function($q) use ($search) { 
       $q->where('abbr', 'LIKE', '%' . $search . '%') 
        ->orWhereHas('division', function($qu) use ($search) { 
         $qu->where('abbr', 'LIKE', '%' . $search . '%'); 
        }); 
      }) 
      ->get(); 
     $filter = Team::with('conferences', 'logo', 'conferences.division') 
      ->where('name', 'LIKE', '%' . $search . '%') 
      ->orWhereHas('conferences', function($q) use ($search) { 
       $q->where('abbr', 'LIKE', '%' . $search . '%') 
        ->orWhereHas('division', function($qu) use ($search) { 
         $qu->where('abbr', 'LIKE', '%' . $search . '%'); 
        }); 
      }) 
      ->count(); 
    } 

    // loop through the retrieved data and format it to be returned as JSON 
    $data = []; 
    foreach ($teams as $t) { 
     $show = URL::route('admin.team.show', $t->slug); 
     $edit = URL::route('admin.team.depth_chart', $t->slug); 
     $data[] = [ 
      'checkbox' => '<label><input type="checkbox" class="ace" value="' . $t->id . '" /><span class="lbl"></span></label>', 
      'logo'  => '<img src="' . $t->logo->filename . '" alt="' . $t->name . ' logo" height="40">', 
      'name'  => [ 
       'display' => link_to_route('admin.team.show', $t->name, [ $t->slug ]), 
       'filter' => $t->name, 
       'sort' => $t->name, 
      ], 
      'conference' => [ 
       'display' => link_to_route('admin.conference.show', $t->conferences[ 0 ]->abbr, [ $t->conferences[ 0 ]->slug ]), 
       'filter' => $t->conferences[ 0 ]->name . ' ' . $t->conferences[ 0 ]->abbr, 
       'sort' => $t->conferences[ 0 ]->abbr, 
      ], 
      'division' => [ 
       'display' => link_to_route('admin.division.show', $t->conferences[ 0 ]->division->abbr, [ $t->conferences[ 0 ]->division->slug ]), 
       'filter' => $t->conferences[ 0 ]->division->name . ' ' . $t->conferences[ 0 ]->division->abbr, 
       'sort' => $t->conferences[ 0 ]->division->abbr, 
      ], 
      'site'  => '<a target="_blank" href="' . $t->url . '">website <i class="fa fa-external-link"></i></a>', 
      'actions' => sprintf($this->actions, $show, $edit, $show, $edit), 
     ]; 
    } 

    $tdata = [ 
     'draw'   => $draw, 
     'recordsTotal' => $total, //consider caching or setting fixed value for this 
     'recordsFiltered' => $filter, 
     'data'   => $data, 
    ]; 

    return Response::json($tdata); 
} 

किसी भी किस्मत के साथ, आप इस स्थिति को अपनी स्थिति में फिट करने के लिए समायोजित कर सकते हैं। उम्मीद है की यह मदद करेगा!

-1

सुनिश्चित नहीं है कि custom sorting से आप हेडर पर क्लिक करके पंक्तियों को सॉर्ट करना चाहते हैं? यदि आपका यही मतलब है तो आप डेटाटेबल सेटिंग्स को परिभाषित करके क्लाइंट पक्ष पर परिभाषित कर सकते हैं।

oSettings = $("#{{$table->getId()}}").dataTable().fnSettings(); 
oSettings.aaSorting = [[6, 'desc']]; 

लेकिन अगर आप एक विशेष स्तंभ का डिफ़ॉल्ट छंटाई बनाए रखने के लिए जब datatable लोड हो जाए, तो

Datatable::table() 
     ->addColumn($theader)  // these are the column headings to be shown 
     ->setOptions('order', array([$ordercolumn ,"desc"])) 
     ->setUrl(route('route.name', $form_id)) 
     ->render() 

मुझे आशा है कि इस मदद करता है चाहते हैं।

0

यह है कि मैं इसे कैसे करता हूं

n.b. यह अनुकूलित नहीं है।

$response = array(); 
    $query = MyModel::query(); 

    $response['recordsTotal'] = MyModel::count(); 
    $response['draw'] = Input::get('draw', 0); 

    $query->where('searchField', 'LIKE', '%' . Input::get('search', array('value' => ''))['value'] . '%'); 
    $response['recordsFiltered'] = $query->count(); 

    $query->take(Input::get('length', 1)); 
    $query->offset(Input::get('start', 0)); 


    $columns = Input::get('columns'); 
    $orders = Input::get('order', []); 

    $data = $data->toArray(); 
    foreach($orders as $order){ 
     $idx = $order['column']; 
     $column = $columns[$idx]; 

     $orderFactor = 1; 
     if($order['dir'] == 'desc') 
      $orderFactor = -1; 
     $dname = $column['data']; 
     if(count($data)>0){ 
      if(isset($data[0][$dname])){ 
       usort($data, function($record1, $record2) use($dname, $orderFactor){ 
        // here you implement your custom sorting 
        // like if($dname === 'price') return compare_price($record1[$dname], $record2[$dname]) * $orderFactor; 
        // but I hope you're not storing prices as strings in your database. you won't need this custom sorting 
        // 
        return strcmp($record1[$dname], $record2[$dname]) * $orderFactor; 
       }); 
      } 
     } 
    } 
    $response['data'] = $data; 
    return Response::json($response); 

पश्चलेख: और अधिक या कम त्रुटि जाँच

laravel नियंत्रक समारोह (यह L5.2 लेकिन आसानी से डाउनग्रेड करने योग्य 4.2 करने के लिए) के बिना एक संपूर्ण कोड स्निपेट यह कोड मानता है कि डेटाटेबल कॉलम के 'डेटा' फ़ील्ड को आपके डेटाबेस में फ़ील्ड नाम के रूप में बिल्कुल नामित किया गया है। आप अपने datatable प्रदर्शित कॉलम होगा

function render_price(price, type, row) { 
     return price + ' USD'; 
    } 

इस तरह से:

columns: [ 
    { data: 'price', orderable: true, searchable: true, render: render_price }, 
    { data: 'anotherField' }, 
    [...] 
], 

render_function उदाहरण: तुम भी आप चाहते हैं के रूप में

datatable कॉलम datatable स्तंभ प्रस्तुत करना एक render_function का उपयोग करने की आवश्यकता होगी जिस तरह से आप चाहते हैं (उदाहरण के लिए मूल्य = 10.50 $)

और वे क्रमबद्ध

संबंधित मुद्दे