Texy & $presenter->link()

- xificurk
- Člen | 121
Ahoj,
mám v databázi uložené texty, které proháním skrz Texy!. Docela by se
mi hodila možnost používat v těchto textech odkazy na presenter podobně
jednoduše jako v šablonách. Tedy abych mohl mít v textu něco jako
"Presenter":[plink :Presenter:View 'argument' => 'value'] místo
současného
"Presenter":[/cesta/k/presenteru/a/view/?argument=value].
Neřešil náhodou někdo již něco podobného?

- LM
- Člen | 206
Koukni do distribuce Texy!, máš tam příklad na vlastní handler modulu link. Stačí si do metody/funkce, která handler obstará, nějak předat presenter a pak odchytit syntaxy tvých odkazů.
function phraseHandler($invocation, $phrase, $content, $modifier, $link)
{
if (substr($link->URL, 0, 6) === 'plink ')) {
$presenter = Environment::getApplication()->getPresenter();
$link->URL = $presenter->link(substr($link->URL, 6));
}
return $invocation->proceed();
}

- xificurk
- Člen | 121
LM napsal(a):
Koukni do distribuce Texy!, máš tam příklad na vlastní handler modulu link. Stačí si do metody/funkce, která handler obstará, nějak předat presenter a pak odchytit syntaxy tvých odkazů.
Jo to bylo první, co mě napadlo. Což o to, předat nějak presenter není problém, ale nelíbí se mi, že budu suplovat kód, který už je jednou v TemplateFilters. Ale asi to bude nakonec nejrozumnější řešení… Já jen jestli někdo tohle nevyřešil nějak elegantněji.

- _Martin_
- Generous Backer | 679
Ahoj,
podobnou situaci jsem řešil: web, kde z jednotlivých stránek (texty
uložené v DB, hnané přes Texy) je třeba odkazovat na jiné stránky webu
(=presentery, akce,…). Zákazník, který bude texty přidávat, pojem
presenter nezná a ani by znát neměl. Naopak ví, že když v hlavní
nabídce klikne na Kroužky a potom na PC, dostane se do kategorie
počítačových kroužků. Takže jsem celou věc vyřešil tak, že pomocí
referencí dám Texy „mapu webu“ a v textech můžu následně
používat
Najdete v kategorii [Kroužky::PC] // Text odkazu bude "PC"
nebo i
Najdete v kategorii "počítače":[Kroužky::PC] // Text odkazu bude "počítače"
a Texy referenci správně nahradí za odkaz, který předtím vytvořil presenter funkcí link.
Editoval _Martin_ (26. 9. 2008 12:35)

- xificurk
- Člen | 121
_Martin_ napsal(a):
Ahoj,
podobnou situaci jsem řešil: web, kde z jednotlivých stránek (texty uložené v DB, hnané přes Texy) je třeba odkazovat na jiné stránky webu (=presentery, akce,…). Zákazník, který bude texty přidávat, pojem presenter nezná a ani by znát neměl. Naopak ví, že když v hlavní nabídce klikne na Kroužky a potom na PC, dostane se do kategorie počítačových kroužků. Takže jsem celou věc vyřešil tak, že pomocí referencí dám Texy „mapu webu“ a v textech můžu následně používatNajdete v kategorii [Kroužky::PC] // Text odkazu bude "PC"nebo i
Najdete v kategorii "počítače":[Kroužky::PC] // Text odkazu bude "počítače"a Texy referenci správně nahradí za odkaz, který předtím vytvořil presenter funkcí link.
To je docela pěkné řešení.
Administrační rozhraní zatím nemám, ale až ho budu dělat, mám v plánu před uložením textů do databáze vždy projet všechny odkazy a pokusit se je přeložit na Presenter request a uložit do databáze v nějakém podobném formátu. Imho je pro neznalého člověka nejsnažší prostě zkopírovat adresu z prohlížeče a o zbytek ať se postará aplikace.

- _Martin_
- Generous Backer | 679
Zjišťování odkazů řeším tak, že v každém presenteru mám
statickou třídu getSiteMap, která vrací mapu odkazů daného presenteru
v poli, a komponentu, která mi automaticky proskenuje zvolené presentery.
Později toto skenování budu ukládat do cache, takže to nebude nijak brzdit
běh aplikace (zvláště, až budu cachovat i Texy stránky).
Ukládat do DB rovnou adresu kopírovanou z okna prohlížeče může být
jednoduché, ale pokud se později rozhodneš změnit podobu adres, musíš
změnit i všechny texty v DB. Mě postačí vymazat cache ;)

- xificurk
- Člen | 121
_Martin_ napsal(a):
Ukládat do DB rovnou adresu kopírovanou z okna prohlížeče může být jednoduché, ale pokud se později rozhodneš změnit podobu adres, musíš změnit i všechny texty v DB. Mě postačí vymazat cache ;)
Právě proto jsem psal před uložením do databáze ;-) Jednoduše si myslím, že pro usera je vhodné pracovat pouze s URL a v databázi si držet naopak odkazy pouze ve formě odkazů na presentery.