Po půl roce vývoje od vydání verze 47 bylo vydáno GNOME 48 s kódovým názvem Bengaluru. Přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře. Vypíchnout lze počáteční podporu HDR, nová výchozí písma Adwaita Sans a Adwaita Mono, přehrávač zvukových souborů Decibely, Pohodu v Nastavení (Digital Wellbeing), …
Engineering Open House v Red Hatu v Brně proběhne v pondělí 31. března [Facebook].
Byla vydána nová stabilní verze 7.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 134. Přehled novinek i s náhledy v příspěvku na blogu.
Eric Migicovsky, zakladatel společnosti Pebble, v lednu oznámil, že má v plánu spustit výrobu nových hodinek Pebble s již open source PebbleOS. Včera je představil a spustil předprodej: Core 2 Duo za 149 dolarů s dodáním v červenci a Core Time 2 za 225 dolarů s dodáním v prosinci.
3D software Blender byl vydán ve verzi 4.4. Podrobnosti v poznámkách k vydání. Videopředstavení na YouTube.
Byla vydána Java 24 / JDK 24. Nových vlastností (JEP - JDK Enhancement Proposal) je 24. Nová Java / JDK vychází každých 6 měsíců. LTS verze jsou 8, 11, 17 a 21 a bude 25.
Byla vydána betaverze Fedora Linuxu 42, tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 15. dubna. Z novinek (ChangeSet) lze vypíchnout edici KDE Plasma Desktop nebo spin Cosmic. Vydán byl také Fedora Asahi Remix 42 Beta pro Apple Silicon.
Byla vydána verze 12.00 linuxové distribuce SystemRescue, původně SystemRescueCd, určené pro záchranu systémů a dat. Přehled novinek v changelogu. Přidána byla podpora bcachefs, Linux byl povýšen na verzi 6.12.19, GParted na verzi 1.7.0, nwipe na verzi 0.38, dump na verzi 0.4b49, …
Google kupuje společnost Wiz za 32 miliard dolarů.
Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.
Všechny tagy (příkazy, proměnné, komentáře, ...) jsou ve Smarty ohraničovány tzv. oddělovači. Implicitně je jako oddělovač nastavena dvojice {
a }
. Dvojici oddělovačů (i každý zvlášť) lze explicitně změnit pomocí konfigurace. Změnu oddělovačů probereme v této kapitole, další změny nastavení v některé z dalších kapitol, nejspíše však ke konci našeho seriálu. Pro všechny naše příklady, a to jak v dalších dílech, tak i v díle předchozím (úvodním), předpokládejme implicitní nastavení.
Z prvního dílu již víme, jak vypadá inicializace Smarty, proto jsou některé řádky v následujícím výpisu vynechány a skrývají se za ...
. Zdrojový kód indexového
souboru index.php
:
<?php
...
// Vytvoření nového objektu Smarty
// - s tím budeme dále pracovat
$smarty = new Smarty();
...
$smarty->left_delimiter = "<-!-";
$smarty->right_delimiter = "-!->";
...
?>
V tuto chvíli máme explicitně změněny oba oddělovače; jak levý, tak pravý,
a pokud použijeme v šabloně dvojici {
a }
, nebude
její obsah brán jako tag. Od této chvíle musíme používat námi výše
definované oddělovače, tedy <-!-
a -!->
.
Efekt si ukážeme na šabloně hello_world.tpl
z minulého článku:
<!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>Ukázková šablona - hello_world.tpl</title>
</head>
<body>
{* Musime pouzit nove definovane oddelovace - {} je jiz neplatna dvojice *}
<h1>Vítejte <-!-$name-!->!</h1>
</body>
</html>
Tato úprava má svoje výhody i nevýhody. Výhodou může být to, že nyní máme
svůj styl zápisu oddělovačů a tedy i tagů, což může být pro někoho velmi
příjemné, pokud má již zažitý nějaký styl psaní. Jaké jsou nevýhody? Ne
příliš velké, ale jsou. Pokud bychom nevhodně zvolili oddělovače a následně
je chtěli někde použít ve zbytku šablony (HTML), Smarty by se jejich obsah
snažil interpretovat jako nějaký tag, což by bylo zřejmě nežádoucí. Budeme-li
tedy potřebovat někde v textu použít oddělovače, ať už levý nebo pravý,
v textové reprezentaci (ne jako oddělovače pro Smarty), musíme použít zástupné funkce {ldelim}
pro levý oddělovač a {rdelim}
pro pravý oddělovač, samozřejmě se správnými oddělovači. Že to zní složitě? Ano, může tomu tak být. Uvedená věta znamená, že pokud chceme použít v HTML skupinu znaků <-!-
jako text, nikoliv jako oddělovač, musíme použít zápis <-!-ldelim-!->
. Pokud bychom chtěli při implicitním nastavení oddělovačů Smarty ({}
) použít text "toto je proměnná Smarty {$promenna}", zapsali bychom do šablony {ldelim}$promenna{rdelim}
. Doufám, že to nezní moc
složitě či zamotaně, jde mi hlavně o pochopení problematiky na příkladech.
Stejně jako snad v každém jazyce (pár jich znám a nevím o žádném bez
komentářů, i když by se našel určitě nějaký programátorský matador, který
bude mít výhradu) existuje možnost použití komentářů, není tomu jinak ani
ve Smarty. Používat lze jak jednořádkové, tak víceřádkové komentáře. Ve
způsobu zápisu však není rozdíl. Jednořádkový komentář i víceřádkový
komentář musí začínat již výše zmíněným oddělovačem, v implicitním případě
tedy {
následovaným znakem *
, ukončen musí být
dvojicí těchto znaků v opačném pořadí, tedy *
a }
.
Konec řádku tedy neznamená konec komentáře. Veškeré komentáře slouží pouze
uvnitř šablony, tzn. že jejich podoba není interpretována do výsledného HTML
obsahu, který je zobrazen v prohlížeči. Chceme-li, aby naše komentáře
ze šablon byly součásti výsledného HTML, musíme použít zápis komentářů
ve stylu HTML, tedy <!-- Toto je komentář -->
.
Nyní si na několika příkladech ukážeme použití komentářů v praxi (comment_test.tpl
):
<!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>Ukázková šablona - comment_test.tpl</title>
</head>
<body>
{* Toto je jednoradkovy komentar ve Smarty a nebude zobrazen v prohlizeci *}
<-- Toto je jednoradkovy komentar v HTML a bude zobrazen v prohlizeci -->
{* Toto je
viceradkovy komentar
ve Smarty a jak uz vime,
nebude zobrazen v prohlizeci *}
<-- Toto je
viceradkovy komentar
v HTML a opet uz vime,
ze bude zobrazen v prohlizeci -->
{* Samozrejmosti je zakomentovani libovolne casti kodu *}
{*
{include file="footer.tpl"}
*}
</body>
</html>
Závěrem lze ke komentářům konstatovat, že vše, co je mezi {*
a *}
, Smarty ignoruje a je to tedy komentář, ať se jedná
o vlastní poznámku, či zakomentovaný blok kódu.
Všechny proměnné ve Smarty začínají znakem $
a jejich názvy
mohou být sestaveny z čísel, písmen a podtržítek, tedy vše stejné jako
pro proměnné v PHP. Jednotlivé proměnné mohou obsahovat libovolný obsah, není třeba předem definovat, jakého typu daná proměnná bude, o vše se stará Smarty, resp. PHP, pod kterým Smarty běží. Jediný typ proměnných, který nezačíná výše zmíněným znakem $
, jsou tzv. konfigurační proměnné. Ty jsou uloženy ve zvláštním externím souboru a zapisují se ve tvaru #promenna#
(ale to pouze pro upřesnění, o použití konfiguračních souboru si povíme v některé z dalších kapitol).
Bylo již řečeno, že proměnné mohou být několika různých typů. Z nejčastěji používaných v šablonách uvedeme boolean, integer, float, string, pole a objekt. Podrobnější informace a popis dalších typů je k dispozici na webu PHP.
Ukážeme si popis a přístup k proměnným v různých případech:
{$promenna}
{$promenna[9]}
{$promenna.klic}
{$promenna.klic1.klic2}
{$promenna.$klic}
{$promenna->metoda()}
{#promenna#}
{$promenna[iterator]}
($smarty.server.SERVER_NAME)
$smarty
Pomocí rezervované proměnné $smarty
můžeme přistupovat k různým druhům proměnných prostředí a dalších typů. Je to vhodné
zejména proto, že k těmto proměnným můžeme přistupovat přímo, nikoliv
předáváním funkcí assign
ze skriptu PHP. Proměnná
$smarty
nám umožňuje jednoduchý přístup k hodnotám
$_COOKIE
, $_ENV
, $_GET
, $_POST
, $_REQUEST
, $_SERVER
a $_SESSION
. Obrázek prý vydá za tisíc slov, tak snad následující ukázky v podobě kódu také poslouží.
{* Zobrazi obsah promenne 'page' z URL ($_GET) http://www.nejakyserver.cz/index.php?page=smarty *}
{$smarty.get.page}
{* Zobrazi obsah promenne 'page' odeslane z formulare metodou post ($_POST['page']) *}
{$smarty.post.page}
{* Zobrazi obsah promenne 'login' ulozene v cookies ($_COOKIE['login']) *}
{$smarty.cookies.login}
{* Zobrazi obsah promenne 'SERVER_NAME' ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}
{* Zobrazi obsah promenne prostredi 'PATH' *}
{$smarty.env.PATH}
{* Zobrazi obsah promenne 'id' ulozene v session ($_SESSION['id']) *}
{$smarty.session.id}
Proměnné $smarty
můžeme dále využít k výpisu počtu sekund
od začátku epochy (1.1.1970). Výpisu tedy docílíme zápisem $smarty.now
. Dále můžeme přistupovat ke konstantám definovaným ve volajícím PHP skriptu funkcí DEFINE
, a to takto: $smarty.const.jmeno_konstanty
. Nejsme ochuzeni ani o možnost vypsání aktuální verze Smarty: $smarty.version
či právě zpracovávané šablony: $smarty.template
. Existuje ještě
několik možností využití proměnné $smarty
, ale o tom až
v samostatné kapitole, jak bylo avizováno výše.
Na závěr dnešního seriálu se podíváme na funkce. Funkce se zapisují podobně jako proměnné, se kterými jsme se již seznámili, budeme tedy potřebovat všudypřítomné oddělovače. Každá funkce je jiná; nejenže vykonává jinou činnost, ale má, resp. může mít, různý počet parametrů a stejně tak může i nějaké ty hodnoty vracet. Jména vstupních a návratových hodnot je nutné znát. U vestavěných funkcích lze vše dohledat v dokumentaci, u cizích nebo vlastních (které se také naučíme v našem seriálu tvořit) musíme vést vlastní dokumentaci, případně se podívat přímo do kódu funkce, jak které proměnné zpracovává. Syntaxe funkce je {jmeno_funkce par1="hodnota" par2="hodnota" ... parx="hodnota"}
. Kde libovolný parametr, resp. parametry, mohou být vstupní, resp. výstupní; závisí to na funkci a její implementaci.
K jednoduché ukázce použití nám poslouží funkce {include}
,
která vkládá do šablony obsah jiné šablony. Její použití je následující:
{* Nasledujici radek nam do sablony vlozi obsah sablony footer *}
{include file="footer.tpl"}
V průběhu dalších a dalších dílu budeme pracovat z různými funkcemi, takže by neměl být problém si jejich používání osvojit.
V dnešním díle jsme probrali základní syntaxy Smarty, změnu nastavení
oddělovačů, zápis komentářů a jejich vlastnosti, použití proměnných
a přístup k polím, možnosti systémové proměnné $smarty
a způsob
zápisu funkcí, resp. jejich použití. V příštím díle nás čeká použití
matematiky {math}
a modifikátory proměnných.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Diskuse byla administrátory uzamčena
Zas ale chapu argument tvurcu Djanga, kteri nemaji radi pure XML sablony, protoze chteji generovat cisty text (napr. emaily) a ty XML templaty jim zrejme neprolezou tim zpracovanim, kdyz napr. nemaji ty uvodni deklarace (kdo by je v mailu chtel).Ale no, ved naco tu mame <xsl:output method="text"/>?
Why use a text-based template instead of an XML-based one (like Zope's TAL)? We wanted Django's template language to be usable for more than just XML/HTML templates. At World Online, we use it for e-mails, JavaScript and CSV. You can use the template language for any text-based format. Oh, and one more thing: Making humans edit XML is sadistic!Nevim teda, co maji proti editaci XML
<smarty>
, resp. </smarty>
. Příliš to nedoporučuji, doporučuji se spíše držet implicitního nastavení, které není náročné na zdlouhavé psaní dlouhého otevíracího, resp. uzavíracího tagu <smarty>* Toto je komentar s novymi oddelovaci *</smarty>
, kde znak *
je nezbytný.
<!-- Toto je komentář -->Nejak tam vypadol ten výkričník v príklade (rovnako aj pri tom druhom, viacriadkovom komentári).
...
<-- Toto je jednoradkovy komentar v HTML a bude zobrazen v prohlizeci -->