linky – syntax nette:xxx
- vlna
- Člen | 34
Ahoj,
pri pouziti
<a href='nette:Test:boo?id=10'>nette:Test:boo?id=10</a>
v template dostavam vystup:
<a href="/?id=10&action=boo&presenter=Test%27">nette:Test:boo?id=10</a>
teda vcetne toho apostrofu nakonci (%27).
Bug, moje chyba nebo feature ? (dvojite uvozovky jsou v pohode)
/**
public static function netteLinks($s)
{
return preg_replace_callback(
'#(src|href|action|on[a-z]+)\s*=\s*["\'](nette:.*?)([\#"\'])#',
array(__CLASS__, 'tnlCb'),
$s)
;
}
private static function tnlCb($m)
{
list(, $attr, $uri, $fragment) = $m;
$parts = parse_url($uri);
if (isset($parts['scheme']) && $parts['scheme'] === 'nette') {
return $attr . '="<?php echo $template->escape($control->'
. (strncmp($attr, 'on', 2) ? 'link' : 'ajaxLink')
. '(\''
. (isset($parts['path']) ? $parts['path'] : 'this!')
. (isset($parts['query']) ? '?' . $parts['query'] : '')
. '\'))?>'
. $fragment;
} else {
return $m[0];
}
}
Editoval vlna (18. 5. 2009 18:53)
- vlki
- Člen | 218
Podívej se do tempu, co ti z toho netteLinks filtr vygeneruje.
Pokud takovou možnost nemáš, tak aspoň zachyť, co ti callback
tnlCb
vrátí.
private static function tnlCb($m)
{
...
$retval = $attr . '="<?php echo $template->escape($control->'
. (strncmp($attr, 'on', 2) ? 'link' : 'ajaxLink')
. '(\''
. (isset($parts['path']) ? $parts['path'] : 'this!')
. (isset($parts['query']) ? '?' . $parts['query'] : '')
. '\'))?>'
. $fragment;
Debug::fireLog($retval);
return $retval;
...
}
A z toho by snad mělo jít poznat, o co jde… Hodně štěstí:)
- vlna
- Člen | 34
Jeste jsem se na to dival a zda se mi, ze tam skutecne muze bejt chybka:
private static function tnlCb($m)
{
list(, $attr, $uri, $fragment) = $m;
$parts = parse_url($uri);
if (isset($parts['scheme']) && $parts['scheme'] === 'nette') {
return $attr . '="<?php echo $template->escape($control->' //puvodni
// return $attr . '='.$fragment.'<?php echo $template->escape($control->' //takle?
Neni to ono ?
Editoval vlna (18. 5. 2009 19:10)
- kravčo
- Člen | 721
Tento tvoj fix dosť zblbne v prípade, ak máš v linke fragment.
Podľa toho, na čo som prišiel je problém v tom, že pri nahradzovaní sa prvá úvodzovka nastaví natvrdo na dvojitú, pričom druhá je ponechaná pôvodná (ak je dvojitá – pohodka, ak jednoitá – máme problém).
Najrozumnejší fix asi bude zapamätať si i prvú úvodzovku a nechať ju rovnakú aká bola (totiž, ak linka obsahuje fragment, k druhej úvodzovke ani nemáme prístup)
- crempa
- Člen | 198
Ahoj, pridam to sem at nedelam nove tema
jak prosim docilim vypnuti kontextoveho escapovani pri vkladani linku do javascriptu, napr.
window.open({plink :Presenter:default},"popup","width=400,height=600");
vygeneruje neco jako
window.open("\/project\/htdocs\/presenter\/default","popup","width=400,height=600");
vykricnik nepomaha a v dokumentaci sem nic nenasel (nebo se v ni po te restrukturalizaci proste nevyznam)
Diky