Oznámení

Provoz fóra byl ukončen

Reprezentace něčeho v TexyHtml jako řetězec

před 12 lety

littlemaple
Člen | 60

Strávil jsem hodně času zkoumáním všeho možného, ale už asi rezignuji.

Využívám rozšíření {{něco}}. Funkce na takové rozšíření napojená může vracet řetězec nebo TexyHtml objekt. V případě, že je to zpracováváno Texy! jak má, je vše v pořádku. Pokud ale nechci výstup z rozšíření cachovat, je třeba tento postup: zakomentuji {{neco}} na <!--{{neco}}-->, převedu, cachuji a potom odchytávám takovéto komentáře a nahrazuji za výstup z funkce pro rozšíření. Ale! Když vrátí TexyHtml, co s tím?

Objekt TexyHtml, na rozdíl od NHtml nemá rozumné rozhraní pro svou textovou reprezentaci, takže nedisponuje žádným __toString() apod. a metody, které jsem v něm našel (toText, toHtml) fungují dost divně a vyhazují mi místo řetězce warningy.

Třeba

$el = TexyHtml::el('strong')->setText('Ну, погоди!');
echo $el->toHtml($this->texy);

bez šance (Warning: preg_replace() [function.preg-replace]: Empty regular expression in …\class\texy.php on line 809). Texy2! PHP 5. Nějaké tipy? :)

Editoval littlemaple (11. 1. 2008 18:28)

před 12 lety

David Grudl
Nette Core | 6806

Objekty TexyHtml nereprezentují konečnou podobu výstupního textu, ale pouze mezistupeň. Proto tam není žádné __toString() a metody toText a toHtml jsou určeny pro interní použití.

Protože parametr $texy předávaný toHtml() musí být „nastartovaný“ (tj. ve probíhajícím převodu), je možné převod na řetězec udělat během volání handleru.

před 12 lety

Gringo
Člen | 32

Pokud to chápu dobře, při načítání z cache už to přes Texy! neprochází, čili nejdou použít handlery, je tak?

před 12 lety

littlemaple
Člen | 60

Mnooo, tak jest :) . Takže jediný způsob jak to vyřešit je vyprdnout se na TexyHtml, muset to tvořit ručně jako řetězec HTML, následně propašovat do Texy! přes protect() a v případě, že to jde z cache, tak pouhým nahrazením? Škoda :/ .

To abych si pak otrocky hrál s věcmi jako nastavení XHTML/HTML a podle něj skládal ručně buď <tagy> nebo <tagy />, nemluvě o jiných nastaveních :( .

před 12 lety

David Grudl
Nette Core | 6806

Zkusím se na to podívat, ale nebude to hned.

před 12 lety

littlemaple
Člen | 60

Už mám skoro po zkouškovém, je nějaký postup? ;)

před 12 lety

David Grudl
Nette Core | 6806

snad během února, ale nic neslibuju

před 12 lety

littlemaple
Člen | 60

Napadlo mě, že bych to mohl v plužínu poskládat pomocí NHtml a pokud by se výsledek necachoval, bude normálně převeden do řetězce. Pokud se cachuje a má být zpracován Texy!, možná by šlo nějak udělat z NHtml objektu TexyHtml… Kdo ví :) .

Nebo potom ještě TexyHtml vůbec nepoužívat a dělat to jen v NHtml, Texy! předávat zásadně jen výsledné HTML z plužínu jako řetězec. Což by znamenalo nakonfigurovat NHtml tak, aby vracelo vždy stejně formátovaný výstup jako právě nastavené Texy!

  • je to prvotní nápad, nezkoumal jsem to vůbec
  • možná by bylo hloupé mít ve „frameworku“ 2 věci, které dělají skoro totéž (NHtml, TexyHtml)

Budu o tom ještě přemýšlet a zkoumat to. Jen jsem to sem napsal, abych zaznamenal své úvahy :) .

Editoval littlemaple (30. 1. 2008 23:27)