Multijazykové textboxy ve formulářích
- Jakub Šulák
- Člen | 222
Zdravím vás,
chtěl bych se zeptat, zda již někdo vyřešil problematiku multijazykových
textboxů (a textarea).
Jedná se mi o případ, kdy máte například název produktu. Ten je jiný
v každé jazykové verzi.
Neřeším, jak ukládat v databázi (několik možností) a je to jen
závislé na tom, jak bude zpracovávat model.
Jde mi o to, jak si usnadnit vytváření formulářů pro editaci.
Mohu samozřejmě udělat container a do něj vložit X textboxů. Ale uvažuji
zda nevytvořit komponentu, která by toto dělala sama.
Nemáte někdo něco podobného již hotového? Máte nějaké tipy, jak tuto věc řešit/neřešit i s ohledem na to, aby měl uživatel příjemnou práci.
Díky
- redhead
- Člen | 1313
To jsem zrovna řešil. Už nějaký čas uchovávám multijazyčná data v jednom sloupci v tabulce – texty jsou oddělené ‚jazykovými‘ separatory, třeba:
sloupec 'text'
------------------
[[cs]]Ahoj, ...[[en]]Hello, ...
[[cs]]Vítejte, ...[[en]]Welcome, ...
Nevím jesli je to nejlepší řešení, ale zatím se mi osvědčilo. V administraci to pracuje takhle:
U každého multijazyčného pole ve formuláři dávám class ‚multilang‘ a udělal jsem si na to pomůcku v jQuery. Princip je takovýto:
- do polí naplním data, jak jsou, i se separatory
- pomocí javascriptu si udělám nějaké uložiště (každé pole má podle separátorů i jazykové verze)
- nad formulářem zobrazím radio-buttony a přepínám mezi jazyky
- při přepnutí se text v poli změní na to, co je v uložišti rozsekané do asoc. polí
- vychytávku to má ještě takovou, že při změně se objeví v levé části pole vlajka upravované jazyk. verze
- při změně textu se změna uloží do toho úložiště
- při odeslání se akorát všechny texty zřetězí do jednoho a oddělí pomocí těch separatorů a naplním to do upravovaného pole..
- odešle se tak stejný formát jako přijde a jaký je v db, pomocí jednoho pole pro sloupec
Naprosto perfektní věc. Problém může být u validace, pokud chcete vyplnit povinně všechny jazyky. To by se muselo ošetřit. Já mám podmínku, že alespoň jedna verze musí být vyplněna (bývá to ta anglická). Nevyplněné verze se nezřetězovávají a chybí tak i separatory, což je pro mě výhodné
Ale jesli má někdo lepší řešení..
- Jakub Šulák
- Člen | 222
Podobně jak píše redhead jsem se také vydal. Je to trochu nehezké řešení v tom, že bez JS si člověk moc neškrtne. Ještě potřebuji vyřešit validaci…
- pekelnik
- Člen | 462
Také používám multijazyčné boxy…
Jdu standardní cestou frameworku:
<?php
// Vytvoření formu
$title = $form->addContainer('title');
foreach ($languages as $language) $title->addText($language->id, $language->title);
?>
Co se týče UI – neobejde se to bez hromady javascriptu :) – ačkoli díky využití přímé podpory Nette\Forms to funguje i bez něj – ovšem z hromadami inputů na stránce, že :)
Editoval pekelnik (13. 4. 2010 13:53)