- 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": "http://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 tag afiseaza textul oblic?
<strong> <pre> <em>
<p>Cursuri, Jocuri, Anime: <em>www.MarPlo.net</em></p>
Care proprietate CSS defineste spatiul dintre continutul elementului si bordura lui?
margin padding position
h3 {
  padding: 2px 0.2em;
}
Clic pe metoda ce returneaza primul element indicat de selectorii specificati.
getElementsByName() querySelector() querySelectorAll()
// preia primul Div cu class="cls", si afiseaza continutul
var elm = document.querySelector("div.cls");
alert(elm.innerHTML);
Indicati variabila PHP ce contine datele din formular trimise cu method="post".
$_SESSION $_GET $_POST
if(isset($_POST["field"])) {
  echo $_POST["field"];
}
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) speak english".
I They We
We speak english.
- Noi vorbim engleza.
Indicati pronumele corespunzator celui din paranteza in propozitia: "(Noi) hablamos español".
Ellos Vosotros Nosotros
Nosotros hablamos español.
- Noi vorbim spaniola.
Paginare rezultate din Baza de date - Laravel tutorial

Last accessed pages

  1. Scripturi JavaScript (43)
  2. Formate text (320)
  3. Butterfly Kyodai (1387)
  4. Zuma Deluxe (1543)
  5. Verbe frazale din limba Engleza (305)

Popular pages this month

  1. Bubbles3 (2202)
  2. Gramatica limbii engleze - Prezentare Generala (1717)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (1563)
  4. Zuma Deluxe (1543)
  5. Butterfly Kyodai (1387)