- Paginare rezultate cu Eloquent
- Afisare rezultate paginate
- Metode ale instantei de paginare
- Personalizare link-uri pentru paginare

Framework-ul Laravel are un sistem de paginare integrat cu constructorul SQL si Eloquent, ce ofera un sistem de paginare al inregistrarilor din baza de date usor de folosit.

Paginare cu Constructor SQL

Modul cel mai simplu de paginare a inregistrarilor din baza de date este prin folosirea metodei paginate() la Constructorul SQL sau la interogare cu Eloquent.
Metoda paginate() preia un argument: numarul de elemente ce trebuie afisate pe pagina. Apoi, seteaza automat limita si offset-ul in functie de pagina curenta.
Pagina curenta cu rezultate paginate e detectata prin valoarea numarului din adresa HTTP, care e automat adaugat in link-urile de paginare.

- Exemplu de controller pentru afisare 20 elemente pe pagina:
<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class PagesController extends Controller{
  //Shows paginated results
  //@return a view
  public function index(){
    $pages = DB::table('table_name')->paginate(20);

    return view('pages.index', ['pages'=>$pages]);
  }
}
- Puteti apela paginate() dupa ce definiti si alti parametri pt. interogarea SQL, precum clauze where() sau DB:raw().
$pages = DB::table('table_name')->where('visits', '>', 100)->paginate(20);

$pages = DB::table('table_name')->select(DB::raw('*, DATE_FORMAT(dtreg, "%Y-%m-%d") as dtreg'))->paginate(20);

Paginare rezultate cu Eloquent

Puteti folosi metoda paginate() si cu Eloquent. Syntaxa e asemanatoare:
$users = App\User::paginate(20);

$users = User::where('votes', '>', 100)->paginate(20);

Afisare rezultate paginate

Rezultatele returnate de metoda paginate() pot fi parcurse ca si un array, (de exemplu cu foreach()).
Pentru a afisa link-urile de paginare care sunt create automat, folositi metoda $pages->links() (aici, $pages reprezinta obiectul returnat de metoda paginate()).
Puteti afisa rezultatele si link-urile paginarii in Blade template:
<div class="container">
@foreach($pages as $page)
  {{ $page->id }} - {{ $page->title }}
@endforeach
</div>

{{ $pages->links() }}
- Metoda $pages->links() returneaza o lista <ul> cu link-urile de paginare, compatibil cu framework-ul Bootstrap.

Metoda simplePaginate()

Daca vreti sa afisati doar link-uri "Next" si "Previous" in view (fara link-uri pt. fiecare numar de pagina), puteti folosi metoda simplePaginate(), care efectueaza o interogare mai rapida.
//with query builder
$users = DB::table('users')->simplePaginate(20);
//or
$users = DB::table('users')->where('votes', '>', 100)->simplePaginate(20);

//with Eloquent
$users = User::simplePaginate(20);
//or
$users = User::where('votes', '>', 100)->simplePaginate(20);

Personalizare adresa URI de paginare

Daca vreti ca paginatorul sa creeze link-uri de forma: //example.com/custom/url?page=N, folositi metoda withPath(), cu un sir "custom/url" ca argument.
Route::get('pages', function(){
  $pages = DB::table('table_name')->paginate(20);

  $pages->withPath('custom/url');
  //
});
- Apoi folositi {{ $pages->links() }} in template.

Ca sa adaugati siruri la fiecare link de paginare, aplicati metoda appends().
- De exemplu, pt. a adauga sirul "sort=votes" in fiecare link al paginarii, se poate folosi urmatorul cod:
{{ $pages->appends(['sort' => 'votes'])->links() }}
Daca doriti sa adaugati un "fragment hash", se foloseste metoda fragment().
- De exemplu, adaugam '#bip' la sfarsitul fiecarui link de paginare:
{{ $pages->fragment('bip')->links() }}

Metode ale instantei de paginare

Fiecare obiect paginator (returnat de metoda paginate()) contine metode pentru informatii despre paginare:

Returnare rezultate paginate ca JSON

Pentru a returna rezultatele date de metoda paginate() in format JSON, puteti folosi metoda toJson():
public function index(){
  $pages = DB::table('table_name')->paginate(15);

  return $pages->toJson();
}
Sirul JSON de la paginator va contine informatii precum: total, pagina_curenta, ultima_pagina, si altele.
Array-ul cu elementele paginate e in proprietatea "data" in obiectul JSON.
- Codul de mai sus va returna un JSON ca acesta:
{
  "total": 50,
  "per_page": 15,
  "current_page": 1,
  "last_page": 4,
  "next_page_url": "https://coursesweb.net?page=2",
  "prev_page_url": null,
  "from": 1,
  "to": 15,
  "data":[
    {
      // Result Object of first item
    },
    {
      // Result Object of second item
    }
  ]
}

Personalizare link-uri pentru paginare

Codul HTML returnat cu link-urile de paginare e compatibil cu framework-ul Bootstrap.
Ca sa creati propriul cod HTML pentru aceste link-uri, faceti un fisier view: resources/views/pagination/default.blade.php cu codul de paginare personalizat, si adaugati numele fisierului view ('pagination.default') ca argument la metoda links().
- De exemplu, acesta este template-ul implicit pentru paginare in Laravel:
@if($paginator->hasPages())
  <ul class="pagination">
    {{-- Previous Page Link --}}
    @if($paginator->onFirstPage())
      <li class="disabled"><span>&laquo;</span></li>
    @else
      <li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
    @endif

    {{-- Pagination Elements --}}
    @foreach($elements as $element)
      {{-- "Three Dots" Separator --}}
      @if(is_string($element))
        <li class="disabled"><span>{{ $element }}</span></li>
      @endif

      {{-- Array Of Links --}}
      @if(is_array($element))
        @foreach($element as $page => $url)
          @if($page == $paginator->currentPage())
            <li class="active"><span>{{ $page }}</span></li>
          @else
            <li><a href="{{ $url }}">{{ $page }}</a></li>
          @endif
        @endforeach
      @endif
    @endforeach

    {{-- Next Page Link --}}
    @if($paginator->hasMorePages())
      <li><a href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
    @else
      <li class="disabled"><span>&raquo;</span></li>
    @endif
  </ul>
@endif
- Creati un fisier php: resources/views/pagination/default.blade.php, si copiati codul de mai sus in acel fisier. Modifiati apoi continutul din "pagination/default.blade.php" dupa cum doriti.
- Apoi, afisati link-uri de paginare in template folosind acest cod:
{{$results->links('pagination.default')}}
De asemenea, puteti sa transmiteti date aditionale la view-ul de paginare:
{{$results->links('pagination.default', ['name'=>$value])}}
Un alt mod de a personaliza view-ul de paginare e prin exportare in directorul resources/views/vendor/ folosind comanda artisan vendor:publish in Command-Line-Interface:
php artisan vendor:publish --tag=laravel-pagination
Aceasta instructiune va plasa view-ul in directorul "resources/views/vendor/pagination/". Apoi, editati fisierul "default.blade.php" ca sa modificati codul HTML de paginare.
- Fisierul "simple-default.blade.php" e pentru link-urile de paginare returnate de metoda simplePaginate().


- Documentatie: Laravel - Database: Pagination

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care atribut specifica metoda HTTP de trimitere (GET, POST) a datelor din formular?
action method value
<form action="script.php" method="post"> ... </form>
Ce proprietate CSS adauga umbra la chenar?
background-image box-shadow border-radius
#id {
  background-color: #bbfeda;
  box-shadow: 11px 11px 5px #7878da;
}
Clic pe functia care elimina primul element dintr-un array?
pop() push() shift()
var fruits = ["mar", "cireasa", "banana"];
fruits.shift();
alert(fruits.length);           // 2
Indicati functia cu care se poate verifica daca un anumit modul e instalat in PHP.
function() filetype() extension_loaded()
if(extension_loaded("PDO") === true) echo "PDO este valabil."
Alegeti verbul auxiliar corect care trebuie in propozitia: " ... I listen to music?".
has have Can
 Can I listen to music?
- Pot asculta muzica?
Alegeti verbul corect care trebuie in propozitia: "Me ... las frutas dulces"
están gustan gusta
Me gustan las frutas dulces.
- Imi plac fructele dulci.
Paginare rezultate din Baza de date - Laravel tutorial

Last accessed pages

  1. Expresii cu Tener (997)
  2. Verbe modale 2 - Teste incepatori (4130)
  3. Pronumele in limba engleza - Pronouns (27000)
  4. Afisare si chenare din CSS la elemente HTML (1864)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (57884)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (635)
  2. Curs HTML gratuit Tutoriale HTML5 (536)
  3. Curs si Tutoriale JavaScript (437)
  4. Curs PHP MySQL, Tutoriale si Scripturi PHP (392)
  5. Curs CSS Online Tutoriale CSS3 (372)