Curs Php-mysql

- 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
Clic pe tag-ul care creaza celula in tabel.
<tr> <span> <td>
<table></tr>
  <td>Cell-1</td><td>Cell-2</td>
</tr></table>
Indicati proprietatea CSS care adauga o imagine pentru fundal
background-color background-image color
h3 {
  background-image: url("image.jpg");
}
Ce instructiune se foloseste la parcugerea elementelor unui Array?
for() [) object()
var arr = [1, "ab", "CoursesWeb.net"];
for(var i=0; i< arr.length; i++) { alert(arr[i]); };
Indicati functia PHP utilizata la parcurgerea elementelor unui Array asociativ.
for() foreach() if()
$arr =["k1"=>"v1", "k2"=>"v2", "k3"=>"v3");
foreach($arr AS $k => $v) { echo "<br/>". $k ." - ". $v; }
Care din urmatoarele cuvinte este sinonim cu "gentle" (bland)?
meek good beautiful
He is so kind and meek.
- El este atat de amabil si bland.
Care din urmatoarele cuvinte este sinonim cu "amable" (bland, prietenos)?
hermoso fuerte manso
Tu padre tiene un carácter muy manso.
- Tatal tau are un caracter foarte bland.
Paginare rezultate din Baza de date - Laravel tutorial

Last accessed pages

  1. Zilele saptamanii - Lunile anului - Anotimpurile - Engleza (28502)
  2. Gramatica limbii engleze - Prezentare Generala (217174)
  3. Caractere speciale - Entitati HTML (14183)
  4. Articolul din limba engleza - The article (70256)
  5. Cursuri Limba Rusa (5944)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (1223)
  2. Coduri pt culori (892)
  3. Cursuri limba engleza gratuite si lectii online (590)
  4. Gramatica limbii engleze - Prezentare Generala (522)
  5. Exercitii engleza - English Tests and exercises - Grammar (476)