AppForm – chybné kódovanie pri UTF-8

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

Mám dáta (titulok, obsah), ktoré ťahám z MySQL databázy pri SET NAMES utf8. Keď dáta vykreslujem priamo do šablóny, kódovanie je v poriadku. Akonáhle však dáta zobrazím v editačnom formulári, zobrazia sa v chybnom kódovaní: Domovská stránka.

Pri nastavení $form->encoding sa formulár vykreslí normálne (v HTML entitách).

Kde mám hľadať chybu?

Používam Nette 0.9.7 pre PHP 5.3.

Editoval smasty (10. 12. 2010 20:59)

westrem
Člen | 398
+
0
-

Mozno hlupa otazka ale mas zdrojaky v UTF-8?

smasty
Člen | 90
+
0
-

Ano, to samozrejme mam…

jtousek
Člen | 951
+
0
-

Nette je po většinou optimalizované právě pro UTF-8, dnes prakticky ani nemá smysl používat něco jiného. Jinak u mysql jsem vždy uváděl 2 příkazy pro správné kódování. Samotný set names v některých případech nestačil.

SET CHARACTER SET utf8;
SET NAMES utf8;

EDIT: Dále si zkontroluj meta tagy, nebo ještě lépe hlavičky.

Editoval jtousek (10. 12. 2010 21:44)

smasty
Člen | 90
+
0
-

Tak, chybu som nakoniec našiel. Bola v chýbajúcom meta tagu, keďže na začiatku šablóny pre view edit som zabudol definovať {block content} a tým pádom sa mi nenačítal celý @layout.phtml, ktorý danú hlavičku obsahoval.

(Inak vizuál sa nezmenil, keďže v layoute dokopy nič nie je, preto mi ani nenapadlo, že by to mohla byť takto triviálna chyba…)

Ak ešte môžem jednu Offtopic otázku (V Nette ešte len dnes začínam): Ako najlepšie preniesť nejaké dáta medzi jednotlivými metódami v prezenteri? Zatiaľ používam $this->template, keďže sa jedná len o dáta ktoré potrebuje šablóna, ale čo použiť, ak to so šablónou nebude mať nič spoločné? Napr. nejakú riadiacu premennú…

Editoval smasty (10. 12. 2010 22:19)

westrem
Člen | 398
+
0
-

Neviem ci spravne chapem otazke ale co takto premenne presentera? Napr v startup metode si nacitas co potrebujes a mas.

Avsak kazdy redirect a forward vytvara novy objekt presentera, na to pozor. Skus upresnit co potrebujes.

smasty
Člen | 90
+
0
-

Tak napr. v actionEdit zistím, že sa článok ešte neexistuje a to by som chcel pridať metóde renderEdit, ktorá by podla toho pridala formuláru skryté pole indikujúce, že ide o nový článok. (Podľa neho sa potom rozohodne, či pri spracovaní sa údajmi naplní pomyselná funkcia update alebo create). Skúšal som to pomocou persistentných properities, ale tam vidím nevýhodu, že sa to prenáša v URL.

(ako príklad to asi nie je najlepšie, toto by sa asi dalo riešiť aj inak, ale na načrtnutie problému snáď postačuje…)

Jan Tvrdík
Nette guru | 2595
+
0
-

smasty napsal(a):

Skúšal som to pomocou persistentných properities, ale tam vidím nevýhodu, že sa to prenáša v URL.

Tak a teď to zkus znova a smaž anotaci @persistent.

smasty
Člen | 90
+
0
-

Jan Tvrdík napsal(a):
Tak a teď to zkus znova a smaž anotaci @persistent.

Už som na to prišiel. Snažil som sa priradiť hodnotu neexistujúcej premennej, čo kôli Nette\Object nefungovalo…