Posledné novinky
Asi hotovo.
Takže, už to vyzerá byť dokončené. Od minula som pridal animovanie cez timer a možnosť upravovať...
14.12.2014 19:13
Prvá funkčná verzia
Po tejto sobote mám už prvý reálny výsledok. Viem nastavovať keyframe s pozíciou kamery, pohľadom...
14.12.2014 00:23
Vlastné značky
Vlastné značky sú php súbory, ktoré musia obsahovať triedu rozširujúcu triedu swiftPluginCompilerAbstract.
Toto je jediný typ pluginu, ktorý sa inštancuje a vykonáva v momente prekladu!
Trieda musí obsahovať tieto povinnú triednu premennú:
protected $tag_name = 'nazov.tagu'
Kde nazov.tagu je rovnaká konvencia názvu ako bodková konvencia pri názvoch pluginov v šablóne.
Okrem povinnej premennej musí implementovať tri povinné metódy:
public function compile_single($additional_arguments, [ďalšie parametre]) {}
public function compile_pair_open($additional_arguments, [ďalšie parametre]) {}
public function compile_pair_close($additional_arguments, [ďalšie parametre]) {}
Zápis a názov prvého parametra sú povinné.
Ďalšie parametre sa volajú zhodne s parametrami používanými v šablóne vrámci značky. Tie parametre, ktoré nemajú zadanú východziu hodnotu sú v šablóne povinné. Parameter $additional_arguments obsahuje nastavenia pre tie parametre, ktoré značka štandardne nedefinuje (podobne ako v plugine pre funkciu).
POZOR: Hodnoty, ktoré parametre obsahujú, nie sú reálne hodnoty ale reťazce z textom, ktorý bol zapísaný k danému parametru v šablóne. To isté platí aj pre východzie hodnoty. Vzhľadom na toto správanie sa základná trieda definuje niekoľko metód, ktoré dovoľujú získať konečné hodnoty z parametrov.
Značka je vykonávaná ako inštancovaný objekt v čase kompilácie, musí byť napísaná tak, aby vrátila vykonateľný php kód (pomocou return).
Metódy a premenné triedy swiftPluginCompilerAbstract
Trieda obsahuje tieto členské premenné:
protected $swift;
protected $swift_compiler;
protected $tag_name;
Kde $swift je referencia na objekt frameworku a $swift_compiler je referencia na objekt kompilátora.
Ďalej obsahuje tieto užitočné metódy:
protected function _($code) {}
Vstupom je parameter značky, ktorý bude očistený o všetky escapovacie spätné lomítka.
- ...
- public function compile_single($additional_arguments, $nazov) {
- $code = '<' . '?php echo ' . $this->_($nazov) . '; ?>';
- return $code;
- }
- ...
protected function _l($code) {}
Vstupom má byť parameter obsahujúci reťazec z názvom premennej. Funkcia zoberie tento vstup, skontroluje či je platný a vráti názov kód pre lokálnu premennú, alebo ukončí kompiláciu s chybovou správou.
protected function _lr($code, $vars = array()) {}
Zoberie kód výrazu $code a nahradí v ňom každý výskyt globálnej premennej s nejakým menom z pola $vars za lokálnu premennú s rovnakým menom.
protected function _lc($code, $scope_name = "", $additional_path = array()) {}
Funkcia dostane v parametre $code lokálnu premennú, ktorú prevedie na globálnu premennú v $this->tpl_vars['swift'][$code]. Ak je nastavené $scope_name na nejaký názov, bude výsledok vyzerať $this->tpl_vars['swift'][$scope_name][$code]. Všetky hodnoty pola v $additional_path sa zapíšu ako ďalšie kľúče v konečnom poli.
Ak teda zavoláme $this->_lc('"premenna"', 'scope', array('kluc1', 'kluc2')) dostaneme $this->tpl_vars['swift']['scope']['premenna']['kluc1']['kluc2'].
protected function _i($path = array()) {}
V prípade, že potrebujeme uložiť informáciu, ktorá nemá byť dostupná ako premenná markera, môžeme pomocou tejto metódy vytvoriť záznam v poli internals. Keď záznam prestane byť potrebný, je dobré ho zrušiť vygenerovaním kódu unset(). Parameter $path obsahuje cestu k záznamu v poli.
- public function compile_single($additional_arguments, $pole) {
- ...
- $code .= '<' . '?php ' . $this->_i(array('moja_znacka', $this->getUniqueID(), 'velkost_pola')) . ' = count(' . $this->_($pole) . '); ?>';
- ...
- }
protected function _a($expression) {}
Ak vieme, že $expression obsahuje kód pre pole, táto metóda nám reťazcovú reprezentáciu pola opäť vráti ako normálne php pole.
Takže napríklad z volania $this->_a('array("Ahoj svet!")') dostaneme pole array("Ahoj svet!").
protected function e() {}
Ak je treba vrátiť chybovú správu, táto metóda nám pre túto správu vráti pole s prídavnými informáciami ako je názov súboru a číslo riadku.
- ...
- $this->swift->addError('Nastala chyba', SWIFT_ERROR_TYPE_NOTICE, $this->e());
- ...
protected function s() {}
V prípade potreby je možné získať premennú referencie na objekt swift pomocou tejto metódy. Názov tejto premennej je potom použiteľný vo výstupnom kóde. Funkcia vracia '$this' alebo '$swift', podla toho, či sa kompilácia nachádza alebo nenachádza vnútri v šablóne definovanej funkcie.
protected function isVariable($code) {}
Vráti true, ak $code obsahuje platný názov premennej (lokálnej alebo globálnej).
Použiteľné metódy z triedy swiftCompiler ($swift_compiler)
public function addToStack($tagName, $localVariables = array(), $specialVariables = array()) {}
Metóda zaradí značku $tagName do zásobníka, značka môže nastaviť zoznam lokálnych premenných v poli $localVariables (tieto premenné nesmú byť už použité predtým) a môže si zapísať do zásobníka ďalšie informácie v poli $specialVariables.
public function getStackTopItem() {}
Vráti názov značky na vrchu zásobníka, alebo prázdny reťazec, ak je zásobník prázdny.
public function getStackTopItemSpecialVariables() {}
Z vrchu zásobníka vráti pole premenných, ktoré sú uložené spolu s názvom značky. Ak je zásobník prázdny, vráti prázdne pole.
public function removeTopFromStack() {}
Vyhodí najvrchnejší prvok v zásobníku. Metóda nevracia nič.
public function findInStack($tagName) {}
Vráti true, ak sa v zásobníku nachádza aspoň raz značka $tagName.
public function getCurrentLine() {}
Vráti číslo riadka, na ktorom sa nachádza kompilovaná značka.
public function getCurrentFile() {}
Vráti názov práve kompilovaného súboru.
Ďalšie použiteľné metódy triedy swift ($swift)
public function addError($message, $type = SWIFT_ERROR_TYPE_NOTICE, $additional = array()) {}
Metóda pridá chybovú správu $message do zoznamu chybových správ. Chybová správa môže mať nasledovný typ ($type):
- SWIFT_ERROR_TYPE_NOTICE
- SWIFT_ERROR_TYPE_WARNING
- SWIFT_ERROR_TYPE_FATAL
Pomocou pola $additional môžeme pridať ďalšie informácie, pole $additional má štruktúru:
array('položka' => 'informácia', ...)
kde položka aj informácia sú zobrazené tak ako sú, tj. obsahujú priamo text, ktorý uvidí používateľ.