wake-up-neo.net

Paginierung für die Suchergebnisse

Suchergebnisse für die Paginierung

Ich habe gerade mit Laravel angefangen und versuche, eine Suchfunktion mit korrekter Paginierung zu erstellen. Die Funktion funktioniert für Seite eins, aber auf Seite zwei nicht. Ich denke, es gibt die Ergebnisse nicht auf der nächsten Seite, aber ich finde keine Antwort.


dies ist meine Suchfunktion in IndexController:

public function search()
{
    $q = Input::get('search');

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}

das ist meine Route:

Route::post('search{page?}', '[email protected]');

dies ist die URL von Seite zwei:

/search?page=2

so zeige ich meine Paginierung:

{{ $product->appends(Request::get('page'))->links()}}

der Fehler:

MethodNotAllowedHttpException in RouteCollection.php line 218:

Fehler auf Anfrage erhalten.

Route:

Route::get('search/{page?}', '[email protected]');

Error:

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 780
at Router->findRoute(object(Request)) in Router.php line 610
at Router->dispatchToRoute(object(Request)) in Router.php line 596
at Router->dispatch(object(Request)) in Kernel.php line 267
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53

Ich hoffe, meine Frage ist klar und im richtigen Format. Vielen Dank im Voraus (sorry für mein schlechtes Englisch)


Antworten:

Am Ende habe ich die Antwort dieses Posts in Kombination mit Hilfe von this post verwendet

Ich habe eine Post-Funktion für die erste Suche und eine Get-Funktion für die folgenden Seiten verwendet. Dies war möglich, weil ich jetzt meine Suche nach der URL gebe.


EDIT:

  • fügte den Anfangsfehler hinzu.
  • Route::get Fehler hinzugefügt
  • antwort hinzugefügt
10
Casper Spruit

Wenn Sie Filter auf die nächste Seite anwenden möchten, sollten Sie sie wie folgt zu Ihrem Paginator hinzufügen:

$product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);
$product->appends(['search' => $q]);

Und ändern Sie Ihre Route vom Posting an, um Folgendes zu erhalten:

Route::get('search', '[email protected]');
20
Route::get('product', function () {
    $product= App\product::paginate(15);

    $product->setPath('custom/url');

});

Aussicht:

{{ $product->appends(['search' => Request::get('page')])->links() }}
3
Joci93
$searchdata =  \Request::get( 'inputTextFieldname' ); \make as global
$searchresult = Modelname::where ( 'blogpost_title', 'LIKE', '%' .$searchdata . '%' )->paginate(2);
return view( 'search', compact('searchresult') );

und in Ihrer Ansichtsseite 

{{$searchresult->appends(Request::only('inputTextFieldname'))->links()}}

machen Sie Ihren Weg, um Methode zu bekommen

Route::get('/search', ['as' => 'search', 'uses' => '[email protected]']);

dies wird gemacht, danke,

2

Ich gehe davon aus, dass Sie Seiten mit solchen URLs ändern möchten search/1, search/2? Zunächst sollte Ihre Route wahrscheinlich Route::post('search/{page?}') sein.

Ich bin nicht sicher, ob nur diese Änderung funktionieren wird, aber wenn nicht, müssen Sie die Seite so auflösen

public function search(\Illuminate\Http\Request $request, $page = 1)
{
    $q = $request->get('search');

    \Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
        return $page;
    });

    # going to next page is not working yet
    $product = Product::where('naam', 'LIKE', '%' . $q . '%')
        ->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
        ->paginate(6);

    return view('pages.index', compact('product'));
}
2
Skysplit

ein schneller Weg in Sicht (Laravel 5.7)

$product->appends(Request::all())->links();
1
ytdm

Wenn Sie ein Suchformular mit der GET-Methode verwenden, verwenden Sie diese Elemente, um die Paginierung in den Suchergebnissen zu erhalten.

 public function filter(Request $request)
    {        
        $filter = $request->only('name_operator','name_value','email_operator','email_value', 'phone_operator','phone_value',   'gender_value', 'age_operator','age_value');
        $contacts = $this->repo->getFilteredList(array_filter($filter));
        $contacts->appends($filter)->links(); //Continue pagination with results
        return view('dashboard::index', compact('contacts'))->withInput($request->all());
    }
0
Amit Shah

Für die Paginierung sollten Sie ein einfaches Formular erstellen:

<form action="{{URL::to('/search')}}" method="post">
    <input type="hidden" name="query"/>
    <select name="pages">
    @for($p = 1; $p < $products->lastPage(); $p++ )
        <option value="{{ $p }}">{{ $p }}</option>
    @endfor
    </select>
</form>

Paginierungsmethoden sind hier:

$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (Not available when using simplePaginate)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (Not available when using simplePaginate)
$results->url($page)
0
Kemal Y

in meinem fall habe ich laravel 5.7 installiert.

$perPage = $request->per_page ?? 10;

$data['items'] = User::where('name', 'like', '%'. $request->search . '%')
                         ->paginate($perPage)
                         ->appends(['search' => $request->search, 'per_page' => $request->per_page]);

    return view('users.index', $data);

und meine Ansichtsdateien Codes sind

für per_page Auswahlliste und Suche Bereich

<form role="form" class="form-inline" method="get" action='{{ url('/user') }}'>
 <div class="row">
  <div class="col-sm-6">
   <div class="dataTables_length">
     <label>Show
     <select name="per_page"
       onchange="this.form.submit()"
       class="form-control input-sm">
      <option value=""></option>
      <option value="10" {{ $items->perPage() == 10 ? 'selected' : '' }}>10
      </option>
      <option value="25" {{ $items->perPage() == 25 ? 'selected' : '' }}>25
      </option>
      <option value="50" {{ $items->perPage() == 50 ? 'selected' : '' }}>50
      </option>
     </select>
     entries
     </label>
    </div>
   </div>

<div class="col-sm-6">
 <div class="dataTables_filter pull-right">
  <div class="form-group">
   <label>Search: &nbsp;
   <input type="search" name="search" class="form-control input-sm"
   placeholder="Name" value="{{ request()->search }}">
   </label>
  </div>
 </div>
</div>

 

und mein Paginierungsgeneratorcode

{{ $items->appends(['search' => request()->search, 'per_page' => request()->per_page])->links() }}
0
sh6210