9.10.2. Drupal Fields API. Field Formatter: prikaz podataka polja na stranici
U ovom članku razmotrićemo Field Formatter-e, koji nam omogućavaju da uređujemo prikaz polja i prikazujemo ih na stranici.
U prethodnim člancima smo kreirali tip polja Link, u ovom članku ćemo pogledati kako se ta polja prikazuju na stranici i koja klasa je za to odgovorna. Svako polje koje dodate putem Drupala može se prikazati na stranici i uređivati njegova podešavanja na stranici Manage display.
U koloni Format možete izabrati kako će se polje prikazivati. Ova kolona je formirana zahvaljujući klasama Field Formatter. Pogledajmo klasu iz modula Link, koja prikazuje link na stranicu:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkFormatter.php
Annotacija klase pokazuje kom tipu polja ovaj formatter pripada.
/**
* Plugin implementation of the 'link' formatter.
*
* @FieldFormatter(
* id = "link",
* label = @Translation("Link"),
* field_types = {
* "link"
* }
* )
*/
U ovom fajlu nas pre svega zanima metoda viewElements()
, koja je odgovorna za ispis podataka na stranici. Obratite pažnju da formatter ne šalje zahteve bazi podataka, on uzima podatke iz promenljive $items
. Renderovani podaci iz entiteta se prosleđuju u $items
. Tako imamo podelu odgovornosti klasa za unos podataka Field Widget, skladištenje podataka Field Storage i prikaz podataka Field Formatter. Ovo je veoma zgodno jer možete keširati podatke na različitim nivoima. Na primer, ako se promeni prikaz ili podešavanja Field Formatter-a, nema potrebe da se briše keš čvorova jer se podaci ne menjaju, već samo njihov prikaz. Takođe je zgodno za dodavanje i menjanje funkcionalnosti. Ako je potrebno samo promeniti prikaz, dodate novi Field Formatter za određeni tip polja i napišete svoj prikaz.
Klasa LinkFormatter
ima i metodu settingsForm()
, koja je odgovorna za konfiguraciju formatter-a na stranici Manage display. Kroz Form API možete dodati polja za podešavanje formatter-a, koja će biti sačuvana u konfiguraciji.
Modul Link ima još jedan formatter:
core/modules/link/src/Plugin/Field/FieldFormatter/LinkSeparateFormatter.php
On nasleđuje običan LinkFormatter
, ali sa jednom razlikom - povezan je poseban template za ovaj formatter:
core/modules/link/templates/link-formatter-link-separate.html.twig
Na taj način, HTML za prikaz polja se dobija prolaskom kroz template. Formatter samo formira polje $element
, gde se kroz $delta
upisuju podaci za svaku vrednost višestrukog polja.
Kao što vidite, Field API je prilično jednostavan i zgodan za korišćenje. U sledećem članku ćemo napisati sopstveni tip polja sa Storage, Widget i Formatter.