Navigace

Hlavnφ menu

 

P.E.T. - jednoduch² Üablonovacφ systΘm v PHP

O p°φΦinßch a d∙le₧itosti odd∞lovßnφ dat od zpracovacφch funkcφ a prezentaΦnφho rozhranφ u₧ se toho napsalo mnoho. ProblΘmem takzvan²ch Üablonovacφch systΘm∙ je ovÜem jejich slo₧itost, kterß na jednu stranu poskytuje jist² komfort, na druhou stranu vÜak brßnφ snadnΘmu pochopenφ a vyu₧itφ t∞chto moloch∙ ve vlastnφch aplikacφch. Proto bych vßs cht∞l seznßmit se systΘmem P.E.T., kter² zvlßdß mnohΘ a p°itom se jej nauΦφte b∞hem n∞kolika minut.

P.E.T. je zkratkou pro anglickΘ Processor Engine for Templates, aΦkoli autor systΘmu tvrdφ, ₧e P.E.T. je nejen zpracovacφm nßstrojem, ale zßrove≥ jazykem pro tvorbu Üablon. Cel² systΘm je vlastn∞ jednou jedinou t°φdou o t°ech parametrech a devφti metodßch. Primßrn∞ je P.E.T. zam∞°en pro prßci s (X)HTML, nicmΘn∞ jej lze dφky jeho jednoduchosti pou₧φt pro p°φpravu jakΘhokoli v²stupu. Je ovÜem pravdou, ₧e se naprosto ideßln∞ hodφ pro modernφ webovΘ strßnky v beztabulkovΘm layoutu, pro jejich linearitu.

èablony a znaΦkovßnφ

V dalÜφm textu si p°edvedeme vyu₧itφ P.E.T. na fragmentech jednoduchΘho (X)HTML souboru. ZaΦneme zßpisem specißlnφch konstrukcφ, kterΘ budou v Üablon∞ chßpßny jako °φdφcφ instrukce. V podstat∞ existujφ jen t°i, pro vlo₧enφ jednoduchΘho ·daje, pro smyΦku, kterß opakovan∞ vlo₧φ vyznaΦen² k≤d dopln∞n² o p°ipravenß data, a pro SSI, co₧ je vlastn∞ jin² soubor, jeho₧ obsah mß b²t do Üablony zaΦlen∞n. To vÜe se zapisuje formou b∞₧nΘho komentß°e.

  • Vlo₧enφ jednoduchΘ hodnoty, nap°φklad jmΘna:
    Dnes mß svßtek <!-- {oslavenec} -->!
  • Vlo₧enφ opakujφcφ se sekvence, kterß m∙₧e obsahovat nap°φklad v²pis polo₧ek telefonnφho seznamu (smyΦky se mohou vno°ovat a jejich provßd∞nφ trvß tak dlouho, dokud jsou k dispozici vklßdanß data):
    <ul>
    <!-- begin loop {osoby} -->
       <li><!-- {jmeno} -->
          <ul>
             <!-- begin loop {cisla} -->
             <li><!-- {telefon} --></li>
             <!-- end loop -->
          </ul>
       </li>
    <!-- end loop -->
    </ul>
  • Vlo₧enφ externφho souboru:
    <!--#include virtual="menu.htm" -->

P°φprava dat

P°φprava dat spoΦφvß v naΦtenφ t°φdy P.E.T., zalo₧enφ objektu typu "pet", provedenφ u₧ivatelskΘho skriptu a p°i°azenφ dat objektu. Pokud vyjdeme z v²Üe uveden²ch p°φklad∙, vystaΦφme si z hlediska P.E.T. se t°emi metodami. Nejprve musφme naΦφst t°φdu a zalo₧it objekt:

require_once('class_pet.eng.inc.php');
$template = new pet;

Nßsledn∞ p°ikroΦφme k zφskßnφ dat, kter²mi se bude plnit naÜe Üablona. K tomu budeme pot°ebovat jednoduchou hodnotu se jmΘnem oslavence a dataset, jeho₧ obsahem bude seznam lidφ a jejich telefonnφch Φφsel. (V p°φkladu si pot°ebnΘ prom∞nnΘ jednoduÜe vyrobφme, v reßlu bychom je zφskßvali nejspφÜe z n∞jakΘho externφho zdroje, nap°φklad databßze.) Tato data pak p°i°adφme naÜemu objektu:

$oslavencovo_jmeno = 'Jana';
$template->add_content($oslavencovo_jmeno, 'oslavenec');

$osoby['jmeno'][] = 'Pavlφna';
   $subarray['telefon'][] = '526895361';
   $subarray['telefon'][] = '156395742';
   $osoby['cisla'] = $subarray;
$seznam[] = $osoby;
   unset($osoby['cisla']);
$osoby['jmeno'][] = 'Hana';
   $subarray['telefon'][] = '434343844';
   $subarray['telefon'][] = '737375187';
   $osoby['cisla'] = $subarray;
$seznam[] = $osoby;
   unset($osoby['cisla']);
$template->add_content($seznam, 'osoby');

Poslednφm krokem p°ed velk²m finßle je naΦtenφ Üablony, se kterou majφ b²t data slouΦena. To se za°φdφ snadno:

$template->read_file('kamaradky.tpl.htm');

Zpracovßnφ a v²stup

V tΘto chvφli mßme objekt, kter² obsahuje vÜechna naÜe data a Üablonu, do kterΘ je chceme umφstit, tak°φkajφc v surovΘm stavu. Pomocφ r∙zn²ch metod m∙₧eme s p°ipraven²m obsahem manipulovat (nap°φklad jej exportovat do souboru a podobn∞), my ale pou₧ijeme pouze metodu pro slouΦenφ Üablony s daty a v²stup hotovΘ strßnky:

$template->parse();
$template->output();

Jak vidφte, prßce s P.E.T. je skuteΦn∞ jednoduchß. Velikost a provedenφ P.E.T. umo₧≥ujφ jeho vyu₧itφ jak pro rychlou p°φpravu jednoduch²ch strßnek, tak i jeho snadnou integraci do v∞tÜφch aplikacφ, kde lze zßkladnφ t°φdu podle pot°eby upravit nebo doplnit o chyb∞jφcφ funkΦnost - aΦkoli osobn∞ se domnφvßm, ₧e ve v∞tÜin∞ p°φpad∙ postaΦφ to, co P.E.T. u₧ umφ.

Dokumentaci, p°φklad a t°φdu samotnou si m∙₧ete stßhnout bu∩ ze strßnek P.E.T. na SourceForge.net nebo p°φmo z Intervalu. V druhΘm p°φpad∞ budete zv²hodn∞ni tφm, ₧e jsem vÜechny materißly zabalil do jednoho archivu a navφc jsem do Üablony doplnil chyb∞jφcφ °ßdek Φφslo 373 (p°φkaz "else").

Mßlek, VilΘm (21.11. 2003)
ÜΘfredaktor Interval.cz