Tpl
Seznam a popis elementů základní šablony (pclib\Tpl).
Definice elementu v sekci <?elements ... ?> šablony vypadá takto: typ nazev atributy
Každý element může obsahovat jeden nebo více atributů, s nebo bez parametru: atribut "parametr"
V těle šablony ho vypíšeme jako {nazev}, přičemž některé typy elementů mohou mít modifikátory: {nazev.modifikator}
Pro kterékoliv pole šablony lze použít následující atributy:
| Atributy |
| noescape |
Pole nebude escapovat html |
| noprint |
Pole nebude zobrazené (lze zapnout pomocí $tpl->enable('pole')) |
| onprint "callback" |
Pro výpis bude použita uživatelsky definovaná funkce callback (standardní element handler se nevolá) |
| default "string" |
Implicitní hodnota, která se použije, pokud je pole prázdné |
| Modifikátory |
| {pole.value} |
Prostá hodnota pole bez jakýchkoliv úprav definovaných v elements |
👁 string description noescape default "Popis není k dispozici"
Elementy a atributy
| Běžný text |
| Atributy |
| size "n" [tooltip] |
Ořízne text na n znaků ("tooltip" zobrazí celý text v tooltipu po najetí myší) |
|
| date | date "format" |
Formátovaný datum z databáze |
Default format: "d.m.Y" |
| format "nHuls" |
Formátovaný řetězec: n:nl2br, H:strip_tags, u:uppercase, l:lowercase, s:addslashes |
|
👁 string title size "20" tooltip
👁 string created_at date "d.m.Y H:i"
| Formátované číslo, např. 1.200,50 |
| Atributy |
| format "dpt" |
d: počet desetinných míst, p: znak pro desetinnou čárku, t: oddělovač tisíců |
👁 number price format "2,."
| Blok ohraničující část šablony. Lze ho skrýt, nastavit hromadně hodnoty nebo atributy polí v něm. |
| Modifikátory |
| {block name}...{/block} |
Ohraničuje oblast |
👁 block address noprint
| HTML odkaz. |
| Atributy |
| url | route "string" |
Url nebo route odkazu |
| lb "string" |
Text odkazu |
| popup | popup "parametry" |
Otevře odkaz v popup okně. Volitelné parametry jsou velikost a pozice popup okna, např. "800x600", "800x600+500+300" |
| confirm "dotaz" |
Zobrazí javascript confirm dialog s dotazem |
| html_🔹 "value" |
Nastaví html atribut 🔹 na hodnotu "value" - např. html_class "link-primary" → <a class="link-primary"> |
| Modifikátory |
| {pole.url} |
Vypíše url odkazu |
| {pole.js} |
Vypíše javascript kód na přesměrování na odkaz |
👁 link lnedit lb "Editovat" route "products/edit/id:{id}"
| Vloží podšablonu a sloučí její elementy s aktuální šablonou. |
| Atributy |
| file "path" |
Cesta k vkládané šabloně |
👁 include agreement file "tpl/partial/agreement.tpl"
| Vloží výstup action metody controlleru. |
| Atributy |
| route "route" |
Routa akce jejíž výstup se vloží do šablony. Může obsahovat parametry. |
👁 action title_image route "catalog/image/id:{id}"
| Vypíše lookup (číselníkové) pole: hodnotu id přeloží na label podle specifikace. |
| Atributy |
| list | query | lookup "string" |
Zdroj vazby id:label může být textový seznam, sql dotaz nebo číselník |
| field "name" |
Hodnota id se bude získávat z pole "name". |
| bitfield |
Hodnota je uložená jako bitfield (např. pole checkboxů ve formuláři) a může odpovídat více možnostem. |
| notranslate |
Číselník nebude zahrnutý mezi texty k překladu. |
| K formátování výstupu lze použít i atributy jako u string elementu - např. "size". |
👁 bind status lookup "order_status"
👁 bind published list "1,ano,2,ne"
👁 bind vendor query "select id,name from vendors" size "30" tooltip
Grid
Seznam a popis elementů datagridu (pclib\Grid)
Pro kterékoliv pole (sloupec) datagridu lze použít následující atributy
| Atributy |
| noescape |
Pole nebude escapovat html |
| noprint |
Pole nebude zobrazené (lze zapnout pomocí $tpl->enable('pole')) |
| lb "string" |
Popisek sloupce na který lze kliknutím řadit |
| sort |
Zapne řazení sloupce |
| skip |
Tento sloupec nebude vypsaný v elementech {grid.fields} a {grid.labels} |
| Modifikátory |
| {sloupec.lb} |
Popisek sloupce (s možností řazení) |
| {sloupec.value} |
Prostá hodnota pole bez jakýchkoliv úprav definovaných v elements |
👁 string title lb "Název produktu" sort
Elementy a atributy
| Hlavička šablony, definuje parametry platné pro celý grid. |
| Atributy |
| name "string" |
Název gridu, musí být unikátní pro každý grid na stránce |
| url | route "string" |
Url nebo route pro generování stránkovacích odkazů gridu, v případě, že standardně generované odkazy nevyhovují. |
| Modifikátory |
| {grid.labels} |
Vypíše popisky (lb) všech polí gridu jako řádek tabulky |
| {grid.fields} |
Vypíše všechny pole gridu jako řádek tabulky |
| {block items} ... {/block} |
Tento blok se vypíše pro každý záznam gridu |
👁 class grid name "products"
| Navigátor (stránkovátko) - v základním nastavení obsahuje seznam odkazů na stránky. |
| Atributy |
| size "number" |
Počet stránek zobrazených ve stránkovátku |
Default: 10 |
| pglen "number" |
Délka stránky (počet záznamů na stránku) gridu |
Default: 20 |
| ul |
Generuje navigátor jako html seznam <ul> - vhodnější pro použití s css frameworkem bootstrap |
|
| Modifikátory |
| {pager} |
Vypíše implicitní navigátor |
|
| {pager.first} |
Odkaz na první stránku |
|
| {pager.last} |
Odkaz na poslední stránku |
|
| {pager.prev} |
Odkaz na předchozí stránku |
|
| {pager.next} |
Odkaz na další stránku |
|
| {pager.pages} |
Odkazy na stránky |
|
| {pager.page} |
Číslo aktuální vybrané stránky |
|
| {pager.all} |
Odkaz, který zobrazí všechny řádky gridu na jedné stránce |
|
| {pager.visible} |
Vrací text "visible" pokud má grid více stránek, jinak "hidden". Lze využít k css skrývání pageru. |
|
| {pager.maxpage} |
Počet stránek gridu |
|
| {pager.total} |
Počet řádků gridu |
|
👁 pager pager pglen "100"
Seznam a popis elementů formuláře (pclib\Form)
Pro kterékoliv pole formuláře lze použít následující atributy:
| Atributy |
| lb "popisek" |
Popisek pole |
| noprint |
Pole nebude zobrazené |
| noedit |
Do pole nelze zapisovat (disabled) |
| nosave |
Pole se nebude ukládat do databáze |
| default "string" |
Implicitní hodnota pole |
| required |
Pole je povinné |
| html_🔹 "value" |
Nastaví html atribut 🔹 na hodnotu "value" - např. html_class "btn btn-primary" → <button class="btn btn-primary"> |
| Modifikátory |
| {pole.value} |
Prostá hodnota pole |
| {pole.lb} |
Popisek (label) pole |
| {pole.err} |
Chybové (validační) hlášení pole, pokud je nastavené. |
Elementy a atributy
| Hlavička šablony, definuje obecné parametry pro formulář. |
| Atributy |
| name "string" |
Název formuláře |
| action "url" | route "string" |
Url nebo route kam bude formulář odeslán. |
| jsvalid | html5 |
Zapne javascript / html5 validaci polí formuláře. Možnost "jsvalid" vyžaduje skript pclib.js |
| get |
Formulář bude odeslán s použitím HTTP metody GET (implicitně se používá POST) |
| noformtag |
Nevygeneruje hlavičku a patičku formuláře (tag <form>) |
| Modifikátory |
| {form.fields} |
Vypíše všechny pole formuláře jako tabulku |
👁 class form route "products/id:{GET.id}" html5
| Vytvoří tag <input> |
| Atributy |
| size "size" | size "size/maxlength" |
Velikost a maxlength atributy inputu - např. size "10/100" |
| hidden |
Vytvoří input type=hidden |
| color |
Vytvoří input type=color |
| range |
Vytvoří input type=range |
| email |
Povolí pouze platnou email adresu |
| number | number "strict" |
Validuje celé číslo. Při zadaném "strict" nedovolí nečíselnou hodnotu zadat, jinak vstup konvertuje na integer |
| date | date "format" |
Datumové pole. Formátuje databázový datum do čitelné podoby. (Implicitní formát je 'd. m. Y') |
| password | password "minlength" |
Vytvoří input type=password |
| file [into "path", size_mb "size", accept "file-types"] |
Vytvoří input type=file. Lze zadat cestu k uložení souboru, max. velikost v MB a akceptované typy souborů. |
| pattern "regex" |
Validuje input proti regulárnímu výrazu |
| hint "Text" |
Zobrazí v prázdném inputu text nápovědy (placeholder) |
👁 input amount size "4" number lb "Počet kusů" default "1" required
👁 input image file lb "Obrázek" size_mb "4.0" accept "image/*"
| Vytvoří tag <textarea> |
| Atributy |
| size "{sloupce}x{radky}" |
Velikost textarea |
| maxlength "number" |
Maximální počet znaků |
| hint "Text" |
Zobrazí v prázdném inputu text nápovědy (placeholder) |
👁 text description lb "Popis:" size "50x4" required
| Vytvoří tag <select> |
| Atributy |
| list | query | lookup "string" |
Zdroj položek selectu může být: ❶ textový seznam, sql dotaz nebo číselník |
| datasource "callback" | datasource "action" |
nebo: ❷ funkce nebo akce controlleru |
| size "n" |
Počet řádků selectu |
| multiple |
Lze vybrat víc než jednu možnost |
| emptylb "Text" |
Text pro prázdný (nevybraný) select |
| noemptylb |
select nemá stav "nevybráno" |
| notranslate |
Číselník nebude zahrnutý mezi texty k překladu. |
👁 select status lookup "order_status"
👁 select published list "1,ano,2,ne" default "2"
👁 select vendor query "select id,name from vendors" lb "Dodavatel"
👁 select vendor query "select id,name,category from vendors" lb "Dodavatel seskupený podle kategorií"
| Vytvoří tag <datalist> |
| Atributy |
| list | query | lookup "string" |
Zdroj položek selectu může být: ❶ textový seznam, sql dotaz nebo číselník |
| datasource "callback" | datasource "action" |
nebo: ❷ funkce nebo akce controlleru |
| notranslate |
Číselník nebude zahrnutý mezi texty k překladu. |
👁 listinput vendor query "select id,name from vendors" size "30" lb "Dodavatel"
| Vytvoří skupinu radiobuttonů |
| Atributy |
| list | query | lookup "string" |
Zdroj položek může být: ❶ textový seznam, sql dotaz nebo číselník |
| datasource "callback" | datasource "action" |
nebo: ❷ funkce nebo akce controlleru |
| columns "n" |
Počet sloupců ve kterých se skupina inputů vykreslí |
| notranslate |
Číselník nebude zahrnutý mezi texty k překladu. |
👁 radio transport lb "Doprava" list "1,Poštou,2,EMS pošta,3,Osobní odběr" default "1"
| Vytvoří checkbox nebo skupinu checkboxů |
| Atributy |
| list | query | lookup "string" |
Zdroj položek může být: ❶ textový seznam, sql dotaz nebo číselník |
| datasource "callback" | datasource "action" |
nebo: ❷ funkce nebo akce controlleru |
| columns "n" |
Počet sloupců ve kterých se skupina inputů vykreslí |
| notranslate |
Číselník nebude zahrnutý mezi texty k překladu. |
Pokud není zadaný zdroj položek, vytvoří se jediný checkbox.
👁 check agreement lb "Souhlasím s obchodními podmínkami" required
👁 check categories list "1,Nábytek,2,Dekorace" lb "Zobrazit kategorie" default "1,2"
| Vytvoří tlačítko (tag <button>) |
| Atributy |
| href "url" | route "route" [popup | popup "parametry"] |
Vytvoří tlačítko, které přesměruje na url nebo routu. Může se otevřít v popup okně. |
| onclick "javascript" |
Vytvoří tlačítko, které spustí javascript. |
| confirm "dotaz" |
Zobrazí javascript confirm dialog s dotazem. |
👁 button submit lb "Odeslat"
👁 button delete lb "Smazat" confirm "Opravdu smazat?"
👁 button details route "products/details/id:{id}" popup
Layout
Seznam a popis elementů layoutu aplikace (pclib\Layout)
Elementy a atributy
| <head> sekce stránky, umožňuje vkládat styly a skripty |
| Atributy |
| scripts "string" |
Čárkami oddělený seznam css a js souborů, které budou vloženy do hlavičky. |
👁 head HEAD scripts "css/website.css,js/website.js"
Vložené odkazy na css a js budou opatřené verzí, která se změní při každé změně souboru, aby došlo k obnovení cache.
Přidávat skripty do sekce head lze i programově, pomocí funkce $app->layout->addScripts()
| string CONTENT Sem se vloží veškerý výstup aplikace |
| messages Sem se vloží zprávy odeslané pomocí $app->message() a $app->error() |
| navigator Vytváří breadcrumb (drobečkovou) navigaci. |
👁 string CONTENT noescape
messages PRECONTENT noescape
navigator NAVIG
Odkaz na aktuální stránku se přidá do navigátoru funkcí $app->layout->bookmark($level, $titulek)
Model
Seznam a popis elementů šablony databázového modelu (pclib\orm\Model)
Elementy a atributy
| Hlavička šablony, definuje parametry platné pro celý model. |
| Atributy |
| table "name" |
Název databázové tabulky modelu. |
👁 class model table "products"
| Vytvoří vazbu na jiný model. |
| Atributy |
| table "name" |
Název databázové tabulky vazebního modelu. |
| key "column" |
Název sloupce použitého k vytvoření vazby. |
| one | owner | many | many_to_many [through "pivotTableName"] |
Typ vazby: 1:1, N:1, 1:N nebo M:N (používá k vazbě pivot tabulku) |
👁 relation vendor table "vendors" key "vendor_id" owner
relation variants table "product_variants" key "product_id" many
relation categories table "categories" key "product_id,category_id" many_to_many through "product_categories"
V kódu se pak na vazební modely lze odkazovat například takto: $product->vendor->title; foreach($product->variants as $variant) {...};
| Pro jakýkoliv sloupec modelu lze definovat validace, které se kontrolují při každé práci s modelem. |
| Atributy |
| Validační atributy jsou shodné s validací ve formuláři - například: required, email, date, nosave... |
| get | get "methodName" |
get specifikuje "calculated" pole - pro získání jeho hodnoty se volá metoda modelu getNazevPole() |
| set | set "methodName" |
set specifikuje "calculated" pole - pro nastavení jeho hodnoty se volá metoda modelu setNazevPole($value) |
👁 column title required
| Definuje chování vazebních záznamů při smazání modelu. Implicitně jsou vazební záznamy ignorovány. |
| Atributy |
| delete "list" |
Při smazání modelu smazat i vazební záznamy uvedené v seznamu "list". |
| cancel_when "list" |
Pokud existuje vazební záznam ze seznamu "list", model nebude smazán. |
👁 event ondelete delete "variants"
Konfigurační parametry
| pclib.errors |
Chybová hlášení |
| display |
true/false |
Zobrazovat chybová hlášení (volba 'php' nastaví php chybová hlášení bez zásahu pclib) |
| develop |
true/false |
Zobrazovat v chybových hlášení vývojářské informace |
| log |
true/false |
Logovat chybová hlášení |
| template |
string |
Cesta k šabloně chybového hlášení (implicitně pclib/tpl/error.tpl) |
| pclib.security |
Zabezpečení |
| tpl-escape |
true/false |
Ošetří html při výpisu proměnných šablony (ochrana proti útoku XSS) |
| csrf |
true/false |
Přidá do formuláře skryté pole na ochranu před CSRF útokem. |
| form-prevent-mass |
true/false |
Neodešle pole formuláře nedefinované v elements sekci. Ochrana před mass assignment attack. |
| pclib.app |
Aplikace |
| layout |
string |
Cesta k layout šabloně aplikace (např. 'tpl/layout.tpl') |
| default-route |
string |
Implicitní routa aplikace (např. 'site/welcome') |
| language |
string |
Jazyk aplikace (např. 'cs') |
| debugmode |
true/false |
Zapne debugovací lištu |
| friendly-url |
true/false |
Zapne zjednodušená url |
| autostart |
array |
Seznam služeb, které se automaticky spustí při startu aplikace. (např. ['db', 'auth']) |
| pclib.locale |
Lokalizace |
| date, datetime |
string |
Formát datumového pole (implicitně 'd.m.Y' a 'd.m.Y H:i:s') |
| pclib.paths |
Cesty k souborům |
| assets |
string |
Cesta k webovým souborům pclib - js, css, img. (Implicitně pclib/www) |
| templates |
string |
Cesta k defaultním šablonám pclib (Implicitně pclib/tpl) |
Služby (services)
| service.auth | pclib.auth |
Autorizační systém |
| algo |
string |
Algoritmus hashování hesel (md5 | bcrypt | bcrypt-md5) |
| secret |
string |
Řetězec pro posílení md5 hashe hesla. Libovolná náhodná sekvence znaků. |
| realm |
string |
V případě, že více aplikací sdílí přístup přihlášeného uživatele, musí mít stejný realm |
| dsn |
string |
Databázový connection string. Není-li nastavený, použije se databázové připojení aplikace. |
| service.db |
Databáze |
| dsn |
string |
Databázový connection string. (např. 'pdo_mysql://user:password@host/database') |
| service.fileStorage |
Ukládání souborů |
| rootDir |
string |
Cesta ke kořenovému adresáři úložiště souborů. |
Události
| Id události |
Parametry ($event->data) |
Popis |
| app.error |
message |
Chyba aplikace |
| app.before-run, app.after-run |
action |
Před/po spuštění controlleru |
| app.before-out, app.after-out |
|
Před/po výpisu obsahu webu |
| auth.login, auth.logout |
user |
Přihlášení/odhlášení uživatele |
| controller.init |
|
Inicializace controlleru |
| db.before-query, db.after-query |
sql; sql, query |
Před/po spuštění databázového dotazu |
| file.before-save, file.after-save |
loc, file |
Před/po uložení souboru |
| file.before-delete, file.after-delete |
loc, file |
Před/po smazání souboru |
| form.submit |
|
Po odeslání formuláře |
| form.before-out, form.after-out |
|
Před/po zobrazení formuláře |
| form.validate |
|
Po validaci formuláře |
| form.update |
action, table, where |
Před aktualizací hodnot formuláře v databázi |
| grid.before-out, grid.after-out |
|
Před/po zobrazení gridu |
| grid.before-row, grid.after-row |
row, index |
Před/po zobrazení řádku gridu |
| logger.log |
message |
Před zápisem zprávy do logu |
| model.before-save, model.after-save |
ok |
Před/po uložení modelu (ORM) |
| model.before-delete, model.after-delete |
ok |
Před/po smazání modelu (ORM) |
| router.redirect |
url |
Před přesměrováním na jinou url |
| php-exception, php-warning |
Exception |
Před zpracováním php výjjimky nebo varování |
| tpl.after-load |
path |
Po načtení šablony |
| tpl.before-out, tpl.after-out |
|
Před/po zobrazení šablony |
| mailer.create |
sender |
Inicializace maileru |
| mailer.before-send, mailer.after-send |
message |
Před/po odeslání mailu |