AJAX Paginierung mit Laravel
Habe ich diese Sichtweise genannt posts.blade.php
die wird enthalten in home.blade.php
:
<div id="posts">
@foreach ($posts as $post)
<div class="list-item clearfix">
<div class="content">
<img src="{{ URL::to($post->thumbnail) }}" alt="" />
<h1>{{{ $post->title }}}</h1>
</div>
<div class="score">{{ $post->rating }}</div>
</div>
@endforeach
<div id="pagination">{{{ $posts->links() }}}</div>
</div>
Wenn ein Nutzer nach bestimmten posts, die Steuerung ist postSearch()
- Funktion liefert eine JSON-Antwort:
function postSearch()
{
$posts = $posts->select(...)->where(...)->orderBy(...)->paginate(5); //Search posts
return Response::json(View::make('includes.posts', ['posts' => $posts])->render());
}
Und jQuery fügt die HTML-Datei auf der #posts
div:
$('#search').submit(function(e) {
e.preventDefault();
var form = $(this);
$.post(form.attr('action'), form.serialize(), function(data) {
$('#posts').html(data);
});
});
Dieser funktioniert perfekt. Aber jetzt wenn ich auf eine Paginierung link, die Seite wird neu geladen und meine Suchergebnisse sind Weg (logisch). Wie kann ich den Seitenumbruch solche posts? Ich habe gelesen,diese, diese und diese Artikel, aber ich verstehe nicht, wie es zu implementieren.
Bearbeiten
Dies ist mein jQuery für die Paginierung so weit:
$('#posts').on('click', '.pagination a', function(e) {
e.preventDefault();
var url = $(this).attr('href'),
page = url.split('page=')[1],
data = $('#search').serializeArray();
data.push({page: page}); //Add page variable to post data
console.log(data);
$.post($('#search').attr('action'), data, function(data) {
$('#posts').html(data['posts']);
});
});
Dies ist Daten senden, wenn ich auf eine Paginierung link (Seite 2):
Leider passiert nichts, die posts von Seite 1 weiterhin zeigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht sehr vertraut mit der Paginierung in Laravel aber die Beurteilung von den links, die Sie aufgelistet, es sieht nicht allzu schwer. Dieser code ist ungetestet, aber...
Update
Im Fall der Seitenumbruch links falsch sind (wie die waren für die OP) bauen Sie die url selbst.
Nehmen Sie einfach die url, die Sie möchten, und fügen Sie
?page=#number
zu.http://localhost:8080/laravel/laravel/public?page=2
.$('#search').attr('action')+'?page='+page
if ($(this).attr('href') == '#')
check ist nicht notwendig, da die aktuelle Paginierung link ist nicht anklickbar.Habe ich das perfekte Werkzeug für den job. Bitte schauen Sie sich das repo https://github.com/themightysapien/ajaxtable
Bitte die Dokumentation Lesen, es ist sehr einfach zu bedienen und ist speziell für laravel. Alles, was Sie tun müssen, ist die Rückgabe das Ergebnis im folgenden Beispiel.
Erforderlichen Dateien hinzufügen
Initialisieren Sie Ihre ajax-url durch Daten-requestUrl Attribut in der Tabelle.
Hinzufügen eines id="paginationWrapper" div auf Ihrer Seite, wo Sie möchten, dass Ihre Seitenzählung erscheinen.
Wenn Sie irgendwelche Probleme haben, führen Sie das repo in Ihrem lokalen server ein und finden Sie die Quelle für html-markups und den plugin-Optionen.
Bin ich mit folgenden js, um Daten auf "href" klicken.
Für eine Vollständige Beispiel können Sie die http://www.tutsway.com/laravel-ajax-pagination-example.php.
Beispiel für die post in einem blog, lösen Sie den Seitenumbruch erneut auf Taste "löschen":
(sinple foreach-aber Sie müssen ein id-panel und button und eine Klasse button und verwenden Sie $post->id zu definieren)
Den trick endlich nicht rufen Sie die view/controller mit Paginierung (), aber die Ansicht ändern mit javascript, wie Sie wollen.
endlich der Ansicht javascript:
Controller zerstören-Funktion (Hinweis: Sie senden $post->id als Daten an ajax -, es wird verwendet, um zu definieren Selektoren zu verbergen panel der Beitrag, den Sie löschen):
In javascript Letzte Funktion "Standort.reload()" ist, um zu berechnen, flash-Mitteilung.