abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Navštivte Abc obchůdek se samolepkami a přívěsky!
Rozšířené hledání
×
dnes 06:11 | Komerce
Rozrůstající se softwarová společnost v Plzni zabývající se telematikou hledá schopné vývojáře a nadšence se zájmem o OS Linux. Uplatnění zde najdou především vývojáři C++ se znalostí OS Linuxu, dále programátoři v jazyku Java nebo vývojáři se zkušenostmi s Oracle DB a Oracle ADF. Více informací o společnosti. … více »
Reklama | Komentářů: 0
24.5. 22:45 | IT novinky
NASA, která společně s Rackspace stála u zrodu projektu OpenStack, se již nadále nebude podílet na dalším vývoji této "infrastructure-as-a-service" platformy. V NASA totiž došli k závěru, že vzhledem k podpoře OpenStacku ze strany společností jako Red Hat, AT&T a HP lze jejich práci považovat za dokončenou. Posléze se NASA plánuje stáhnout i z vývoje další platformy pro cloud computing jménem Nebula.
Migilenik | Komentářů: 0
24.5. 22:45 | Upozornění
Blíží se svátek IPv6 a s ním i konference IPv6 Day. Na návštěvníky této akce čeká nejen bohatý program, ale také jedna speciální nabídka – v průběhu setkání bude možné získat se slevou 66 procent třetí vydání knihy IPv6 vysokoškolského pedagoga a publicisty Pavla Satrapy, tedy za 105 korun. … více »
Vilem Sladek | Komentářů: 4
24.5. 16:14 | Pozvánky

Přijďte si zasprintovat na Djangu, jiném Python open-source projektu, nebo jen potkat ostatní vývojáře!

… více »
Whit | Komentářů: 0
24.5. 10:20 | Nová verze
Na zrcadlech a torrentech jsou již k dispozici ISO obrazy distribuce Mageia 2. Poznámky k vydání čtěte zde.
Liborek | Komentářů: 14
23.5. 13:47 | Pozvánky

Letos v říjnu se v Praze uskuteční hned několik konferencí. Odehraje se zde nově vzniklá konference LinuxDays. K ní se přidá čtvrtý ročník openSUSE Conference, dvanáctý ročník SUSE Labs conference a aby to nebylo málo, přidá se i první ročník Gentoo miniconf. A to vše ve stejné dny a na stejném místě.

… více »
Miška | Komentářů: 7
23.5. 13:27 | Zajímavý projekt
Printerd je název nového projektu tiskového démona, který bude využívat PolicyKit a D-Bus. Projekt je zatím na úplném začátku, takže nejde o nic vhodného k produkčnímu nasazení. Mimo jiné aktuálně akceptuje jako vstup jen PDF dokumenty.
Luboš Doležel (Doli) | Komentářů: 56
23.5. 13:25 | Zajímavý software
Tři vývojáři ze společnosti Engine Yard přecházejí po dohodě mezi firmami do Red Hatu. Jde o vývojáře zabývající se rozvojem projektu JRuby. To ukazuje, že Red Hat má zájem o podporu alternativních jazyků nad OpenJDK.
Luboš Doležel (Doli) | Komentářů: 1
23.5. 13:20 | Zajímavý software
Fedora přejde na knihovnu libusbx, což je fork původní knihovny libusb. Důvodem pro fork byl zjevný nedostatek času nebo zájmu ze strany správce projektu. libusbx už teď nabízí užitečné funkce navrch.
Luboš Doležel (Doli) | Komentářů: 4
23.5. 10:29 | Nová verze
Vyšlo LLVM 3.1. Vylepšení se dotýkají podpory C++ 11 nebo architektur ARM a MIPS. Dále se můžete těšit z Python bindings nebo nástroje AddressSanitizer pro detekci chyb při práci s pamětí.
Luboš Doležel (Doli) | Komentářů: 0
Pokud by se prohlížeč Opera stal svobodným:
 (9%)
 (32%)
 (1%)
 (58%)
Celkem 247 hlasů
 Komentářů: 31, poslední včera 22:38
    Rozcestník
    Reklama
    Autoškola testy online Levný benzín

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

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

    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 | Karlovy Vary
    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
    Kdo umí, ten umí. Kdo neumí, ten učí. Kdo neumí učit, ten řídí.
    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 | Karlovy Vary
    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ší.
    Kdo umí, ten umí. Kdo neumí, ten učí. Kdo neumí učit, ten řídí.
    Conscript89 avatar 24.1.2007 16:14 Conscript89 | Olomouc/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   Powered by Hosting 90 Server hosting
    © 1999-2012 Argonit s. r. o. Všechna práva vyhrazena.