generování html kódu podle pravidel do latte
- ondrusu
- Člen | 118
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: text
a 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??
- ondrusu
- Člen | 118
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
- Rob Bob
- Člen | 60
Ř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
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.