Odkaz $this->link bez action Default

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

Ahoj, v šabloně mám tento zápis:

<script>
    <script language="javascript">
        terms = [<?php
        foreach ($dictionary as $term) {
            echo '"' . $term . '",';
        }
        ?>];
        links = [<?php
        foreach ($dictionary as $term) {
            $args = array('id' => String::webalize($term));
            $link = $presenter->link('Dictionary:', $args);
            echo '"' . $link . '",';
        }
        ?>];
    </script>
</script>

a chci se zeptat jestli tento zápis je v pořádku, nebo jestli to lze zapsat elegantněji.
Taky bych rád, aby se mi odkaz generoval bez action:Default.
Nyní mám odkazy v tomto formatu: /public/cs/slovnik/default/css a potřebuji /public/cs/slovnik/css.
Jít na pouze přes routy? Jak?

Děkuji

v6ak
Člen | 206
+
0
-
  • Na poslání pole do JS použij spíše json_encode (imunita k injekci, elegance)
  • Je také potřeba ošetřit </script>

Možná něco z toho (tipuju to druhé) zvládne Nette svým kontextově senzitivním escapováním.

Ondřej Mirtes
Člen | 1536
+
0
-

Tohle Nette svým escapováním nezvládne, protože tam vůbec není využit Latte filter. A souhlasím, v Presenteru si připravit pole, poslat ho do json_encode a v šabloně jen vypsat tu proměnnou. Tohle skládání stringu je ošklivé a navíc se nebude líbit Internet Exploreru – ten nesnáší čárky, za kterými už nic není.

A pro tamten tvar URL musíš správně definovat routu ;)

Editoval Ondřej Mirtes (9. 2. 2010 17:51)

v6ak
Člen | 206
+
0
-

Ani to </script>?

dotTwelve
Člen | 167
+
0
-

Dobře, v presenteru si tedy pole do šablony předám pomocí funkce json_encode.

Tím pádem mám v šabloně výstup {!$dictionary}:

<script>
"{"1":"ajax","2":"css","3":"PPC reklama"}"
</script>

respektive {$dictionary}:

<script>
"{\"1\":\"ajax\",\"2\":\"css\",\"3\":\"PPC reklama\"}"
</script>

No ale co s tím dál?

Editoval dotTwelve (10. 2. 2010 9:35)

v6ak
Člen | 206
+
0
-

Nějak ti tam přebývají uvozovky okolo.
Máš to takto?

<script>
"{$dictionary}"
</script>
dotTwelve
Člen | 167
+
0
-

Uvnitř <javascriptu> zapisuji pole takto: {!$dictionary} a výsledek je:

<script>
{"1":"ajax","2":"css","3":"PPC reklama"}
</script>
dotTwelve
Člen | 167
+
0
-

Tak jsem dosel zatim sem:

<script>
var pole = {"1":"ajax","2":"css","3":"PPC reklama"};
</script>
<script>
var pole = {!$dictionary};
var a = $.JSON.encode(pole);
var b = $.JSON.decode(a);
alert('klic 1:'+b[1]);
</script>

timto si dokazu vypsat hodnotu klice 1, tedy ajax. Jak ale postupovat abych vypsal kyzeny vysledek.

Editoval dotTwelve (12. 2. 2010 13:53)