2016-03-29 6 views
1

-ControllerWie Paginierung in Laravel zu setzen, ohne die gesamte Seite

//Pagination 
    $page = 1; 
    $perPage = 5; 
    $Reviews = DB::select($Reviews); 
    $currentPage = Input::get('page', 1) - 1; 
    $pagedData = array_slice($Reviews, $currentPage * $perPage, $perPage); 
    $Reviews = new Paginator($pagedData, count($Reviews), $perPage); 
    $Reviews->setPath($id); 

    $this->data['review_view'] = 'userreviews.reviews'; 
    $this->data['pages'] = 'hotelroom.detailed_page'; 

    return view($page, $this->data, compact('Reviews')); 

erfrischend verwende ich benutzerdefinierte Paginierung.

Und aus meiner Sicht verwende ich userreviews.blade.php, die in die detailed_page.blade.php & eingefügt wurde, wurde es als Hauptansicht Datei betrachtet.

Ansicht

//userreviews.blade.php 

    @foreach($Reviews as $rev) 
      //Displaying contents 
    @endforeach 
    <div class="pagination"> 
      <?php echo $Reviews->appends($_REQUEST)->render(); ?> 
    </div> 

//detailed_page.blade.php 

    <div class="review_view"> 
      @include($review_view) 
    </div> 

Diese meine Ansicht Dateien sind ..

Hier arbeitet die Paginierung richtig ..

Das Problem ist das, wenn ich die Paginierung Links klicken, um es mir nehmen auf die nächste Seite ..

Aber es aktualisiert die ganze Seite, und ich habe meine anderen Ergebnisse auf dieser Seite verloren.

Gibt es andere Möglichkeiten für die Paginierung, die die angegebene Ansicht file.Someone mich nur ändern helfen ..

Vielen Dank im Voraus ..

+0

Verwenden Sie Ajax dafür; – itzmukeshy7

+0

Wie soll ich das machen !!! .... –

+0

Haben Sie eine Ahnung von Ajax? [$ .ajax] (http://api.jquery.com/jquery.ajax/) und nur Datensätze zurückgeben und anzeigen, wo Sie möchten; – itzmukeshy7

Antwort

2

Erstellen Sie zunächst einen Container, in dem Sie die Ergebnisse angezeigt werden sollen. Erstellen Sie anschließend ein Blade-Subtemplate, das den gesamten Inhalt dieses Containers anzeigt. Verwenden Sie so etwas wie jQuery, um auf Klickereignisse zu warten und das nächste/vorherige Ergebnis zu erhalten. So etwas wie diese unten (pseudo, ungetestet)

In page.blade.php

<div id="results">@include('page_details')</div> 

In page_details.blade.php

@foreach($items as $item) 
    // your $item display.. 
@endforeach 

// return $from from your controller. It represents the current $_GET['from'] 
<span class="prev" data-from="{{ $from- 1}}">Previous</span> 
<span class="next" data-from="{{ $from + 1 }}">Next</span> 

in Ihrem JavaScript-Datei:

$(document).ready(function() { 
    $(document).on('click', '.prev, .next', function() { 
    $.ajax({ 
     // the route you're requesting should return view('page_details') with the required variables for that view 
     url: '/route/as/defined/in/routes-file?from=' + $(this).attr('data-from'), 
     type: 'get' 
    }).done(response) { 
     $('div#results').html(response); 
    } 
    }); 
}); 

Tackling Error 500 beim Senden von AJAX-Anfragen

Stellen Sie außerdem sicher, dass Sie beim Senden von Daten über Ajax keine Probleme mit der Token-Überprüfung (9 von 10 Fällen, wegen der Sie HTTP 500-Fehler erhalten) erhalten. Richten Sie ein Meta-Tag in Ihrem Master-Layout wie: <meta name="csrf-token" content="{{ crsf_token() }}">

Und fügen Sie Folgendes zu Ihrem Javascript sowie; Es sendet das aktuelle Token automatisch mit den Kopfzeilen mit jeder von Ihnen durchgeführten Ajax-Anfrage.

$.ajaxSetup({ 
    headers: { 
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
+0

Wo gebe ich die '$ .ajaxSetup ({.....});' –

+0

Ich setze es normalerweise direkt nach '$ (Dokument).bereit (Funktion() {' – Ben

+0

Sie sagten, dass sollte in der Jquery..Okay ich versuche dies ... :) –

Verwandte Themen