abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:00 | Komunita

    Stát Kalifornie zažaloval výrobce 3D tiskových filamentů Polymaker. Vrchní soud San Diego County tvrdí, že firma propagací svých výrobků mezi příznivci 3D tištěných zbraní podporovala výrobu takzvaných 'ghost guns' (DIY zbraní) a že její PLA filament pro 3D tiskárny lze za těchto okolností považovat za součást určenou k výrobě střelné zbraně. Žaloba požaduje mimo jiné finanční sankce a soudní zákaz činnosti, Polymaker se hájí tím, že filament je běžný a sám o sobě legální produkt. Celý text žaloby (PDF na Google Drive).

    ❗Červivý Hřib krade❗ | Komentářů: 0
    dnes 03:33 | Nová verze

    V červnu byla představena aplikace Myna pro převod řeči na text v prostředí desktopu Ubuntu. Včera byla Myna zpřístupněna širší komunitě Ubuntu formou technologické ukázky dostupné v Ubuntu 24.04 LTS, Ubuntu 26.04 LTS a Ubuntu 26.10 s GNOME na Waylandu.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Komunita

    Ubuntu 27.04 bude Tenacious T-Rex.

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Nová verze

    Byla vydána nová verze 2026.4.0 "Never-slop" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. ScummVM oslavil 25 let. Verze 0.0.1 vyšla 8. října 2001.

    Ladislav Hagara | Komentářů: 0
    včera 17:22 | Humor

    Kanadský vývojář Anthony Sistilli vytvořil ironický DIY projekt parodující kamerové systémy Flock, s cílem názorně demonstrovat rizika masového sledování jaké provozují tyto komerční ALPR systémy. Z levné IP kamery a vlastního ML softwaru (napsaného s pomocí SI circa za 20 minut, kód se mi bohužel nepodařilo dohledat) běžícího v laptopu sestavil jednoduchý systém, který detekuje výhradně policejní vozidla, zaznamenává jejich SPZ a

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 6
    včera 12:44 | Upozornění

    Část údajů uživatelů internetového supermarketu Rohlík byla odcizena. Kyberútočníci napadli nástroj zákaznické podpory Rohlíku, odcizili tak jména, e-mailové adresy, v některých případech také telefonní čísla nebo přepisy komunikace mezi klienty a zákaznickou podporou. Rohlík incident nahlásil příslušným orgánům a přijal příslušné opatření, aby zamezil podobným případům v budoucnosti, uvedla firma.

    Ladislav Hagara | Komentářů: 15
    včera 11:11 | IT novinky

    Aplikace eDoklady fungovala v obou volebních dnech stabilně a prakticky bez front. Digitální a informační agentura (DIA) odhaduje, že se digitálním dokladem prokázalo více než 100.000 voličů. Aplikaci si před volbami či během nich aktualizovalo 247.517 uživatelů. Nových registrací bylo 19.431 a do aplikace se přihlásilo 357.879 lidí. Největší nápor přišel bezprostředně po otevření volebních místností mezi 14. a 16. hodinou, kdy si

    … více »
    Ladislav Hagara | Komentářů: 8
    včera 00:55 | Pozvánky

    Začal semestr, začal i podzim a kromě hub rostou jako po dešti i veřejné dílny v Praze. Nedávno strahováci referovali o hackerspacu Bordel, nyní se otevřela dílna Dejvice Lab jen kousek od ČVUT. Na blížící Virtuální Bastlírně tak uslyšíte nejen report z návštěvy dílny HWLab, ale i řadu novinek, událostí a úsměvných momentů, které se za poslední měsíc ve světě techniky, ale i vědy udály. Připojte se tedy již v úterý 13.10. od 20:00 a zapojte se do

    … více »
    bkralik | Komentářů: 0
    11.10. 11:33 | Nová verze

    Byl vydán LineageOS 24 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu. LineageOS 24 je založený na Androidu 17.

    Ladislav Hagara | Komentářů: 0
    11.10. 03:55 | IT novinky

    Společnost Valve publikovala na svém GitLabu nákresy a schémata zapojení headsetu Steam Frame. Pro nekomerční účely.

    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2838 hlasů
     Komentářů: 32, poslední 11.10. 17:02
    Rozcestník

    Smarty, šablonovací systém - 5 (vestavěné funkce 2)

    11. 10. 2007 | Tomáš Kavalek | Návody | 10643×

    V dnešním článku navážeme na předchozí díl, ve kterém jsme začali probírat vestavěné funkce Smarty. Tentokrát se seznámíme s if, elseif a else, include, include_php, insert a rdelim a ldelim.

    Obsah

    Smarty, šablonovací systém - 5 (vestavěné funkce 2) V dnešním článku navážeme na předchozí díl, ve kterém jsme začali probírat vestavěné funkce Smarty. Tentokrát se seznámíme s if, elseif a else, include, include_php, insert a rdelim a ldelim.

    Úvod

    link

    V předchozím díle tohoto seriálu jsme započali cestu k seznámení s vestavěnými funkcemi šablonovacího stroje Smarty. V seznamovací cestě budeme pokračovat v dnešním dílu.

    if, elseif a else

    link

    Funkce if má ve Smarty podobné vlastnosti jako if v PHP. Jediný rozdíl je v tom, že jsou přidány některé další vlastnosti určené speciálně pro zpracování šablon. Každý blok if musí být uzavřen jeho uzavíracím tagem, tzn. že každý blok má následující tvar:

    {if PODMINKA}
    ...
    {/if}
    

    Při zápisu podmínky můžeme použít cokoliv, co je použitelné v PHP, tedy např.: ||, or, &&, and, is_array() apod. V následující tabulce si naznačíme, jaké operátory můžeme v podmínkách použít.

    Operátor Alternativa Příklad Význam PHP ekvivalent
    == eq $a eq $b je rovno ==
    != ne, neq $a ne $b, $a neq $b není rovno !=
    > qt $a gt $b větší než >
    < lt $a lt $b menší než <
    >= qte, ge $a gte $b, $a ge $b větší nebo rovno než >=
    <= lte, ge $a lte $b, $a le $b menší nebo rovno než <=
    ===   $a === 0 identita ===
    ! not not $a negace (unární) !
    % mod $a mod $b zbytek po celočíselném dělení %
    is [not] div by   $a is [not] div by $b je dělitelné bezezbytku $a % $b == 0
    is [not] even   $a is [not] even je sudé číslo $a % 2 == 0
    is [not] even by   $a is [not] even by $b seskupení sudých čísel ($a % $b) % 2 == 0
    is [not] odd   $a is [not] odd je liché číslo $a % 2 != 0
    is [not] odd by   $a is [not] odd by $b seskupení lichých čísel ($a % $b) % 2 != 0

    Jak již bylo zmíněno, není použití if ve Smarty téměř nijak odlišné od PHP, což bude patrné z několika příkladů v následujícím výpisu:

    {* Pozdrav v zavislosti na vstupnim jmene - ruzne osloveni uzivatele systemu *}
    {if $jmeno eq "Petr"}
    {* Tato vetev se provede, pouze pokud promenna $jmeno obsahuje "Petr"        *}
    <div>Vítejte v systému pane řediteli.</div>
    {elseif $name eq "Martina"}
    {* Tato vetev se provede pouze pokud promenna $jmeno obsahuje "Martina"     *}
    <div>Vítejte v systému paní sekretářko.</div>
    {else}
    {* Tato vetev se provede pokud nebyla splnena zadna predchozi podminka      *}
    <div>Vítejte v systému.</div>
    {/if}
    
    {* Pouziti logickych vyrazu je velmi jednoduche - zapisy jsou ekvivalentni   *}
    {if $name eq "Petr" or $name eq "Martina"}
    ...
    {/if}
    
    {if $name == "Petr" || $name == "Martina"}
    ...
    {/if}
    
    {* Samozrejmosti je moznost pouziti zavorek pri sestavovani vyrazu           *}
    {if ($cislo lt 0 or $cislo gt 100) and cislo ne #confVar#}
    ...
    {/if}
    
    {* V podmince muzeme volat i funkce z PHP                                    *}
    {if count($promenna) gt 0}
    ...
    {/if}
    
    {if is_array($promenna)}
    ...
    {/if}
    
    {if isset($promenna)}
    ...
    {/if}
    
    {* Test zda-li se jedna o liche ci sude cislo                                *}
    {if $promenna is even}
    ...
    {/if}
    
    {if $promenna is odd}
    ...
    {/if} 
    
    {if $promenna is not odd}
    ...
    {/if}
    
    {* Kontrola celociselne delitelnosti                                         *}
    {if $promenna is div by 8}
    ...
    {/if}
    

    include

    link

    Při návrhu šablon se nám může stát, že některé části se v různých šablonách opakují. Většinou se jedná o bannery, hlavičky, patičky, menu apod. Je tedy vhodné tyto opakující se části separovat do zvláštní šablony. Představme si, že máme zvláštní soubor hlavicka.tpl pro hlavičku stránky a paticka.tpl pro patičku stránky. Nyní, když budeme navrhovat šablonu, pro hlavní stránku, např. hlavni.tpl, můžeme námi vytvořené šablony do této šablony vložit. A k tomuto vložení slouží právě funkce include. Funkce include má tři parametry, z toho je pouze jeden povinný. Povinným parametrem je file a jak už název napovídá, určuje šablonu, která se má do aktuální vložit. Mezi volitelné patří parametr assign, který se používá v případě, že nechceme obsah šablony do aktuální šablony přímo vložit, ale vložit do proměnné definované právě tímto parametrem. Posledním volitelným parametrem je ve skutečnosti nekonečné pole proměnných, kterým předáváme hodnoty proměnných do šablony. Tato vlastnost bude nejlépe patrná z ukázkových příkladů. Pro následující příklad využijeme výše popsaného případu. Do šablony hlavní stránky vložíme hlavičku a patičku - na obsahu těchto šablon nám vůbec nezáleží.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=iso8859-2" />
    <title>{$pageTitle}</title>
    </head>
    <body>
    {* Vlozime spolecnou hlavicku do stranky *}
    {include file="hlavicka.tpl"}
    
    {* V techto mistech se nachazi obsah :-) *}
    
    {* Vlozime spolecnou paticku do stranky *}
    {include file="paticka.tpl"}
    </body>
    </html>
    

    Z předchozího odstavce tedy víme, že se dá obsah vkládané šablony přiřadit do proměnné. K čemu to je dobré? Například ve chvíli, kdy by se měla šablona několikrát opakovat. Místo toho, abychom prováděli dvakrát vložení funkcí include, tak si obsah šablony uložíme do proměnné a její obsah pak dvakrát vypíšeme. Použití je nejlépe patrné z následujícího příkladu.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=iso8859-2" />
    <title>{$pageTitle}</title>
    </head>
    <body>
    {* Vlozime sablonu navigacniho panelu a ulozime ji do promenne             *}
    {include file="navigace.tpl" assign="navigace"}
    
    {* Vlozime spolecnou hlavicku do stranky a navigacni panel z promenne      *}
    {include file="hlavicka.tpl"}
    {$navigace}
    
    {* V techto mistech se nachazi obsah :-)                                   *}
    
    {* Vlozime spolecnou paticku do stranky a navigacni panel z promenne       *}
    {$navigace}
    {include file="paticka.tpl"}
    </body>
    </html>
    

    Poslední věcí, kterou můžeme s funkcí include provádět, je předávání hodnot proměnných do šablony. Použití zejména v případech, kdy máme uvnitř vkládané šablony definované neinicializované proměnné. Jako vždy nám napoví ukázkový příklad.

    Pro demonstraci mějme následující obsah šablony se jménem oblibene_odkazy.tpl:

    <div>
    <h3>{$nadpis}</h3>
    <ul>
    {foreach from="$odkazy" item="odkaz"}
    <li><a href="{$odkaz}" title="{$odkaz}">{$odkaz}</a></li>
    {/foreach}
    </ul>
    </div>
    

    Tuto šablonu chceme vložit do hlavní šablony s tím, že funkci include předáme hodnoty proměnných $nadpis a $odkazy. To provedeme následujícím způsobem:

    {* Vlozime sablonu s definici promennych                                    *}
    {include file="oblibene_odkazy.tpl" nadpis="Odkazy" odkazy="$pole_odkazu"}
    

    Tímto způsobem došlo k předání hodnot proměnných v šabloně. Na závěr si ještě ukážeme několik možností zápisu funkce include (shrnutí):

    {* Zapis absolutni cesty *}
    {include file="/usr/www/include/templates/header.tpl"}
    
    {* Zapis absolutni cesty (s protokolem) *}
    {include file="file:/usr/www/include/templates/header.tpl"}
    
    {* Zapis absolutni cesty pod Windows musi obsahovat protokol *}
    {include file="file:C:/www/inlcude/templates/header.tpl"}
    
    {* Zapis jmena sablony pomoci promenne *}
    {include file="$module.tpl"}
    

    include_php

    link

    Pomocí této funkce můžeme do šablony vložit jakýkoliv externí skript v PHP. Zásadně se však tento postup nedoporučuje, vše lze většinou vyřešit na úrovni tzv. pluginů (viz některá z dalších kapitol). Už totiž samotné použití této funkce popírá smysl šablon, který spočívá v oddělení aplikační a prezentační vrstvy. Funkce include_php má tři parametry, z toho je pouze jeden povinný. Povinným parametrem je, stejně jako o funkce include, parametr file, který určuje cestu ke skriptu, který má funkce vložit. Dále funkce umožňuje použít dva volitelné parametry. Prvním z nich je once, parametr typu bool, tedy akceptuje logické hodnoty. Je-li tento parametr použit s hodnotou true, funguje funkce na principu PHP funkce include_once. Druhým volitelným parametrem je assign, který slouží ke stejnému účelu jako parametr stejného jména u funkce include, tedy při jeho použití je výsledek skriptu uložen do proměnné.

    {* Vlozime PHP skript a vysledek skriptu ulozime do promenne                *}
    {include_php file="skript.php" once=true assign="skript"}
    {* Tady budeme neco neduleziteho vykonavat                                  *}
    ...
    {* A tady vypiseme obsah PHP skriptu, ktery mame ulozeny v promenne         *}
    {$skript}
    

    insert

    link

    Funkce pracuje na stejném principu jako include s jedinou výjimkou, a to, že šablony vložené touto funkcí nejsou cacheovány. To platí pouze v případě, že je tato vlastnost povolena (viz některá z následujících kapitol). Šablona je tedy zpracována při každém jejím volání. Parametry funkce jsou podobné parametrům již zmíněné funkce include. Pouze parametr file je nahrazen parametrem name, který udává, jaká PHP funkce se má pro vložení použít. Tento parametr je povinný. Oproti funkci include je insert rozšířena o parametr script, který je užitečný v případě, že potřebujeme použít "vkládací" funkci z externího souboru. Tento soubor je vložen před samotným zpracováním funkce insert. Představme si, že chceme do stránek vkládat banner. Ten se může skládat z obrázků, flashe atd. (to vše v HTML kódu). Protože chceme proměnný banner, nemůžeme použít statický odkaz, ale musíme ho nějakým způsobem generovat.

    {* Zavolame funkci getBanner() pro vlozeni banneru pomoci insert            *}
    {insert name="getBanner()" id=#banner_id# sd=#site_id# script="banner.php"}
    

    Pro vložení banneru použijeme funkci getBanner(), které předáme parametry #banner_id# a #site_id#, získané z konfiguračního souboru. Smarty zavolá funkci insert_getBanner(), která se nachází v souboru banner.php a předá jí parametry jako asociativní pole. Prefix jména všech funkcí pro insert je pevně dán, tedy insert_, z důvodu předejití konfliktu názvu funkcí ve jmenném prostoru (name-space). Smarty zavolá funkci například následujícím způsobem: insert_getBanner(array("id" => "1", "sd" => "2"));. Naše funkce zpracuje předané parametry a vrátí např. HTML kód banneru, ten se pak do šablony vloží na místo funkce insert.

    {* Pseudokod funkce insert_getBanner()                                      *}
    function insert_getBanner(...) {
    zpracuj parametry
    nacti obsah dle parametru a vygeneruj HTML kod
    vrat HTML kod
    }
    

    ldelim, rdelim

    link

    Tyto funkce slouží k reálnému výpisu oddělovačů tak, aby nebyly zpracovávány šablonovacím strojem jako oddělovače funkcí. Pokud tedy chceme vypsat { a } (závisí na nastavení oddělovačů - viz druhý díl seriálu), použijeme těchto funkcí. Funkce nemá žádné parametry a její použití je velmi jednoduché, což bude patrné z následujících příkladů.

    {* Ukazka vypisu ldelim a rdelim                                            *}
    Oddelovace pouzivane ve Smarty jsou {ldelim} a {rdelim}
    

    Dostaneme následující výsledek:

    Oddelovace pouzivane ve Smarty jsou { a }
    

    Příklad použití ve spojení s JavaScriptem (má smysl, pouze pokud používáme oddělovače ve výchozím nastavení - je tomu tak ve většině případů):

    <script type="text/javascript">
    function foo() {ldelim}
    ...
    {rdelim}
    </script>
    

    Výsledek bude následující:

    <script type="text/javascript">
    function foo() {
    ...
    }
    </script>
    

    Trochu složitější použití může vypadat následovně:

    <script type="text/javascript">
    function showServerInfo() {ldelim}
    alert("Server name:\n{$smarty.server.SERVER_NAME}\n{$smarty.server.SERVER_ADDR}");
    {rdelim}
    </script>
    <a href="javascript:showServerInfo()">Server Info</a>
    

    Závěr

    link

    V příštím díle dokončíme seznamování s vestavěnými funkcemi; zbývají nám funkce literal, php, section, sectionelse a strip. Pak se již vrhneme na tzv. speciální funkce (custom functions) a další zajímavé věci.

           

    Hodnocení: 100 %

            špatné • dobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Diskuse byla administrátory uzamčena

    11.10.2007 15:53 DarkCraft | skóre: 3 | Praha
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 5 (vestavěné funkce 2)
    Velice pekne napsany serial, nezbyva nez pochvalit. Jediny nedostatek bych asi videl pouze v nepravidelnem vychazeni jednotlivych dilu, ale i to se da prekousnout :). Jinak bych chtel jeste upozornit, ze tento dil se nezobrazuje ve vypisu dilu tohoto serialu ( http://www.abclinuxu.cz/serialy/smarty-sablonovaci-system ). Tesim se na pokracovani.
    Podporuji ArchLinux;jabber conference: archlinux.cz@conference.jabber.org; http://darkcraft.org
    11.10.2007 16:04 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 5 (vestavěné funkce 2)
    Jinak bych chtel jeste upozornit, ze tento dil se nezobrazuje ve vypisu dilu tohoto serialu ( http://www.abclinuxu.cz/serialy/smarty-sablonovaci-system ).
    Sorry, napraveno.
    11.10.2007 16:18 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 5 (vestavěné funkce 2)
    Zdravim,
    ted uz bude vychazet serial pravidelne, alespon v to doufam, mel jsem nejake potize, ktere mi v psani branili (nebudu rozebirat). Predem muzu prozradit, ze dalsi dil uz je pripraven k vydani. Takze za zpozdeni se omlouvam vsem ctenarum. Diky za pochopeni.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.