Christian Schaller z Red Hatu na svém blogu popsal své zkušenosti s používáním AI při vývoji open source aplikací pro Linux. Pomocí různých AI aktualizoval nebo vytvořil aplikace Elgato Light GNOME Shell extension, Dell Ultrasharp Webcam 4K, Red Hat Planet, WMDock, XMMS resuscitated (aktualizace z GTK 2 a Esound na GTK 4, GStreamer a PipeWire) a Monkey Bubble. SANE ovladač pro skener Plustek OpticFilm 8200i se mu zatím nepovedl.
Americké firmy Tesla a SpaceX postaví v texaském Austinu moderní komplex na výrobu čipů pro umělou inteligenci (AI). Součástí projektu s názvem Terafab budou dvě moderní továrny na výrobu čipů – jedna se zaměří na automobily a humanoidní roboty, druhá na datová centra ve vesmíru. Uvedl to generální ředitel těchto firem Elon Musk. Projekt by podle odhadů měl stát 20 miliard USD (zhruba 425 miliard Kč).
Byla vydána nová stabilní verze 6.11 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.
Ubuntu 26.04 patrně bude ve výchozím nastavení zobrazovat hvězdičky při zadávání hesla příkazu sudo, změna vychází z nové verze sudo-rs. Ta sice zlepší použitelnost systému pro nové uživatele, na které mohlo 'tiché sudo' působit dojmem, že systém 'zamrzl' a nijak nereaguje na stisky kláves, na druhou stranu se jedná o možnou bezpečnostní slabinu, neboť zobrazování hvězdiček v terminálu odhaluje délku hesla. Původní chování příkazu sudo
… více »Projekt systemd schválil kontroverzní pull request, který do JSON záznamů uživatelů přidává nové pole 'birthDate', datum narození, tedy údaj vyžadovaný zákony o ověřování věku v Kalifornii, Coloradu a Brazílii. Jiný pull request, který tuto změnu napravoval, byl správcem projektu Lennartem Poetteringem zamítnut s následujícím zdůvodněním:
… více »Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 163 (pdf).
Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
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 -->