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í
×
    včera 21:11 | Nová verze

    Byla vydána nová verze 2.0 klienta F-Droid určeného pro instalaci bezplatných a otevřených mobilních aplikací do Androidu ze softwarového repozitáře F-Droid (Wikipedie). Jedná se o alternativu k Google Play.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | Komunita

    Debian Inference Portal nabízí vývojářům Debianu bezplatný přístup ke službám AI/LLM. Sponzorem je společnost Scaleway.

    Ladislav Hagara | Komentářů: 0
    včera 11:44 | Bezpečnostní upozornění

    Robert Ressl nalezl ve WordPressu kritickou zranitelnost CVE-2026-87902 s CVSS 9.2. Útočníkům umožňuje neoprávněný přístup k souborům a vzdálené spuštění kódu (RCE). Opravena je ve verzích 7.1.2, 7.0.6, 6.9.9…

    Ladislav Hagara | Komentářů: 0
    včera 03:33 | IT novinky

    Společnost Meta na dvoudenní konferenci Meta Connect 2026 představuje své novinky. Vypíchnout lze lehké brýle s funkci VR Meta VR Glasses. Do prodeje půjdou na jaře 2027 za cenu 1299,99 dolarů.

    Ladislav Hagara | Komentářů: 0
    23.9. 14:44 | Nová verze

    Google Chrome 154 byl prohlášen za stabilní. Nejnovější stabilní verze 154.0.8037.57 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 108 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 6
    23.9. 14:33 | IT novinky

    Vláda sníží v příštím roce výdaje na IT služby státu o 1,4 miliardy korun. Úspory má umožnit lepší koordinace nákupu služeb napříč resorty prostřednictvím nového zmocněnce. Celkové roční výdaje státu na informační technologie a digitalizaci se podle údajů ministerstva průmyslu a obchodu pohybují okolo 20 až 25 miliard korun ročně, pro letošek bylo na 320 projektů vyčleněno 21 miliard.

    Ladislav Hagara | Komentářů: 4
    23.9. 14:22 | IT novinky

    Irská komise pro ochranu dat (DPC) uložila americké technologické společnosti Google ze skupiny Alphabet pokutu 403 milionů eur (9,8 miliardy Kč) za neoprávněné nakládání s údaji o poloze uživatelů. Firma podle komise porušila evropské nařízení o ochraně osobních údajů (GDPR). DPC uvedla, že při šetření zjistila, že si lidé nemuseli být vědomi skutečnosti, že jejich poloha byla využívána například k ovlivňování prostřednictvím reklam nebo k odvozování jejich zájmů, a mohli tak ztratit kontrolu nad svými osobními údaji.

    Ladislav Hagara | Komentářů: 2
    23.9. 02:11 | IT novinky

    Byla oznámena beta verze nového video kodeku Pyrowave pro streamování her v Steam Remote Play. S vysokou propustností a nízkou latencí. S podporou HDR a YUV 4:4:4.

    Ladislav Hagara | Komentářů: 0
    23.9. 01:11 | Nová verze

    Byl vydán Sublime Text 4 Build 4213. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.

    Ladislav Hagara | Komentářů: 0
    22.9. 21:55 | Zajímavý článek

    Firma Anthropic, tvůrce AI modelu Claude, začala v oblasti Sanfranciského zálivu v tichosti provozovat vlastní biotechnologickou laboratoř. Anthropic prý chce pomocí AI urychlit hledání léků na nemoci, jimž farmaceutický průmysl dle názoru firmy věnuje příliš málo pozornosti. Firma tvrdí, že laboratoř se zatím soustředí především na základní biologii, nikoli přímo na vývoj léčiv. Farmaceutický výzkum je pro generálního ředitele Daria Amodeie velice osobní téma, jeho otec zemřel na hepatitidu C několik málo let před objevením účinné léčby.

    AfD 💙 | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2726 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Smarty, šablonovací systém - 3 (matematika a modifikátory proměnných)

    23. 1. 2007 | Tomáš Kavalek | Návody | 12907×

    Tentokrát probereme možnosti použití matematiky v šablonách a modifikátory proměnných.

    Obsah

    Úvod

    link

    Nejprve bych se rád čtenářům omluvil za větší pauzu mezi jednotlivými díly, ale bohužel se mi nedostávalo času. Lepší zprávou, i když ne už moc aktuální, je, že 30. listopadu 2006 vyšla nová verze Smarty 2.6.15 a hned 1. prosince 2006 vyšla verze Smarty 2.6.16, protože ve verzi vydané o den dříve se vyskytla chyba. Changelog popisuje jednotlivé změny oproti předchozím verzím.

    Matematika

    link

    Smarty umožňuje v šablonách používat matematické výpočty. Ty lze zapisovat přímo, způsobem obdobným, jak jsme zvyklí z PHP, nebo pomocí prostředí math. Rozhodneme-li se provádět zápis přímo, což je nejjednodušší metoda, pokud nepotřebujeme složité vzorce, úpravu výstupu apod., může použití vypadat následovně:

    {* Jednoduche priklady *}
    {$promenna + 1}
    {$promenna_1 * $promenna_2}

    {* Slozitejsi priklady *}
    {$promenna_1 - $promenna_2.klic_1 * $promenna_2.klic_2 % $promenna_3}
    {assign var="vysledek" value="`$promenna_1 * $promenna_2`"}

    Příklad jednoduše znázorňuje, jak použít co nejjednodušeji matematické možnosti ve Smarty. Zajímavým může být poslední řádek, který ukazuje, jakým způsobem lze výsledek výpočtu uložit do proměnné. K uložení slouží funkce assign. Aby byl obsah parametru zpracován a teprve pak uložen do proměnné, musíme matematický zápis uzavřít do zpětných apostrofů (`).

    Chceme-li však použít více možnosti matematiky, které Smarty nabízí, je vhodné využít funkce math. Ta umožňuje nejen složitější zápisy, ale také nastavení formátu výsledku, okamžité přiřazení výsledku proměnné, zápis vzorců pomocí přiřazení hodnot jednotlivým proměnným v matematickém výrazu.

    Příklad 1 - Obvod obdélníku
    {* $sirka = 4, $vyska = 5 *}

    {math equation="2 * (x + y)" x=$sirka y=$vyska}

    Příklad 2 - Obvod obdélníku s konfiguračním souborem
    {* #sirka# = 4, #vyska# = 5 *}

    {math equation="2 * (x + y)" x=#sirka# y=#vyska#}

    Příklad 3 - Obvod obdélníku s uložením výsledku do proměnné
    {* $sirka = 4, $vyska = 5 *}

    {math equation="2 * (x + y)" x=$sirka y=$vyska assign="obvod"}

    Příklad 4 - Obvod obdélníku s definicí formátu výsledku
    {math equation="2 * (x + y)" x=8.9895 y=1.2549 format="%.2f" assign="obvod"}

    Pro určení formátu výsledku lze použít formátovací řetězce známé pro funkci printf jazyka PHP.

    Modifikátory proměnných

    link

    Smarty umožňuje na jednotlivé proměnné aplikovat tzv. modifikátory. Ty se používají k úpravě obsahu proměnných na úrovni šablon. Syntaze použití modifikátorů na proměnné je následující: $promenna|modifikator:parametry. Důležitou poznámkou, než se začneme přímo zabývat použitím modifikátorů, je, že modifikátor je aplikován na proměnnou, resp. její obsah. Pokud ale použijeme modifikátor na pole, bude aplikován na každý jeho prvek. Chceme-li použít modifikátor na pole jako celek, použijeme před názvem modifikátoru symbol @ (zavináč). Jednoduchým příkladem může být následující výpis:

    {* Vypise pocet prvku v poli *}
    {$array|@count}

    capitalize

    link

    Modifikátor capitalize změní první písmeno každého slova v řetězci na velké. Ve výchozím nastavení nedochází k úpravě prvního písmene. Je-li následováno číslicí a použijeme-li parametr true, bude k úpravě docházet. Efekt parametru a použití modifikátoru je patrný z následujícího výpisu. Funkce modifikátoru je shodná s PHP funkcí ucfirst().

    {* Promenna $foo obsahuje retezec "toto je test v3" *}
    {$foo|capitalize}
    {* Vystup: Toto Je Test v3 *}

    {$foo|capitalize:true}
    {* Vystup: Toto Je Test V3 *}

    cat

    link

    Modifikátor cat slouží ke konkatenaci (spojení) dvou řetězců. Nemá žádné parametry umožňující upravit jeho chování, jediným parametrem je řetězec, který má být připojen.

    {* Promenna $foo obsahuje retezec "toto je test" *}
    {$foo|cat:' - snad posledni :-)'}
    {* Vystup: toto je test - snad posledni :-) *}

    count_

    link

    Modifikátor count_ existuje ve Smarty v několika variantách, prvním je count_characters, druhým count_words, třetím count_sentences a posledním count_paragraphs. Již z názvu by mohlo být patrné k čemu jednotlivé modifikátory slouží. Postupně tedy - počet znaků v proměnné, počet slov v proměnné, počet vět v proměnné a nakonec počet odstavců v proměnné. Pouze count_characters umožňuje použití parametru ovlivňující funkci modifikátoru. Výchozí nastavení je na false, což znamená, že bílé znaky nebudou započítávány do výsledného počtu znaků. Chceme-li, aby tomu bylo naopak, bílé znaky byly započítávány, nastavíme parametr na true.

    {* Promenna $foo obsahuje retezec "toto je test" *}
    {$foo|count_characters}
    {* Vystup: 10 *}

    {$foo|count_characters:true}
    {* Vystup: 12 *}

    {$foo|count_words}
    {* Vystup: 3 *}

    {* Promenna $foo obsahuje retezec "Toto je test. Mam rad Linux." *}
    {$foo|count_sentences}
    {* Vystup: 2 *}

    {* Promenna $foo obsahuje retezec "Toto je test.\n Mam rad Linux." *}
    {$foo|count_paragraphs}
    {* Vystup: 2 *}

    date_format

    link

    Tento modifikátor slouží pro formátování výstupního data a času dle zadaných kritérií. Pro formátování data a času slouží zástupné znaky, které se používají pro PHP funkci strftime().

    {$smarty.now|date_format:"%d.%m.%Y"}
    {* Vystup: 19.01.2007 - vystup samozrejme zavisi na dni pouziti sablony :-)*}

    default

    link

    Modifikátor kontrolující, zda-li byla proměnné přiřazena nějaká hodnota, tedy jestli není prázdná. Pokud je proměnná prázdná, je jí přiřazena hodnota, která byla předána modifikátoru jako jeho parametr.

    {* Promenna $foo obsahuje retezec "toto je test" *}
    {$foo|default:'hodnota'}
    {* Vystup: toto je test *}

    {* Promenna $foo_2 nebyla inicializovana *}
    {$foo_2|default:'hodnota'}
    {* Vystup: hodnota *}

    escape

    link

    Modifikátor slouží k úpravě proměnné dle zadaných pravidel. Převádí "nevhodné" znaky, jakými mohou být např. apostrofy, na entity, upravuje tvar e-mailové adresy, aby zamezil zpracování roboty (jmeno@domena.cz převede na jmeno[AT]domena[DOT]cz) apod. Parametry použití tohoto modifikátoru jsou dostupné z dokumentace.

    {* Promenna $foo obsahuje retezec "jmeno@domena.cz" *}
    {$foo|escape:'mail'}
    {* Vystup: jmeno[AT]domena[DOT]cz *}

    indent

    link

    Modifikátor sloužící k odsazení textu o určitý počet (ve výchozím nastavení 4) znaků (výchozí je mezera, lze upravit). Tento modifikátor má tedy dva parametry, jejichž pořadí je potřeba dodržet.

    {* Promenna $foo obsahuje retezec "Radek 1\nRadek 2\Radek 3" *}
    {$foo|indent:5:"\t"}
    {* Vystup: kazdy radek bude odsazet o pet tabelatoru *}

    lower

    link

    Modifikátor převadí obsah proměnné na malá písmena.

    {* Promenna $foo obsahuje retezec "Toto Je TEST" *}
    {$foo|lower}
    {* Vystup: toto je test *}

    nl2br

    link

    Modifikátor převadí všechny znaky nového řádku \n na HTML ekvivalent <br />.

    {* Promenna $foo obsahuje retezec "Radek 1\nRadek 2\nRadek 3" *}
    {$foo|nl2br}
    {* Vystup: Radek 1<br />Radek 2<br />Radek 3 *}

    regex_replace

    link

    Modifikátor funguje podobně jako PHP funkce preg_replace(), a používá stejné zástupné znaky v regulárních výrazech. Nahrazení textu dle regulárního výrazu.

    {* Promenna $foo obsahuje retezec "Radek\t1\nRadek\t2\nRadek\t3" *}
    {$foo|regex_replace:"/[\r\t\n]/":" "}
    {* Vystup: Radek 1 Radek 2 Radek 3 *}

    replace

    link

    Modifikátor má obdobnou funkci jako regex_replace s tím rozdílem, že neumožňuje použití regulárních výrazů. Dochází tedy pouze k náhradě hledaného řetězce za jiný.

    {* Promenna $foo obsahuje retezec "toto je test" *}
    {$foo|replace:'je':'neni'}
    {* Vystup: toto neni test *}

    spacify

    link

    Modifikátor umožňuje vložit libovolný znak (výchozí je mezera) mezi znaky v proměnné.

    {* Promenna $foo obsahuje retezec "toto je test" *}
    {$foo|spacify}
    {* Vystup: t o t o   j e   t e s t *}

    {$foo|spacify:"!"}
    {* Vystup: t!o!t!o! !j!e! !t!e!s!t! *}

    string_format

    link

    Modifikátor slouží k formátování řetězce dle formátovacích znaků, které jsou shodné jako u funkce sprintf().

    {* Promenna $foo obsahuje retezec "3.1415" *}
    {$foo|string_format:"%d"}
    {* Vystup: 3 *}

    {$foo|string_format:"%.2f"}
    {* Vystup: 3.14 *}

    strip

    link

    Modifikátor slouží k nahrazení opakujících se mezer, nových řádků a tabelátorů jednou mezerou (výchozí nastavení), případně libovolným řetězcem, definovaným parametrem.

    {* Promenna $foo obsahuje retezec "Toto     \t je\n test" *}
    {$foo|strip}
    {* Vystup: Toto je test *}

    {$foo|strip:"-"}
    {* Vystup: Toto-je-test *}

    strip_tags

    link

    Modifikátor slouží k odstranění všech HTML tagů v proměnné a jejich nahrazení jednou mezerou. Pokud chceme, aby došlo k nahrazení bez mezery, použijeme parametr false - jako výchozí je definováno true.

    {* Promenna $foo obsahuje retezec "Toto je <b>test</b>" *}
    {$foo|strip_tags}
    {* Vystup: Toto je  test  *}

    {$foo|strip_tags:false}
    {* Vystup: Toto je test *}

    truncate

    link

    Modifikátor slouží k "oříznutí" řetězce. K upřesnění funkce slouží čtyři parametry. První udává počet znaků, na které má být řetězec zkrácen (výchozí nastavení 80 znaků), druhý parametr udává, jakým řetězcem má být oříznutý text následován (výchozí ...), třetí parametr určuje, zda je povoleno oříznutí řetězce v půlce slova, nebo zda-li se má provést odříznutí před tímto slovem (ve výchozím nastavení na false - nedělit slova). Poslední parametr určuje, že bude vypsáno poslední slovo řetězce a podle toho se přizpůsobí oříznutí. Vysvětlování se může zdát složité, nejlepší je vyzkoušet si funkci modifikátoru v praxi, nebo se podívat na výpis kódu.

    {* Promenna $foo obsahuje retezec "Toto je delsi retezec k testovani *}
    {$foo|truncate:10}
    {* Vystup: Toto je... *}

    {$foo|truncate:10:"!"}
    {* Vystup: Toto je! *}

    {$foo|truncate:10:"-":true}
    {* Vystup: Toto je de- *}

    {$foo|truncate:15:"-":false:true}
    {* Vystup: Toto je... testovani*}

    upper

    link

    Modifikátor převádí obsah proměnné na velká písmena.

    {* Promenna $foo obsahuje retezec "Toto je test" *}
    {$foo|upper}
    {* Vystup: TOTO JE TEST *}

    wordwrap

    link

    Modifikátor pracující na podobném principu jako truncate s tím rozdílem, že text neořezává, ale řeší jeho zalamování. První parametr udává, po kolika znacích (výchozí 80) má dojít k zalomení textu, druhý parametr udává, jaký znak se má pro zalomení použít (výchozí \n).

    {* Promenna $foo obsahuje retezec "Toto je delsi retezec k testovani *}
    {$foo|wordwrap:15}
    {* Vystup: Toto je delsi\nretezec k\ntestovani *}

    {$foo|wordwrap:15:"<br />}
    {* Vystup: Toto je delsi<br />retezec k<br />testovani *}

    Kombinace modifikátorů

    link

    Veškeré výše popsané modifikátory lze libovolně vhodně kombinovat. Následuje několik takových ukázek, z kterých by mělo být zřejmé, jak kombinaci modifikátorů zapisovat. Z výpisu je i vidět, že závisí na pořadí zápisu modifikátorů (modifikátory jsou aplikovány směrem od proměnné).

    {* Promenna $foo obsahuje retezec "Toto je retezec k testu *}
    {$foo|upper|spacify}
    {* Vystup: T O T O   J E   R E T E Z E C   K   T E S T U *}

    {$foo|upper|spacify|truncate:15}
    {* Vystup: T O T O   J E... *}
    {* Nejprve byl retezec zvetsen, pote vlozeny mezery a pak oriznut *}
    {* Pocet mezer se tedy promitl do poctu znaku k oriznuti *}

    {$foo|upper|truncate:15|spacify}
    {* Vystup: T O T O   J E   R E T E Z E C . . . *}
    {* Nejprve byl retezec zvetsen, pote oriznut a pak vlozeny mezery *}
    {* Vlozeni mezer se tedy promitlo na ... vlozenych modifikatorem truncate *}

    Závěr

    link

    V příštím díle se seznámíme s vestavěnými funkcemi šablonovacího systému Smarty. Abych alespoň předběžně nastínil, tak prozradím, že mezi tyto funkce patří např. podmínky a různé cykly. Více ale až v příštím díle seriálu.

           

    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

    Vložit další komentář

    23.1.2007 21:41 obrys | skóre: 1
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 3 (matematika a modifikátory proměnných)
    S modifikátory ve smartech se peru už nějaký ten pátek... Nepovedlo se mi vyprodukovat u date_format výstup ve formátu: 23.1.2007. Neboli to, co vypadne z date('j.n.Y',time()). S date_format dosáhnu maximálně 23.01.2007. Tu nulu před jednocifernými hodnotami nechci. Přišel na to někdo?

    Jinak modifikátor escape k nezaplacení, pokud chcete produkovat validní xhtml dokument.

    obrys
    Toman avatar 24.1.2007 10:28 Toman | skóre: 29 | blog: Tomanův blog | Kostelec nad Orlicí
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 3 (matematika a modifikátory proměnný
    Zdravím, toto jsem ještě neřešil, nebyla třeba, ale podle manuálu k PHP funkci strftime() lze použít %e tak, aby byl vypisován den v měsíci bez předchozí nuly. Čísla 1 - 9 budou předsazena mezerou, zbývající čísla nebudou nijak ovlivněna. Něco podobného pro měsíc jsem nikde neviděl a nenašel, ale určitě by se to dalo vyřešit na úrovni vlastního pluginu. Téma vlastních pluginů bude v tomto seriálu také probráno a váš problém by mohl vyústit v jeden z ukázkových příkladů :-)
    24.1.2007 16:51 obrys | skóre: 1
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 3 (matematika a modifikátory proměnný
    No, bohatě by stačilo, kdyby se nepoužívaly parametry ze strftime(), ale z funkce date(), která je imho v těchto formátech lepší.
    Conscript89 avatar 24.1.2007 16:14 Conscript89 | Brno
    Rozbalit Rozbalit vše Re: Smarty, šablonovací systém - 3 (matematika a modifikátory proměnných)
    Rad bych upozonil na to ze jako modifikator se da pouzit prakticky jakakoliv PHP fce (pokud ma spravne poradi parametru, u nekterych o tak nejde). Napr. mate ulozeny v databazi serializovanou istanci tridy nebo pole. Jeho struktura se da se zvyraznenim ve smarty zapsat takto: {$var|unserialize|var_export:True|string_format:"<?php\n%s\n?>"|highlight_string} ma to sice jeden mensi bug, ale jako ukazka to staci.
    I can only show you the door. You're the one that has to walk through it.
    27.9.2007 12:29 Petr 'PePa' Pavel
    Rozbalit Rozbalit vše formátování data bez nuly před číslem měsíce
    A teď konkrétně: ;-)

    Tohle vrací den. měsíc. rok, ale s nulou před číslem měsíce.
    {$myDate|date_format:"%e. %m. %Y"}

    Tohle nulu odstraní:
    {$myDate|date_format:"%e. %#m. %Y"}

    Jestli to chcete mít funky, tak na to můžete jít i takhle:
    {assign var="myDateTimestamp" value=$myDate|strtotime}
    {"j. n. Y"|date:$myDateTimestamp}

    (převzato odsud)

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.