abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:44 | Nová verze

    Byla vydána (𝕏) nová major verze 17 softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech GitLab (Wikipedie). Představení nových vlastností i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    dnes 12:22 | Komunita

    Sovereign Tech Fund, tj. program financování otevřeného softwaru německým ministerstvem hospodářství a ochrany klimatu, podpoří vývoj FFmpeg částkou 157 580 eur. V listopadu loňského roku podpořil GNOME částkou 1 milion eur.

    Ladislav Hagara | Komentářů: 0
    dnes 01:55 | Komunita

    24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.

    Ladislav Hagara | Komentářů: 7
    včera 23:33 | Nová verze

    Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

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

    Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

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

    Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.

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

    Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].

    Ladislav Hagara | Komentářů: 9
    včera 13:22 | Nová verze

    JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Pozvánky

    Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 0
    včera 03:11 | Nová verze

    Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).

    Ladislav Hagara | Komentářů: 9
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (74%)
     (5%)
     (11%)
     (10%)
    Celkem 298 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

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

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

    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áknoNahoru

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