Hubba Hubba Zoot Zoot!

Nyolc-tíz éves lehettem, mikor a fenti sorokat üvöltve egy érdekes banda lépett a színre: a Caramba. Eszméletlen jó szám volt! Állandóan ezt énekeltem: Deba uba zat zat / a-num num / a-hoorepa hoorepa / a-huh-hoorepa / a-num num!

Most már Te is megteheted!

A megtalált zene, és – természetesen – a szöveg.

Tovább vadászva kiderült, hogy egy svéd csapat csinálta a remekművet, ráadásul egy olyan nagylemezt adtak ki, aminek a borítójára egy értelmes szót nem írtak. Az egész tele volt halandzsával.

A nyomozás végül érdekesen zárult: kiderült, hogy az egészet az Abba, és annak stúdiózenészei csinálták!

Hubba Hubba Mo-re Mo-re!

HTML Fade-out

Azt mondják, hogy átúsztatást leginkább Flash-ben érdemes csinálni. Jómagam nem vagyok híve a Flash túlzott használatának, hiszen a Macromedia még arra sem képes, hogy megmondja, hogy kell xhtml-be beszúrni a mozit. Persze, hogy meg lehet csinálni az úsztatást HTML-ben is.

Íme a nagy áttörés: Richard Rutter megjelenítette a fotó átúsztatás HTML technikáját. Az persze még nem tud sok mindent kezdeni az IE-vel és a kikapcsolt JavaScript-tel.

Mondanom sem kell, nem volt nagy fáradság megcsinálni az IE támogatást és a JavaScript kikapcsolásának támogatását sem. Persze, a CSS-t azért nem illik kikapcsolni.

Minden szónál többet ér egy tesztoldal: fade out teszt.

PHP alapú sablonkezelés

Volt már olyan, mikor rácsaptatok a fejetekre, hogy „anemjóját, ezen törtem a fejem, miért nem én csináltam meg előbb”? Velem pont ez történt, mikor a PHP | Architect egyik cikkét olvastam.

Írtam én már sablonrendszert PHP-ben (ld. Prím.hu, de egy sokkal jobb rendszert használok a fizetős munkáimban), és mostanság azon törtem a fejemet, miként lehetne magát a PHP-t felhasználni erre.

Pedig az egész bámulatosan egyszerű. Csak néhány alapszabályt (peremfeltételt) határozzunk meg, és máris rájöhetünk a dolog nyitjára:

  1. Rendszerint HTML-t akarunk használni, tehát férjen be a HTML szabványba. Vagy akármilyen más szövegszabványba.
  2. Legyenek benne változóbehelyettesítések, de ne legyen túl bonyolult a beszúrásuk.
  3. Ismerjen vezérlő szerkezeteket is (feltétel, ciklus), de ne legyen túl bonyolult (több soros, kapcsos zárójelek, miegymás).
  4. Tudjon makrókat, hogy alapvető HTML darabokat be lehessen illeszteni (például csak egy makró hívás legyen a beírómező készítése).
  5. Lehessen al-sablont beilleszteni.

Az okosabbak máris rávághatják, hogy „de hisz’ ezt mind tudja a PHP”! Mert hogy:

  1. A PHP alapesetben HTML módban fut, és csak akkor értelmezi a kódot, ha <?php?> között van. Ha a program futása közben egyszer csak nem kiíratni akarjuk a kimenetet, hanem pufferbe rakni, azt az ob_start() remekül elkezdi. Mikor a végén pedig meg akarjuk kapni az eredményt (mondjuk egy változóba), akkor az ob_get_contents()-el elmenthetjük, majd törölhetjük is a puffert az ob_end_clean() függvénnyel. Az egészben az a szép, hogy egymásba ágyazva is használhatjuk ezeket a függvényeket, amik majd az al-sablon kezelésekor jól fognak jönni.
  2. A változóhelyettesítések végtelenül egyszerűek, hiszen a PHP ismeri a rövidített formát.
  3. A PHP kétféleképpen is ismeri a vezérlési utasításokat. Nézzük meg a nem annyira gyakori formát:
    feltétel:
    <?if (feltétel):?>
      HTML kód
    <?elseif (feltétel):?>
      HTML kód
    <?else:?>
      HTML kód
    <?endif?>
    ciklus:
    <?foreach ((array)$tömb as $ciklusváltozó):?>--M;
      HTML kód
    <?endforeach?>

    Ez mind csak ízelítő, a PHP kézikönyv Vezérlési szerkezetek alternatív szintaxisa fejezetében részletesen le van írva a dolog.

  4. Makrókat kétféleképpen lehet csinálni: vezérlés felől, vagy a sablon felől. A vezérlés felőli makrókat legegyszerűbben plug-in-ként lehet elképzelni (egy megadott interfészt implementáló osztály példányosításával, változóként átadva a sablonkezelőnek), míg a sablon felőliek lehetőségei kissé be vannak korlátozva. Nem lehet osztálymetódus, hiszen osztálydefinícióban nem lehet megszakítani a PHP-t (?>HTML kód), ráadásul függvénydefiníciót nem lehet alternatív jelöléssel írni, így meg kell maradnunk a kapcsos zárójeleknél.
  5. Ez sem nagy ördöngösség, ha nem használunk függvényeket a sablonokban, hiszen akkor elég az include. Persze, itt a legnagyobb baj az, hogy az al-sablont nem lehet a fősablonhoz képest relatíven megcímezni, hiszen minden relatív fájlművelet a meghívott PHP programhoz képest relatív. Így hát legjobb ugyanazt a függvényt meghívni alsablon betöltésekor, mint amit a fősablonnál is meghívtunk.

Most ez lehet, hogy bonyolultnak hangzik, de ebből egy egész remek sablonfeldolgozót lehet összehozni. Én már neki is álltam a saját kódomat megírni. Ha van valami használható, elmesélem a tapasztalataimat.