Bylo vydáno OpenBSD 7.8. S předběžnou podporou Raspberry Pi 5. Opět bez písničky.
Valkey (Wikipedie) byl vydán v nové major verzi 9.0. Valkey je fork Redisu.
Byly publikovány informace o kritické zranitelnosti v knihovně pro Rust async-tar a jejích forcích tokio-tar, krata-tokio-tar a astral-tokio-tar. Jedná se o zranitelnost CVE-2025-62518 s CVSS 8.1. Nálezci je pojmenovali TARmageddon.
AlmaLinux přinese s verzí 10.1 podporu btrfs. XFS bude stále jako výchozí filesystém, ale instalátor nabídne i btrfs. Více informací naleznete v oficiálním oznámení.
Společnost OpenAI představila svůj vlastní webový prohlížeč ChatGPT Atlas. Zatím je k dispozici pouze na macOS.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.5 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Rodina jednodeskových počítačů Orange Pi se rozrostla (𝕏) o Orange Pi 6 Plus.
Na Humble Bundle běží akce Humble Tech Book Bundle: All Things Raspberry Pi by Raspberry Pi Press. Se slevou lze koupit elektronické knihy od nakladatelství Raspberry Pi Press a podpořit Raspberry Pi Press, Raspberry Pi Foundation North America nebo Humble.
Přidaný režim autonomního řízení vozidel Tesla Mad Max je dostupný pro vybrané zákazníky v programu EAP (Early Access Program). Nový režim je na silnici agresivnější, častěji mění pruhy a ne vždy dodržuje rychlostní limity. Agentura JPP spekuluje, že v Česku by se mohl nový režim namísto Mad Max jmenovat Mad Turek...
Byla vydána nová verze 9.18 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Nově také pro NanoPi R3S, R3S LTS, R76S a M5. Přehled novinek v poznámkách k vydání.
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)$smartyPomocí 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
Samozřejmě, že tolik logiky v přirozeném jazyku nehledám.
Hm, zákonitosti sa nájdu, ale to ešte nerobí z odboru vedu. Ale to je len o slovíčkach.
Btw, vývoj jazykov mám ho dosť rád. Niekedy si len tak listujem v anglickom výkladovom slovníku a pozerám si pôvod slov
Alebo vývoj Tolkienových jazykov tiež stojí za to.
A taky si občas zaplavu ve slovníku:
In a more restricted sense: A branch of study which is concerned either with a connected body of demonstrated truths or with observed facts systematically classified and more or less colligated by being brought under general laws, and which includes trustworthy methods for the discovery of new truth within its own domain.
(Tzv. ubíjení argumenty.
)
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
Pamatujte však, že v případě tohoto nastavení, bude pak komentář vypadat takto: <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 -->