Diğer GET parametrelerini içermeyen Laravel Sayfalama bağlantıları


105

Eloquent'i Laravel 4'ün Pagination sınıfıyla birlikte kullanıyorum.

Sorun: URL'de bazı GET parametreleri olduğunda, örneğin:, http://site.com/users?gender=female&body=hotüretilen sayfalandırma bağlantıları yalnızca pageparametreyi içerir, başka hiçbir şey içermez .

Bıçak Şablonu

{{ $users->link() }}

Bunun ->append()için bir işlev var , ancak GET parametrelerinin kaç tane olduğunu bilmediğimizde, blade şablonumuzu karıştırmadan append()bütün bir ifkod yığınını sayfalandırılmış bağlantılara diğer GET parametrelerini dahil etmeyi nasıl kullanabiliriz ?

Yanıtlar:


123

DÜZENLEME: Connor'ın Mehdi'nin cevabıyla yaptığı yorum, bunun işe yaraması için gereklidir. İkisine de açıklamaları için teşekkürler.

->appends()Bir diziyi parametre olarak kabul edebilir, geçebilirsin Input::except('page'), bu hile yapmalı.

Misal:

return view('manage/users', [
    'users' => $users->appends(Input::except('page'))
]);

37
Sadece bu şekilde gelen diğer Google çalışanlarını not etmek için - artık çoğul appends, değil append . Doğru zincirleme şöyle bir şey olurdu$query->appends($foo)->links();
Connor Peet

6
Daha $query->appends(Input::except('page'))->links();iyi çalıştığını buldum . Aksi takdirde, bir sayfayı tıkladığınızda sayfa değişkeni güncellenmedi. Laravel 4.1.24.
bitlather

... ve sonra Mehdi'nin çözümünü görmek için aşağı kaydırdım.
bitlather

2
LARAVEL 5: {!! $myItems->appends(Input::except('page'))->render() !!}
ecairol

2
Laravel 5.2'de Giriş yerine İstek kullanmalısınız
Christophvh

105

Bu kodu Laravel 5'te kullanmanız gerektiğini düşünüyorum. Ayrıca bu sadece parametrelerle pagedeğil diğer parametrelerle de çalışacaktır :

$users->appends(request()->input())->links();

Şahsen, elimden geldiğince kullanmaktan kaçınmaya çalışıyorum Facades. Global yardımcı işlevleri kullanmak daha az kod ve daha zariftir.

GÜNCELLEME:

InputLaravel v6 + 'da kullanımdan kaldırıldığı için Facade'i kullanmayın


2
Bu, laravel 5.6 için çalıştı, kabul edilen cevap çözümünü kullanmak benim için bir hataya neden oldu.
Muhmmad Aziz

1
Ben de bunu bir 5.3 projesinde başarıyla uyguladım; Ben de bu basit yöntemi tercih ediyorum
kjones

3
Ayrıca, except('page')bu çözümü kullanmanıza gerek olmadığını fark ettim .
BakerStreetSystems

1
Çok yararlı. Teşekkürler
Viraj Amarasinghe

40

Unutmayın , açtığınız her sayfada Input::all()önceki ?page=değerleri tekrar tekrar içerecektir !
örneğin, ?page=1içerdeyseniz ve bir sonraki sayfayı açarsanız, o açılacaktır ?page=1&page=2
Yani son değer sayfası, gördüğünüz sayfa olacaktır! görmek istediğin sayfa değil

Çözüm: kullanın Input::except(array('page'))


40

Kullanabilirsin

->appends(request()->query())

Denetleyicideki örnek:

$users = User::search()->order()->with('type:id,name')
    ->paginate(30)
    ->appends(request()->query());

return view('users.index', compact('users'));

Görünümdeki örnek:

{{ $users->appends(request()->query())->links() }}

3
Bu, Mohamed Said (Laravel çalışanı) tarafından önerilen yoldur, bkz: github.com/laravel/framework/issues/…
Roy,

1
@Roy'un söylediği + daha iyi örnekler yüzünden en iyi yanıtın bu olduğunu düşünüyorum. Ayrıca Controller örneğinde + View örneğine sahiptir.
maky

2
Benim için çalıştı. +1
Manoj Kumar

1
Bu en iyi çözüm, benim için de işe yaradı
Jithin

28

Değil append()ama appends() Öyleyse, doğru cevap:

{!! $records->appends(Input::except('page'))->links() !!}

11

LARAVEL 5

Görünüm aşağıdaki gibi bir şey içermelidir:

{!! $myItems->appends(Input::except('page'))->render() !!}


5

Sayfa dışındaki tüm giriş parametrelerini korumak için bu yapıyı kullanın

{!! $myItems->appends(Request::capture()->except('page'))->render() !!}

Neden?

1) böyle bir talebe eklenen her şeyi çıkarırsınız

  $request->request->add(['variable' => 123]);

2) işlev için girdi parametresi olarak $ request'e ihtiyacınız yok

3) "sayfayı" hariç tutuyorsunuz

PS) ve Laravel 5.1 için çalışıyor


5

Laravel 7.x, paginator'a yeni bir yöntem ekledi:

->withQueryString()

Böylece şu şekilde kullanabilirsiniz:

{{ $users->withQueryString()->links() }}

7.x'in altındaki laravel için:

{{ $users->appends(request()->query())->links() }}

Vay canına, tek bir satır bile şaşırtıcı. Dokümanları özledim. 7.x aşk olsa da
MR_AMDEV

2 yaklaşım sağlıyorsunuz.Lütfen bunları birbirinden
ayırın

En iyi cevap.
Yapabilseydim

1
Kaputun arkasındaki @MR_AMDEV her ikisi de aynı. Laravel onu en son sürümüne kabul etti.
Rikesh Shrestha

4

Bunu Görüntüleme Sayfanıza Ekleyin

 $users->appends(Input::except('page'))

4

bıçakta laravel 5 veya daha büyük olanlar için:

{{ $table->appends(['id' => $something ])->links() }}

ile geçilen öğeyi alabilirsiniz

$passed_item=$request->id;

ile test et

dd($passed_item);

$ bir şey değeri almalısın


0

Sayfalandırma için de sayfa numarasını iletin. Bunun gibi bir şey

$currentPg = Input::get('page') ? Input::get('page') : '1';
    $boards = Cache::remember('boards'.$currentPg, 60, function(){ return WhatEverModel::paginate(15); });

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.