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.