Latte makro {link !} generuje link s &
- kastanekdavid
- Člen | 39
Zdravím,
v šabloně mám tento kód:
{define #jsCallback}
$('#{$control["newRuleForm"]['rule'][$id][$input]->htmlId}').on('change', function(){
$.nette.ajax({
type: 'GET',
url: '{link {$link}! |noescape}',
data: {
'value': $(this).val(),
}
});
});
{/define}
Ten vygeneruje link: /_mailing_nette/www/rule/new?siteId=22&%3Bdo=tableChange&value=ps_attribute_group
To je ale špatně, protože v odkazu nemá být &%3B, ale má tam být &. Kvůli tomu se celý GET neprovede.
Pokud však použiju signál na odkaz bez GETu siteId=22, který je tam už z předešla, odkaz se naparsuje správně.
Nevíte někdo, jak to spravit?
- Vojtěch Dobeš
- Gold Partner | 1316
Nechápu tuto sekvenci: {link {$link}! |noescape}
Co to značí?
Používat takto vnořeně složené závorky mi přijde jako nesmysl a divím
se, že to nevyhazuje chybu.
- kastanekdavid
- Člen | 39
vojtech.dobes napsal(a):
Nechápu tuto sekvenci:
{link {$link}! |noescape}
Co to značí? Používat takto vnořeně složené závorky mi přijde jako nesmysl a divím se, že to nevyhazuje chybu.
Díky za reakci :)
Raději sem kód hodím celý:
{block content}
<h1 n:block=title>New Rule</h1>
{snippet rulesForm}
{form newRuleForm}
{$form}
<script type="text/javascript">
{foreach $form['rule']->containers as $i => $rule}
{include #jsCallback, id => $i, input => $rule['table']->name, link => tableChange}
{include #jsCallback, id => $i, input => $rule['column']->name, link => tableChange}
{/foreach}
</script>
{/form}
{/snippet}
{/block}
{define #jsCallback}
$('#{$control["newRuleForm"]['rule'][$id][$input]->htmlId}').on('change', function(){
$.nette.ajax({
type: 'GET',
url: '{link {$link}!}',
data: {
'value': $(this).val(),
}
});
});
{/define}
Link je proměnná, která se naplní názvem daného selektu, pokud se selekt změní. Mohl bys teda, prosím, navrhnout nějaké zkrocení toho zápisu? :)
- kastanekdavid
- Člen | 39
vojtech.dobes napsal(a):
Nechápu tuto sekvenci:
{link {$link}! |noescape}
Co to značí? Používat takto vnořeně složené závorky mi přijde jako nesmysl a divím se, že to nevyhazuje chybu.
Ok, zjistil jsem, že to funguje, když nahradím tohle:
url: '{link {$link}!}',
tímhle:
url: '{link "$link!"}',
Pořád to ale neřeší můj problém, a to že je ve vygenerovaném odkazu & ; místo samotného & :-/
Nevíte někdo?
- David Zadražil
- Člen | 62
Tu proměnnou tam můžeš dávat bez složený závorek, tedy –
{link $link!}
Edit: Byl jsi rychlejší :-)
Editoval David Zadražil (19. 12. 2013 16:17)
- kastanekdavid
- Člen | 39
David Zadražil napsal(a):
Tu proměnnou tam můžeš dávat bez složený závorek, tedy –
{link $link!}
Edit: Byl jsi rychlejší :-)
Pokud toto udělám, zařve laděnka:
syntax error, unexpected ‚!‘
- kastanekdavid
- Člen | 39
Problém je ale pořád v tom, že se mi do odkazu generuje html special char (ampersand) a link kvůli tomu nefunguje. Nedá se to v rámci toho makra {link} nějak potlačit?
Editoval kastanekdavid (19. 12. 2013 16:39)
- kastanekdavid
- Člen | 39
vojtech.dobes napsal(a):
Zkus
{link $link."!"}
. Co ale vlastně obsahuje to$link
?
Link obsahuje název signálu, v tomto případě (string) tableChange, který potom v presenteru zpracuju pomocí metody handleTableChange.
Zkusil jsem tvoje řešení, překladač to požeře, ale problém s amp ; stále přetrvává :-/
Editoval kastanekdavid (19. 12. 2013 16:42)
- kastanekdavid
- Člen | 39
Tak jsem to vyřešil takhle a je to! … Škoda, že jsme se nedobrali k tomu, proč to takhle blbe :/
{define #jsCallback}
$('#{$control["newRuleForm"]['rule'][$id][$input]->htmlId}').on('change', function(){
link = '{link $link."!"}';
link = link.replace("&","&");
alert(link);
$.nette.ajax({
type: 'GET',
url: link,
data: {
'value': $(this).val()
}
});
});
{/define}
- IlCommendatore
- Člen | 8
Zrovna dneska jsem se setkal s identickým problémem a bohužel popsané
řešení @Aurielle: (1) neprojde, jak tedy řešit?
Viz příklad:
{var $link = mySignal}
{define #frk1}
'{link $link."!"}'
{/define}
{define #frk2}
<script>
var c = '{link $link."!"}'
</script>
{/define}
<a href="{link $link."!"}">Link</a>
<!-- správně: '/my-app/presenter/action?task=persistentParameter&do=mySignal' -->
<script>
var a = '{link $link."!"}'
// takhle ne: '"\/my-app\/presenter\/action?task=persistentParameter&do=mySignal"'
var b = {include #frk1, link => $link}
// skoro, až na ten amp: '/my-app/presenter/action?task=persistentParameter&do=mySignal'
var correct = b.replace('&', '&');
</script>
{include #frk2, link => $link}
<!-- var c == var a, taky špatně -->
Nejradši bych to dělal bez toho .replace()
Editoval IlCommendatore (12. 8. 2014 16:17)
- David Grudl
- Nette Core | 8218
<script>
{define #frk1}
{link $link."!"}
{/define}
var a = {link $link."!"};
var b = {include #frk1, link => $link};
</script>