Typoscript vs. PHP & HTML

tomaj on July 9th, 2008

Pred pár dňami som riešil s jedným človekom vhodnosť použitia TYPO3 na jeden jeho projekt. Pýtal sa celkom zaujimavé otázky. Jedna z nich ma celkom oslovila: “načo typoscript, keď stačí php a html?“. Samozrejme je pravda, že so samotným php a html sa dá spraviť všetko čo sa dá typoscriptom. Ale otázka je čo je efektívnejšie… Nemyslím teraz vo výkone, ale v úspore času programátora. Jednoznačne je podľa mna pre človeka čo už vie typoscript, časovo efektívnejšie spraviť niektoré veci cez typoscript ako v samotnom php.

Typoscript je deklaratívny jazyk. To si treba hneď na začiatku uvedomiť. Nie je to procedurálny jazyk ako PHP, takže veci ako napríklad cykly v ňom nenájdeme. Preto je tažké tieto jazyky nejak porovnávať. Jeho primárnou úlohou je popísať stránku spolu s ďalšímy objaktami a ich vlastnosťami z ktorých bude táto stránka zostavená. Z nich sa potom po transformácií vygeneruje požadovaný výsledok. Čiže typoscript sám o sebe nerobi vôbec nič. Slúži iba na popísanie objektov s ich vlastnosťami pre ďalšie spracovanie. Má stromovú štruktúru.

Takže krátka ukážka typoscriptu:

page = PAGE
page.typeNum=0
page.10 = TEXT
page.10.value = Hello world
page.20 = TEXT
page.20.value = a dalsi text...

Takáto jednoduchá šablona nerobí nič iné ako vygeneruje stránku na ktorú vypíše 2 vety. Každá typoscriptova šablóna musí obsahovať “objekt” PAGE. V príklade sa tomuto objektu nastavuje vlasnosť typeNum a potom sa v ňom vytvoria ďalšie 2 objekty typu TEXT na pozíciach 10 a 20. Tieto pozície sa dajú chápať ako číslovanie riadkov v starodávnom basicu ;-) To znamené, že vo výsledku budú tieto objekty zoradené poďla pozície, nie podľa riadku na ktorom boli definované. Nechem nejak hlboko popisovať typoscript keďže ide o pomerne komplikovnú vec. Viac sa dá dočíťať napríklad na oficiálnej dokumentácii.

Reálna ukážka

Prechádzajúci príklad slúžil len ako jednoduchá ilustrácia typoscsriptu, aby bolo jasné o čo asi ide. Teraz som pripravil konkrétny príklad generovania úplne jednoduchého menu na stránke.

page.10 = HMENU
page.10.1 = TMENU
page.10.1.NO {
   linkWrap =
	<li>|</li>
allWrap =
<ul>|</ul>
}

Tento príklad vygeneruje jednoduché menu zložené zo zoznamu UL a jednotlivých LI položiek. Ten istý kod by v PHP ako modul vyzeral nejak takto:

$query = 'SELECT title,uid FROM pages WHERE pid=1 AND deleted=0 AND hidden=0
	AND nav_hide=1 ORDER BY sorting';
$res = $GLOBALS['TYPO3_DB']->sql_query($query);
$items = array();
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
	$items[] = '
	<li>' . $this->pi_linkToPage($row['title'], $row['uid']) . '</li>
';
}
$GLOBALS['TYPO3_DB']->sql_free_result($res);
$menu = '
<ul>' . implode("\n", $items) . '</ul>
';

Takže porovnanie elegantnosti týchto dvoch riešení nechávam na Vás. Ešte ale musím podotknúť že menu generované prvým spôsobom je podstatne komplexnejšie, pretože rieši situácie ktoré druhá varianta nerieši. Bolo by to podstatne zložitejšie. Ide napríklad o situácie ako keď je stránka “shortcut” na nejakú ďalšiu stránku, alebo ak ide o takzvanú “externú url“. Tiež nepočíta so situáciou, keď má stránka alternatívny názov pre použitie v menu. Prvá alternatíva všetky tieto TYPO3 like featuri zohľadňuje a jednoducho to popisuje na 7 riadkoch.

Môj pohľad na vec

Osobne nie som nejakým extremistickým fanúšikom typoscriptu. Ale považujem ho za veľmi silný nástroj. Jednoduchá štandartná stránka sa da v TYPO3 spraviť len pomocou typoscriptu a klikania v admine. V niektorých prípadoch doinštalovať nejký ten nový modul. Samozrejme pri rôznych špeciálnych veciach a častiach stránok šitých na mieru pre daného klienta je potrebné riešiť aj PHP. A pri zložitejších projektoch je to samozrejme nutnosť ;-). Typoscript ma jednu veľkú nevýhodu. Pre človeka čo s TYPO3 začína je to asi nočná mora. Musí sa účiť jednoducho niečo nové, čo sa ľudom prirodzene nechce, keď už vedia PHP. Na začiatok to môže pôsobiť metúco. Netreba sa však hneď zľaknúť :-) Naozaj je to mocná vec, ktorá výrazne odlišuje TYPO3 od ostatných CMS. Osobne mi príde rozumné riešiť veci typoscriptom, keď v ňom viem spraviť danú vec elegantne za 5 minút a v PHP by ma to vyšlo na viac.

Jedna trochu parafrázovana veta o TYPO3 hovorí, že TYPO3 ľudia buď ospevujú, alebo preklínaju. Žiadna stredná cesta zrejme neexistuje v čom sa čím ďalej viac utvrdzujem :-D

Ďalšie linky o typoscripte

2 Responses to “Typoscript vs. PHP & HTML”

  1. Myslim, ze ciste php+html na taketo veci uz nepouziva nikto, v Smarty by si to menu vygeneroval podobne jendoducho, len musis mat pripravene data, co predpokladam musis mat aj pre Typo. Len ti ich generuje CMS, co aj mne pre Smarty.

    Inak aspon zbezna kontrola gramatiky v tych clankoch by nezaskodila ;)

  2. Я извиняюсь, но, по-моему, Вы допускаете ошибку. Могу это доказать. Пишите мне в PM, поговорим.

Trackbacks/Pingbacks

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>