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
Ce tag se foloseste pentru a adauga liste in elemente <ul> si <ol>?
<dt> <dd> <li>
<ul>
 <li>http://coursesweb.net/html/</li>
 <li>http://www.marplo.net/html/</li>
</ul>
Care valoare a proprietatii "display" seteaza elementul ca tip bloc si afiseaza un punct in fata?
block list-item inline-block
.some_class {
  display: list-item;
}
Care instructiune JavaScript transforma un obiect in sir JSON.
JSON.parse() JSON.stringify eval()
var obj = {
 "courses": ["php", "javascript", "ajax"]
};
var jsonstr = JSON.stringify(obj);
alert(jsonstr);    // {"courses":["php","javascript","ajax"]}
Indicati clasa PHP folosita pentru a lucra cu elemente HTML si XML in PHP.
stdClass PDO DOMDocument
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>';
$dochtml = new DOMDocument();
$dochtml->loadHTML($strhtml);
$elm = $dochtml->getElementById("dv1");
echo $elm->nodeValue;    // CoursesWeb.net
Indicati forma de Prezent Continuu a verbului "to live" (a trai /a locui)
lived living liveing
I`m living here.
- Traiesc /Locuiesc aici.
Care este forma de Gerunziu (sau Participiu Prezent) a verbului "vivir" (a trai /a locui)?
viviĆ³ vivido viviendo
Estoy viviendo aquĆ­.
- Traiesc /Locuiesc aici.
Paginare rezultate din Baza de date - Laravel tutorial

Last accessed pages

  1. Proverbe, expresii si zicatori (23697)
  2. Stilizare tabele HTML cu CSS (8144)
  3. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (270965)
  4. Zilele saptamanii - Lunile anului - Anotimpurile - Engleza (28250)
  5. Creare si editare pagini HTML (84902)

Popular pages this month

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