Texy & $presenter->link()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
xificurk
Člen | 121
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

_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ží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.

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
+
0
-

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
+
0
-

_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.

_Martin_
Generous Backer | 679
+
0
-

Jo takhle, před uložením do databáze to prohnat přes routery a uložit to v podobě presenterů, pohledů a parametrů. Tenhle nápad má taky něco do sebe, možná je ještě víc user-friendly =)