Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][inne][PHP]Laravel - sortowanie wyników
Forum PHP.pl > Forum > Przedszkole
Generic
Witam. Od pewnego czasu zacząłem uczyć się laravela. Załapałem mniej więcej podstawy, jednak mam problem z posortowaniem wyświetlanych wyników. Chciałbym dodać możliwość sortowania tak, jak wygląda to m.in. na portalach aukcyjnych gdzie użytkownik wybiera w jaki sposób chce uporządkować wyniki. Czy ktoś mógłby mi podpowiedzieć, a najlepiej podesłać jakiś tutorial gdzie opisane jest krok po kroku jak się do tego zabrać. Szukałem rozwiązań w dokumentacji i google jednak trafiam tam tylko na sortowanie gdzie z góry ustalone jest po jakiej kolumnie ma się to odbywać. Z góry dziękuję i pozdrawiam.
Generic
Działa tak jak tego oczekiwałem, ale czy jest możliwość, aby zamiast linków sortowac zawartość opcjami z selecta? Chcę aby cena rosnąco i malejąco stanowiła dwie różne opcje zamiast linku działającego na zasadzie togglera.

Witam, postanowiłem napisać to po swojemu i finalnie działa. Jednak chciałbym poznać opinie kolegów z większym doświadczeniem i czy tego typu rozwiązanie jest dobre. Poniżej wypunktowałem moje czynności.

1. Dodałem do folderu config plik zawierający tablicę w której zdefiniowałem tabele i sposób w jaki ma być sortowana.
2. W szablonie znalazł się standardowy formularz z menu wyboru w którym pętlą foreach zwróciłem parametry sortowania czyli kolumna i w jaki sposób sortować.
3. Dla przychodzącego requesta z formularza utworzyłem middleware, który zmienia wartość requesta na domyślną w przypadku próby przesłania wartości niewystępującej w pliku config (sytuacja, w której użytkownik ręcznie zmienia wartość select).
4. W kontrolerze sprawdzam czy istnieje request i sortuje na jego podstawie pobierane dane.

1. sort.php (config)
  1. <?php
  2.  
  3. return [
  4. 'created_at-desc',
  5. 'price-asc',
  6. 'price-desc'
  7. ];

2. sort-view.blade.php (view)
  1. <form method="get">
  2. <select name="sort">
  3. @foreach(config('sort') as $sort)
  4. <option value="{{ $sort }}" {{ $sort == Request::input('sort') ? 'selected="selected"' : '' }}>{{ $sort}}</option>
  5. @endforeach
  6. </select>
  7. </form>

3. sort.php (middleware)
  1. <?php
  2.  
  3. namespace App\Http\Middleware;
  4.  
  5. use Closure;
  6.  
  7. class Sort
  8. {
  9. /**
  10.   * Handle an incoming request.
  11.   *
  12.   * @param \Illuminate\Http\Request $request
  13.   * @param \Closure $next
  14.   * @return mixed
  15.   */
  16. public function handle($request, Closure $next)
  17. {
  18. $by = config('sort');
  19.  
  20. if($request->input('sort') != null && !in_array($request->input('sort'), $by)) {
  21. $request->replace(array('order' => $by[0]));
  22. }
  23.  
  24. return $next($request);
  25. }
  26. }

4. SortController.php (controller)
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Data;
  6. use App\Sort;
  7. use Request;
  8.  
  9. class OrderController extends Controller
  10. {
  11. public function sort()
  12. {
  13. $sort = explode('-', Request::input('sort'));
  14.  
  15. if(Request::input('sort')) {
  16. $data = Data::all()->orderBy($sort[0], $sort[1])->get();
  17. } else {
  18. $data = Data::all()->get();
  19. }
  20.  
  21. return view('sort-view', compact('data'));
  22. }
  23. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.