Byla vydána nová verze 0.4.15 (𝕏) svobodného operačního systému ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows. Přehled novinek i s náhledy v oznámení o vydání.
Byl představen rpi-image-gen, tj. oficiální nástroj pro vytváření vlastních softwarových obrazů pro zařízení Raspberry Pi.
Byla vydána nová major verze 8.0, aktuálně 8.0.1, softwaru pro správu elektronických knih Calibre (Wikipedie). Přehled novinek v poznámkách k vydání. Vypíchnuta je lepší podpora Kobo KEPUB formátu nebo integrovaný lokálně běžící engine Piper pro převod textu na řeč používaný pro čtení nahlas (již od verze 7.18).
Společnost OpenAI rozšířila své API o nové audio modely. Nový model pro převod textu na řeč (text-to-speech model) lze bez přihlašování vyzkoušet na stránce OpenAI.fm.
Příspěvek Bezpečnost paměti pro webové fonty na blogu Chrome pro vývojáře rozebírá, proč se pro zpracování webových fontů v Chrome místo FreeType nově používá v Rustu napsaná Skrifa z Fontations.
V pátek 21. a v sobotu 22. března proběhnou Arduino Days 2025, tj. každoroční „narozeninová oslava“ platformy Arduino. Na programu je řada zajímavých přednášek. Sledovat je bude možné na YouTube. Zúčastnit se lze i lokálních akcí. V sobotu v Praze na Matfyzu.
Komunitná konferencia Bratislava OpenCamp, ktorá sa uskutoční už o tri týždne 5. 4. 2025 na FIIT STU pozná svoj program – návštevníkom ponúkne 3 paralelné behy prednášok a workshopov na rôzne témy týkajúce sa otvoreného softvéru či otvorených technológií.
Časopis MagPi od nakladatelství Raspberry Pi se s číslem 151 přejmenoval na Raspberry Pi Official Magazine. I pod novým názvem zůstává nadále ve formátu pdf zdarma ke čtení.
Japonská SoftBank Group kupuje firmu Ampere Computing za 6,5 miliardy dolarů. Ampere Computing vyrábí 32-128jádrové procesory Ampere Altra a 192jádrové procesory AmpereOne.
Byla vydána (𝕏) nová verze 2025.1a linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek v oficiálním oznámení na blogu.
U větších projektů je vhodné mít oddělenou aplikační vrstvu aplikace od té prezentační. Aby byla práce efektivní, mělo by být cílem, aby mohl grafik nebo tvůrce HTML struktury webu pracovat na projektu bez obavy, že poškodí aplikační kód, a naopak aby grafik nemusel žádat o spolupráci programátora kvůli změnám, které se týkají prezentace dat. Tohoto oddělení můžeme dosáhnout, pokud použijeme šablonovací systém (template engine), např. Smarty.
Smarty je šablonovací systém vytvořený za použití skriptovacího jazyka PHP. Zároveň se jedná o oficiální projekt PHP, o čemž svědčí i adresa projektu http://smarty.php.net/. Jak již bylo řečeno, jeho cílem je oddělit aplikační logiku od obsahu prezentace. Tuto vlastnost lze v praxi vhodně využít rozdělením činností a znalostí různých lidí při společné práci na projektu. Člověk, který nemá zkušenosti s PHP, zároveň však má znalosti HTML, může vytvářet šablony webových stránek bez ohledu na složité implementace v jazyce PHP. Od vývojáře dostane například seznam proměnných a jaké informace obsahují, aby jim dokázal přizpůsobit šablonu. Způsob, jakým jsou data načtena z databáze, pro něho není důležitý. Webová prezentace je díky tomuto oddělení více přehledná a snadněji modifikovatelná. Programátor může měnit aplikační logiku bez toho, aby bylo nezbytné upravovat šablony, a návrhář šablon může upravovat šablony bez toho, aby se musel orientovat v aplikačním kódu PHP.
I když je Smarty určen k oddělení aplikační a prezentační logiky, není omezen pouze na tvorbu šablon pomocí HTML značek. Šablonovací stroj umožňuje použití řídících struktur, cyklů, vestavěných funkcí pro práci s řetězci, časem apod. Použití funkcí v prezentační části není omezené, a to díky tzv. pluginům. Několik je jich obsaženo v základní distribuci, ostatní si lze doprogramovat - jak jinak než v PHP.
Hlavní síla Smarty se skrývá v možnosti kompilace šablon. Smarty vytváří pro každou použitou šablonu (pokud není tato možnost vypnuta) zkompilovaný tvar, což je běžný PHP skript, a ukládá ho do speciálního adresáře. Je-li daná šablona použita znovu, neprobíhá zpracovaní klasické šablony, ale je použita její kompilovaná verze, čímž je dosaženo větší rychlosti. Alternativou ke kompilování šablon je cachovaní obsahu. Principiálně se jedná o stejný postup, nejsou však vytvářeny PHP skripty, ale HTML.
Abychom mohli využívat systém Smarty, musí nám na serveru běžet PHP 4.0.6
nebo vyšší, což by v dnešní době nemělo činit žádný problém. Poslední verzi
Smarty nalezneme na adrese http://smarty.php.net/download.php. Stáhneme si archív Smarty-x.y.z.tar.gz
a rozbalíme. Nejdůležitějším adresářem celého archívu je libs
, který obsahuje všechny potřebné soubory pro použití Smarty:
Config_File.class.php
- třída pro zpracování konfiguračních souborůdebug.tpl
- šablona pro výpisy debugeruSmarty.class.php
- hlavní třída SmartySmarty_Compiler.class.php
- třída pro kompilování šablonAdresář libs
dále ještě obsahuje adresáře plugins
a internals
. V nich nalezneme rozšiřující pluginy, modifikátory a funkce. Smarty vlastně není potřeba nijak složitě instalovat. Stačí rozbalit archív, překopírovat na server, vytvořit adresáře pro šablony, konfigurace a cache, includovat hlavní Smarty třídu do skriptu, nastavit cesty k adresářům a můžeme začít Smarty používat.
Jak již bylo naznačeno, Smarty ke své práci využívá tzv. pracovní adresáře, které slouží k načítání šablon, načítání konfiguračních souborů, ukládání cache a zkompilovaných šablon. Z tohoto důvodu je nezbytné do adresářů pro ukládání cache a zkompilovaných šablon povolit zápis, jinak by došlo k chybě.
Implicitně jsou tyto adresáře nazvány takto:
templates
- adresář obsahující šablonytemplates_c
- adresář obsahující zkompilované šablonycache
- adresář pro cache (nepovinné)configs
- adresář obsahující konfigurační soubory (nepovinné)Výše uvedené pojmenování adresářů lze brát za doporučené, každý programátor si může tyto adresáře pojmenovat podle svých zažitých konvencí. Důležité je systému šablon "říci", který adresář má pro jako svoji činnost použít.
Abychom při prvním testování Smarty neudělali zbytečné chyby, které by nás mohly odradit od používání šablon, rozebereme si detailněji, jak vypadá obsah našeho adresáře na serveru. Předpokládejme server umístěný v adresáři /home/www/example/
s následující stromovou strukturou:
/home/www/example
|
+- templates
| +- hello_world.tpl
+- templates_c
+- cache
+- configs
+- Smarty-2.6.14
| +- libs
+- index.php
Zdrojový kód šablony hello_world.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 - hello_world.tpl</title>
</head>
<body>
<h1>Vítejte {$name}!</h1>
</body>
</html>
Smarty používá konstantu SMARTY_DIR
, která obsahuje celou cestu k adresáři libs/
. Pokud se podaří bez problému načíst hlavní třídu Smarty.class.php
, není potřeba tuto konstantu definovat a používat. V případě, že dojde k chybě, například tím, že umístění Smarty.class.php
neodpovídá include_path
, je nutné SMARTY_DIR
nadefinovat ručně a použít.
Zdrojový kód indexového souboru index.php
s použitím SMARTY_DIR
:
<?php
// Ruční nastavení konstanty SMARTY_DIR
define("SMARTY_DIR", "/home/www/example/Smarty-2.6.14/libs/");
// Načtení třídy Smarty
require(SMARTY_DIR . "Smarty.class.php");
// Vytvoření nového objektu Smarty - s tím budeme dále pracovat
$smarty = new Smarty();
// Nastavení adresáře pro šablony
$smarty->template_dir = "./templates";
// Nastavení adresáře pro zkompilované šablony
$smarty->compile_dir = "./teplates_c";
// Nastavení adresáře pro cache
$smarty->cache_dir = "./cache";
// Nastavení adresáře pro soubory s konfigurací
$smarty->config_dir = "./configs";
// Přiřazení hodnoty Smarty proměnné name - viz hello_world.tpl
$smarty->assign("name", "Tomáši");
// Zobrazení šablony
$smarty->display("hello_world.tpl");
?>
Pokud vše proběhlo bez problémů a dle očekávání, dostaneme takovýto výstup:
<!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>
<h1>Vítejte Tomáši!</h1>
</body>
</html>
Cílem tohoto článku nebylo detailní a obsáhlé popisování šablonovacího systému Smarty - spíše stručné nastínění toho, o co se jedná. S jednoduchou ukázkou ve stylu "Hello world", která bývá již takovou nedílnou součástí úvodních dílů, aby si potenciální programátor (uživatel nového systému) vyzkoušel svůj první skript. V příštím díle se na použití Smarty zaměříme více prakticky. Podíváme se na práci s komentáři, proměnnými a volání jednoduchých funkcí, možná i něco více.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Ak máte dobrú architektúru PHP aplikácie, napríklad MVC, tak žiadny template engine nepotrebujete.
Ak máte dobrú architektúru PHP aplikácie, napríklad MVC, tak žiadny template engine nepotrebujete.V clancich, na ktere odkazujete, si autor templating engine napise sam, misto aby pouzil jiny, tak o co jde? Paradigma MVC princip sablony IMHO implicitne vyzaduje.
na začátku souboru naplním proměnné a na konci už mám jenom HTML kód a výpis proměnných. Přípaně můžu část s HTML kódem a výpisem proměnných includovat z odděleného souboru.A to vam vubec nevadi nehorazna neprehlednost tohohle paskvilu? Vsechny ty echa, prepinani kontextu PHP/XHTML a dalsi blbosti? Templatovani je suverenne nejprehlednejsi zpusob oddeleni controlleru a view.
Results found: <?=$total_rows ?><br> <? if (count($rows) > 0): ?> <? foreach ($rows as $row): ?> <?=$row['last_name'];?> <? endforeach; ?> <? endif; ?>
Ako som uviedol v mojom predchádzajúcom príspevku, je to len záležitosťou správnej architektúry celej aplikácie. To čo som vám ukázal je skutočne všetko čo môže použiť u nás HTML designer.
Dúfam že ste to pochopil a postúpil z kategórie "cvičená opica".
HTML designér musí byť schopný naučiť sa PHP echo, if-else, foreach.Blbosť, template systém by mal byť nezavislým rozšírením HTML. To, že je php jazyk pre idiotov neznamená, že ho musí ovládať každý.
<tmpl:foreach name="blabla_list"> <option><tmpl:variable name="value"/></option> </tmpl:foreach>a programátor by si to už mal vedieť skonvertovať (v najhoršom XSLT do Smarty)
Žádným slušným slovem nelze nazvat počin génia, který se snaží oddělit prezentační vrstvu a vrstu logiky a skončí tím, že do prezentační vrtvy začne cpát cykly, formátovací funkce, rozhodovací bloky a jiné pičičurinky.Nejak mi uniklo, ze to vypustil nekdo jiny.
Samozdrejme, ze business logika mezi html byt nema, ale zase na druhou stranu stranka muze ruzne vypadat pri ruznych podminkach. Samozdrejmne ty podminky si musi programator predem rozhodnou v business logice - do sablony musi jit uz hotova rozhodnoti.
Bohuzel jsem jiz kody, kde se tabulka tvori primo pri nacitani dat z databaze videl.
Jeste bych zminil jednu super vec, kterou mohou sablony poskytnout - muzete mit obecnou obalku stranek a do te pak jen zasazovat konkretni moduly. To sice smarty nema dotazene do dokonalosti - neni to prece oplny obecny framework, ale urcite to lze pouzit.
Žádným slušným slovem nelze nazvat počin génia, který se snaží oddělit prezentační vrstvu a vrstu logiky a skončí tím, že do prezentační vrtvy začne cpát cykly, formátovací funkce, rozhodovací bloky a jiné pičičurinky.cykly? ako by ste chcel inak vypisovať x častí rovnakého typu ? (príklad: články, novinky)
escape=url, escape=html
ano, zvyšok niečo sa týka šablón, jediná knižnica, čo ma svojimi vlastnosťami ako tak uspokojila, je HTML::Template (ale to sa netýka php)
jednoho dne budou posílat jen to původní XML a příslušný XSLT. To se ale nikdy nestane - je to slepá uličkaŽe tohle už dnes v prohlížečích funguje, to vás asi moc netrápí, že?
input=text
, cokoliv složitějšího (už i ten seznam), vyžaduje složitější manipulace. Pravda, taky je to AJAX, ale většinou si pod AJAXem člověk představí nějaké složitější GUI komponenty.
Jak se zotaví aplikace v prostředí client-server?Před započetím déletrvající operace uživatele o déletrvající operaci informuje (to v AJAXu lze), v okamžiku korektního ukončení operace tuto informaci skryje (to v AJAXu lze), v okamžiku nekorektního ukončení tuto informaci taky skryje a zobrazí chybovou zprávu (v AJAXu nelze), a umožní uživateli akci zopakovat (v AJAXu lze, ale nikdo neví, jak to dopadne), v průběhu celé operace informuje uživatele o jejím průběhu (v AJAXu nelze) a umožní jí přerušit (v AJAXu nelze).
Vám běžně chodí jen půlky stránek a skriptů?Ano, běžně.
Mimochodem TUI s klávesovými zkratkami je prototypem velmi vhodného a vysoce produktivního prostředí.Vysoce produktivní prostředí je do určité míry komplexity systému/ů. Pokud uživatel používá více systémů nebo je systém rozsáhlý, je množství naučených postupů nezvládnutelné. Mimoto AJAX klávesové zkratky umožňuje používat jen v omezené míře, přitom klávesové zkratky jsou právě to, co činí ono TUI s klávesovými zkratkami vysoce produktivním prostředím.
pokud výhodu AJAXu vidíte pouze v možnosti vytvářet i velmi složité, obskurní widgety?Naopak, v nemožnosti AJAXu vytvářet vysoce efektivní a provázané widgety vidím jeho nevýhodu.
Opravdu? Viděl jste někdy opravdu enterprise aplikaci, velký informační systém?Viděl už jsem dost informačních systémů, které se nezabývali právě takovými drobnostmi, jako je práce se schránkou, klávesové zkratky, ovládání klávesnicí nebo myší, změna velikosti oken, multi document interface, rychlé přepínání mezi detailem a celkem. A pracovat se s nimi sice dalo, ale bylo to hodně neefektivní.
Můžete mi napsat proč by nemělo být možné monitorovat déletrvající operaci? Je to komplikovanější, jedná se o asynchronní proces, ale pokud použijete kontrolní spojení, pak to možné prostě je.Možné to není. Kontrolním spojením můžete monitorovat odesílání ze serveru, ale pro monitoring je důležité monitorovat příjem u klienta – a tam máte jen dva stavy – počátek a konec. Nic mezi tím nezjistíte. Navíc prohlížeče i servery mají obvykle nastaven limit pro počet současných spojení, takže s těmi kontrolními spojeními se také musí zacházet opatrně.
Stejně jako je možné operaci přerušit. Je to sice náročnější na server, ale pokud je to nezbytné, co naděláte.Opět – můžu přerušit vysílání, ale ne příjem. I když přeruším vysílání, pořád ještě musím zpracovat a zahodit již odeslaná data.
Můžete proti AJAXu argumentovat, ale Vámi popisované nevýhody jsou obecné AJAX nespecifické nevýhody technologie nad HTTP.Tohle konkrétně jsou nevýhody specifické pro AJAX, jiné technologie komunikující přes HTTP umožňují sledovat množství přenesených dat, nastavit timeouty spojení, dozvědět se, že se spojení přerušilo atd.
Dokud zde nebude něco jiného, obdobně silně standardizovaného a 100% kompatibilního, pak se jedná o čistě akademickou diskusi.Nikdy jsem netvrdil, že tady nyní něco lepšího máme. Říkal jsem jen to, že AJAX je sice zatím to nejlepší, ale je to z nouze ctnost a než vymýšlet, jak vylepšit nevylepšitelný AJAX, je potřeba zaměřit se na vývoj něčeho nového, co bude vytvořeno s ohledem na tvorbu GUI a interaktivitu.
Co to je prerusit vysilani, prerusit prijem? Vy snad dokazete prerusit predavani parametru a navratovych hodnot mezi procedurami v desktop aplikaci.V desktop aplikaci můžu důvodně očekávat, že volání funkce bude trvat v řádu milisekund. Při asynchronní komunikaci musí počítat s tím, že může trvat sekundy i desítky sekund.
Copak XMLHttpRequest neumoznuje nastavit timeout?Ne.
Copak nedokazete zjistit mnostvi dat prenesenych timto kanalem.Ne.
A co si asi myslite, ze XMLHttpRequest vlastne je? Jak se asi lisi od bezneho GET/POST pozadavku? … Jinak se jedna o bezny HTTP request, to XML je tam jaksi nedopatrenim navicBěžný HTTP request umožňuje odesílat i přijímat proud dat (postupné zpracování), nastavovat timeouty apod. Tj. umožňuje mi řídit přenos dat – ne jen dát nějaký požadavek a pak se modlit, abych v dohledné době dostal odpověď. XMLHttpRequest má sice navíc XML, ale hlavně mu spousta podstatných funkcí oproti HTTP requestu chybí! (Resp. má je skryté v interní implementaci, nedostupné pro AJAX aplikaci.))
XMLHttpRequest umoznuje samozrejme nastavit timeout.Jak?
XMLHttpRequest object obsahuje metodu abort, a pozadavek lze tudiz stornovat naprosto kdykoliv. A protoze muzete pozadavek zaslat jako asynchronni neblokujici, je jen na Vas, jaky timeout si nastavite a ve kterem okamziku pozadavek stornujete.Timeout v síťové komunikaci má být ochranou před nečekaným výpadkem komunikace. Takže jediná rozumná implementace timeoutu je měření doby, která uplynula od posledních přijatých dat. Pokud nastavíte "externí" timeout (tj. čas vůbec není svázán se síťovou komunikací), jako to můžete udělat pro
XMLHttpRequest
s metodou abort()
, můžete nastavit nějaký pevný čas, takže se komunikace bude zbytečně přerušovat při posílání většího množství dat nebo zatížené síti, nebo si musíte předem zjistit množství dat a podle něj nastavit timeout, nebo timeout řídit z dalšího spojení. Ani jedno není zrovna efektivní.
Navíc mám pocit, že abort()
se v některých implementacích choval divně a stahování přerušil jen zdánlivě, ve skutečnosti se skrytě stejně stáhl soubor celý. Ale to už je možná vpořádku.
http://www.nusphere.com/products/phpdock.htmPHP zrovna nemusím, ale koukám, že už je to nějaký pátek, co jsem s ním dělal, a že už od té doby existují asi i dobrá IDE.
Jinak, díky za diskusi.Rádo se stalo, nápodobně.
většinou si pod AJAXem člověk představí nějaké složitější GUI komponenty.bohuzel
doufají, že jednoho dne budou posílat jen to původní XML a příslušný XSLTNo, pokud jako jedine vyuziti XSLT vidite transformaci jednoho XML souboru jednim XSL souborem a pak poslani do prohlizece, tak pak se neni co divit vasim recim.
(html) (head)(/head) (body) (h1)(/h1) (/body) (/html)
(html (head (title "Titulek")) (body (h 1 "Nadpis")))