Zend’s PHP 5 Coding Contest – trochu méně teorie a více praxe

24. prosince 2004

V předchozích článcích jsem se soustředil na dva z výherců Zend’s PHP 5 Coding Contest, tedy aplikace PRADO a wtcSQLite, v tomto článku bych se chtěl podívat na několik menších aplikací, které sice neobsadily čelní místa, ale dle mého názoru jsou výborně využitelné v praxi, popřípadě pro výukové účely, a nejsou jen akademickým programátorským konceptem, jako tomu je v případě PRADO frameworku.

V čem jsou tyto Zend PHP 5 aplikace zajímavé?

Různých PHP skriptů v GNU GPL, či jiné licenci, můžeme na internetu nalézt neuvěřitelné množství a v neuvěřitelné „kvalitě“, stačí se podívat na hotscripts.com, free-php.net nebo scriptwiz.com, kde naleznete skripty psané pro PHP verze nižší než 4.0.6, vyžadující register globals on, kde jsou v layoutu navíc používány tabulky, průhledné GIFy a podobné konstrukce.

Ty projekty, na které bych chtěl v tomto článku poukázat, jsou psány moderně, objektově, pro PHP 5, mají databázový layer a počítají tudíž s různými databázemi (MySQL 4.0, MySQL 4.1, SQLite, PostgreSQL), používají nová PHP rozšíření (třeba SimpleXML, DOM), a mají typicky XHTML 1.0 Strict validní výstup. Mohou tedy sloužit jako základ pro vaši aplikaci, popřípadě jako projekt, na kterém se PHP 5 můžete naučit.

Crafty – šablonovací (template) systém

Žádný dobrý systém pro správu obsahu nevypisuje informace „natvrdo“, ale používá pro zobrazení šablony, které mohou oprávnění uživatelé v redakčním systému editovat. Crafty Thomase Ilsche je template systém napsaný objektově v PHP 5, který, kromě samozřejmé definice šablony a jednorázových substitucí proměnných v šabloně za jejich konkrétní hodnoty, umí i desítku modifikátorů v šablonách (trunc, rand, floor), umí bloky, vložené bloky (blok v bloku – třeba vnořená tabulka v tabulce), seznamy a má podporu pro formuláře a jejich komponenty.

Příklad šablony v Crafty se dvěma bloky:

[BLOCK main]
      {blocklist $var_bl.bt var_bl}
[BLOCK_END]
[BLOCK entry_1]
<div style=“color:red“>
      Key: {$key}
      Value: {$value}
      Bt: {$bt}
</div>
[BLOCK_END])
[BLOCK entry_2]
<div style=“color:blue“>
      Key: {$key}
      Value: {$value}
      Bt: {$bt}
</div>
[BLOCK_END]

Následuje ukázka naplnění uvedené šablony hodnotami a její zobrazení. Povšimněte si specifikace jednoho bloku var_bl a dvou seznamů entry_1 a entry_2. Bloků i seznamů může být samozřejmě v jedné šabloně neomezený počet a přiřazení hodnot jednotlivým blokům lze provést v libovolném pořadí.

<?php
   require_once(‚Crafty.class.php‘);
   $Crafty = new Crafty(‚crafty‘. DIRECTORY_SEPERATOR);
   $Crafty->append(‚var_bl‘,array(‚number‘ => ‚nula‘,’bt‘ => ‚entry_1‘));
   $Crafty->append(‚var_bl‘,array(‚number‘ => ‚jedna‘,’bt‘ => ‚entry_2‘));
   $Crafty->append(‚var_bl‘,array(‚number‘ => ‚dva‘,’bt‘ => ‚entry_2‘));
   $Crafty->append(‚var_bl‘,array(‚number‘ => ‚tři‘,’bt‘ => ‚entry_1‘));
   $Crafty->display(‚index.tpl‘);
?>

Crafty je snadno použitelný a snadno rozšiřitelný objektový šablonovací systém pro menší projekty nebo pro lidi, kteří chtějí PHP 5 lépe poznat.

DomPDF – konverze HTML, formátovaného pomocí CSS, do PDF

Projekt DomPDF, jehož autorem je Benj Carson, umí s využitím DOM PHP extension převádět HTML, včetně formátování a základních CSS 2.1 vlastností, do formátu PDF programu Adobe Acrobat. Nejlepší na tomto projektu je právě jeho podpora pro CSS, DomPDF umí načíst inline i externí CSS soubory, zpracovat je pomocí DOMu a pomocí modifikované třídy Wayne Munroa je převést do PDF.

DomPDF projekt doporučuji ke shlédnutí nejen těm, kteří jej použijí jako základ pro své řešení pro převod HTML zdrojů formátovaných pomocí CSS do PDF, ale i těm, kteří se chtějí seznámit s tím, jak se v praxi používá DOM rozšíření.

Jediné nutné přizpůsobení pro české podmínky je vygenerování českých afm souborů (metriky fontů, pro kódování CP1250 nebo ISO-8859-2). Osobně jsem toto bez problémů zvládl na základě návodu Adding new fonts and encoding support na fpdf.org (postačí fonty Courier, Helvetica a Times) při použití TTF fontů z Windows XP jako zdrojových.

Hive – webové komponenty a včeličky

Framework Hive Roberta Janeczeka je podobný konceptu PRADO, nicméně přidává k tomuto konceptu trochu své sympatické objektové a socketové šílenosti. Obsahuje totiž nejen template a komponentový systém, ale díky podpoře pro socketovou komunikaci umožňuje i propojení komponent mezi sebou, třeba i mezi různými servery. Říkám socketová šílenost proto, že si osobně nedokážu představit, kde bych něco takového použil, ale vypadá to moc zajímavě.

Konfigurace Hive je, stejně jako u PRADO, navržena pomocí XML souborů a Flexy šablon. Každá komponenta má navíc své „včeličky“ (bees), které mají přiřazeno své unikátní clsid, a tyto včeličky si potom mezi sebou posílají zprávy (existuje centrální registr oprávněných clsid, které včeličky mohou použít). Včeličky umí samozřejmě naslouchat i vysílat.

Kdo by si jen pomyslel, že toto lze zrealizovat v PHP?!

PCubed – jednoduchá fotogalerie

Fotogalerie PCubed Michaela Gaoa je velice jednoduchá fotogalerie, která umí pomocí GD2 vytvořit náhledy obrázků a obrázky automaticky zobrazit a zoomovat. Obrázky stačí nahrát pomocí FTP klienta na server, názvy galerií jsou brány z názvů adresářů, popřípadě z konfiguračních XML souborů, a je možné rovněž vytvářet subgalerie (podadresáře).

Výstup fotogalerie je well-formed XHTML 1.1, horší je to s PHP 5 kódem. Jde sice o v praxi použitelnou aplikaci, ale rozhodně se podle ní neučte psát vlastní PHP kód.

ZoomIt – složitější fotogalerie

Aplikace ZoomIt, kterou napsal Aldemar Bernal, je po funkční stránce zajímavější fotogalerií než PCubed, na druhou stranu ale potřebuje pro svoji činnost databázi (MySQL, SQLite nebo PostgreSQL). Na rozdíl od PCubed umí registrovat uživatele, publikovat komentáře k fotografiím a sledovat, které fotografie jsou nejpopulárnější. Nicméně, ZoomIt má také svoje ale – základní template je totiž tabulkový výtvor v HTML 4.01 s řadou JavaScriptových událostí vygenerovaných Macromedia Dreamweaverem. Aplikace nepoužívá šablony a prezentační kód je navíc natvrdo napsaný v PHP souborech, takže se ho jen tak jednoduše nezbavíte.

Jak je vidět, ani jedna z představených galerií není ideální, PCubed je příliš funkčně primitivní, i když s well-formed XHTML výstupem, a ZoomIt zase vcelku funkčně dostatečná, ale velice špatně napsaná po stránce přístupnosti, použitelnosti a validity.

Kvalitní, funkční a XHTML 1.1 validní galerie v GNU GPL licenci zatím neexistuje, takže pokud byste takovou chtěli, museli byste si ji naprogramovat sami. Pokud vám ale XHTML a validita nic neříká a nevadí vám HTML kód natvrdo napsaný v PHP namísto v šablonách, můžete být s touto galerií spokojeni.

HTML/XML Validator – validace HTML a automatický převod na XHTML

Aplikaci HTML/XML Validator napsal Nuno Lopes. HTML/XML Validator umí validovat a opravovat HTML, XHTML a XML soubory a převádět HTML na XHTML. Úspěšnost je přitom závislá na verzi knihovny Tidy, kterou tato aplikace potřebuje ke své činnosti.

HTML/XML Validator obsahuje i implementaci xdiff, takže při opravě a změně HTML kódu na XHTML vám může ukázat jen rozdílové položky. Je to v praxi použitelná aplikace, i když nadstaveb nad Tidy už existuje poměrně dost (například wxTidy).

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek 2000b
Další článek ufouni.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *