generování html kódu podle pravidel do latte

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

Ahoj, chtěl bych udělat generování uživatelských atributů (nastavení) dynamicky.
V db mám například lang nebo theme a to má v jiné tabulce ve vazbě 1:N svoje parametry (u lang je to například cs, en apod).
Chtěl bych do .latte vygenerovat kus html kódu podle nějakého jasně definovaného pravidla.
Tím bude json string. Např.

{
 field: select
 name: theme
 type:
apod..
}

A chci aby z toho vznikl <select> box s options cs, en.
V případě že bude field bude vyplněn input budu vyplňovat type: texta podobně.
Ale nevím jak to udělat, nechci mít v šabloně ify.
Řešil jste někdo něco podobného, nebo máte někdo nápad jak by to šlo generovat např. v modelu??

CZechBoY
Člen | 3608
+
0
-

Moc nechápu o co se snažíš. Nemůžeš prostě definovat co se má čím přeložit?
Nebo udělat nějaké třídy, které budou vědět jak se přeložit? + k tomu továrnu, která bude vědět jaká třída umí co přeložit.

ondrusu
Člen | 118
+
0
-

Snažím se o vypsání uživatelského nastavení dynamicky.
V databázi mám tabulku user_settings a v tom mám sloupce jako (id, name, definition)
A právě v tom sloupci definition například tohle:

{
 field: input
 name: vek
 type: text
 id: selectorVek
}

a chci aby se to přeložilo na

<input type="text" name"vek" id="selectorVek">

nebo mám tohle:

{
fielad: select,
name: theme,
type: null,
id: selectorTheme,
optionsMethod: getThemes
}
<select name="theme" id="selectorTheme">
</select>

a options se bude naplňovat metodou getThemes

CZechBoY
Člen | 3608
+
0
-

Ta metoda getThemes se bude brat odkud?

Rob Bob
Člen | 60
+
0
-

Řekl bych, že to moc nesouvisí s Nette.

Jestli dobře chápu, ty tedy hledáš nějakou třídu, která ti z toho JSONu sestaví html elementy, které pak zobrazíš v šabloně. Asi jde o celkem specifickou záležitost, hádám, že si to budeš muset napsat sám. V zásadě je to mapování těch jednotlivých položek na tagy a jejich atributy (s pár vyjímkami jako options u selectu), to nevypadá na nic složitého. K lepení těch tagů můžeš využít \Nette\Utils\Html. Nástřel:

$data = json_decode($json);
$field = $data['field'];
unset($data['field']);
$elemenet = \Nette\Utils\Html::el($field);
foreach($data as $attributeName => $attributeValue) {
	$element->$attributeName($attributeValue);
}
echo $element;
  • +ohlídat speciální případy

Editoval Rob Bob (24. 3. 2016 13:00)

ondrusu
Člen | 118
+
0
-

CZechBoY: to bude v modelu (doctrine)
Rob Bob: díky za příklad
a tu proměnnou $element předpokládám do šablony předám nějak takto

$this->tempalte->element = $element;

a v .latte to zavolám jen jako

{$element}
CZechBoY
Člen | 3608
+
0
-

A ten model se preda kudy?

ondrusu
Člen | 118
+
0
-

Předpokládám že jinak než přes prezenter to asi nejde né?
Měl jsem to vymyšlené tak, že si v modelu načtu ten danej atribut a přes presenter si ho předám do šablony, to kde se bude skládat (jestli ještě v modelu v jiné metodě nebo v presenteru nebo až v .latte) jsem moc vymyšlené neměl, spíš mě šlo jen o váš názor, jakožto odborníků jak doporučujete postupovat.