Oznámení

Provoz fóra byl ukončen

Úprava ImageModule

před 14 lety

johno
Člen | 10

Chcem sa opýtať, lebo som sa v tom nemal čas poriadne pohrabať, ale dá sa znásilniť modul obrázkov tak, aby mi namiesto jednoduchého <img src=„… generoval napríklad <div class="t“><div class=„b“><img src="… ?

Poprípade úplne iné a zvrhlejšie konštrukcie kde by sa potom nejako dalo použiť aj zarovnávanie, title, alt, atď.

Uvažoval som nad napísaním vlastného modulu kde by som si vytvoril vlastné spracovanie a výstup, ale ešte som nejako úplne nepochopil kde a hlavne ako moduly môžu vrátiť viac tagov. Chcelo by tom nejaký tutorial na moduly. Možno tam niečo také je, ale lenivosť a pokročilá nočná hodina mi nedovoluje to nájsť.

Uvítam akékoľvek nakopnutie správnym smerom.

před 14 lety

David Grudl
Nette Core | 6806

Velmi obecně jak Texy pracuje:

  • během inicializace Texy se registrují moduly (metodou $texy->registerModule($name, [$alias]))
  • každý modul (následník třídy TexyModule) si během inicializace registruje určité regulární výrazy, které chce zpracovávat. Zároveň je nositelem nastavení (tedy $texy->htmlModule->allowed = …)
  • při zpracování nahradí nalezené řetězce za prvky TexyDOM
  • výsledkem zpracování textu je DOM, uložené v $texy->DOM (zdejší DOM nemá mnoho společného s DOM jaké známe z JavaScriptu, například nemusí být wellformed)
  • toto se poté převede do XHTML (nebo čistého textu, apod.)

Při generování DOM výsledného XHTML se volá metoda toHTML() která vrací výsledný řetezec. Tato metoda (obvykle) volá generateTags(&$tags) a generateContent() a z vrácených hodnot poskládá výsledek.

  • generateTags(&$tags) vrací asociativní pole, kde klíče jsou tagy a hodnota je opět asociativní pole, atribut ⇒ hodnota.
  • generateContent() vrací řetězec

V čem je háček – vnitřnosti Texy zatím nepovažuju za zcela ideální. Ano, jsem idealista a dokud to nebude kryšťálově dokonalé, chci to předělávat. V tuto chvíli nevím jak, to se nedá vymyslet, to musí napadnout :-) Počítám tedy s úpravami a nechci mít svázané ruce tím, že někdo bude na současném API stavět. Proto nikde nezveřejňuji podrobnosti ani tutoriály. Zatím…

(pozn.: platí pouze pro Texy 1.x)