Dá se v šablonách vypnout escapování pro macro ‚_‘?

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

…tak aby se všude nemuselo psát {!_'TEXT'}, ale jen {_'TEXT'}?

pawouk
Člen | 172
+
0
-

To nechceš! To je přece dobrá věc. Hlavním faktorem je to že když na to zapomeneš tak si toho všimneš poměrně rychle, ale obráceně bys to mohl zjistit až bude někdo brouzdat v tvé db. Raději bych se tomu vyhnul…

enumag
Člen | 2118
+
0
-

Překlad by až na výjimky měl sloužit jen na texty, bez HTML tagů. A na ty výjimky je přesně to makro {!_'text'}. Tzn. doporučuju totéž co @pawouk, ale abych odpověděl na otázku, to makro _ si můžeš předefinovat stejně jako bys psal vlastní nové makro.

Caine
Člen | 216
+
0
-

@pawouk chci:) nechci to vypnout globálně, jen pro to jedno makro. Texty nebude psát nikdo z venku, nevidím tedy důvod, proč by bylo escapování nutný.

@enumag požadavek od klienta: „všude půjde používat HTML!“

enumag
Člen | 2118
+
0
-

@Caine: Ou… Tak to jo no. :-D Stejně ale nevidím žádný důvod proti použití makra !_. Pokud ti jde o zamezení abys někde omylem nepoužil to zabezpečené makro _, tak bych ho během vývoje předefinoval aby házelo výjimku.

Filip Procházka
Moderator | 4668
+
0
-

V tom případě všechno co ti vypadne z helperu translate obal do Nette\Utils\Html a escapování nebudeš muset NIJAK vypínat (DOPORUČENO!!!).

Funguje to všude v latte

$this->template->html = Nette\Utils\Html::el()->setHtml("<br />");
{$html}
{* vypíše: *}
<br />

Takže cca takhle

public function translate($text)
{
	return Nette\Utils\Html::el()->setHtml($this->translator->translate($text));
}
{_'text'}

Viz https://github.com/…reMacros.php#…

Samozřejmě s tím souvisí, že jestli pracuješ nějak s parametry, tak tyto parametry bys měl řádně escapovat, než je vložíš do přeloženého stringu.

Caine
Člen | 216
+
0
-

@enumag je to spíš z pohodlnosti, a taky aby jednou nebylo psaný {!_'text'} a jinde jen funkce _(‚text‘).

@Filip Procházka děkuju za odpověď. Do zdrojáku maker jsem koukal, ale to s Html jsem tam nikde neviděl:) Ale jestli to jinak nejde, než pro každej string vytvářet Html objekt, tak to asi radši budu vypínat přes vykřičník ručně:) Každopádně jsem rád, že už teď vím, jak to případně udělat.

Editoval Caine (2. 6. 2013 19:09)