IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
honza86
Člen
Avatar
honza86:6.12.2020 6:12

Dobrý den,
chtěl bych poprosit o radu jak změnit název labelu u selectu(combox). Select se vytvoří v konstruktoru a poté ve funkci pro upravu formuláře změnit název labelu.
vytvoření v konstruktoru:

$this['offer']->addSelect('test', 'bez názvu', $hodnoty)->setPrompt('-');

uprava labelu ve funkci pro upravu formu.

if(podminka)
$this['offer']['test']-> //a zde bych potřeboval změnit název labelu

Děkuji.

Editováno 6.12.2020 6:13
 
Odpovědět
6.12.2020 6:12
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.12.2020 10:16

Co jsi nasel za uzitecne nebo jine, mozna uzitecne informace googlem, ve kterych se nevyznas? Hledal jsi googlem?
google = nette framework formulare zmena labelu

https://doc.nette.org/…rm-rendering

a) $form->render(); - kdyz to vyrendrujes, tak uz nic nezmenis, to je html kod. Leda zamenit text pres preg_replace

Prepsani, jakym zpusobem se label ma zobrazovat, renderovat

$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = 'dl';
$renderer->wrappers['pair']['container'] = null;
$renderer->wrappers['label']['container'] = 'dt';
$renderer->wrappers['control']['container'] = 'dd';

$form->render();

Nastaveni policek pro password

$form = new Form;
$form->addText('user')->setRequired();
$form->addPassword('password')->setRequired();
$form->addSubmit('send');
return $form;

Nastaveni atributu u selectu

$form->addSelect('rank', 'Řazení dle:', ['ceny', 'názvu'])
        ->setHtmlAttribute('onchange', 'submit()'); // při změně odeslat
// a input type text
$form->addText('tel', 'Váš telefon:')
        ->setHtmlType('tel')
        ->setHtmlAttribute('placeholder', 'napište telefon');

Atd... Vlevo v menu je napr. "Formulářové prvky"

$form->addSelect('country', 'Země:', $countries)
        ->setPrompt('Zvolte zemi');

Z toho se da celkem snadno odvodit, ze, kdyz bych zkoumal php kod nette, nejspis takova zmena, co pozadujes, nebude mozna.
Ale, pnevylucuji, ze to jde, stale je to asi php objekt nez spustis render().
Nicmene, jak to tedy udelat? Udelej si funkci, ktera generuje ten formular a ktere predas parametry. A jednim z nich bude label.
A ted se divam dal a asi to pujde. Ikdyz je to podle mne nesmyslne, protoze formular mas generovat tou funkci, kde predas parametry, nikoliv samostatne.

Přístup k prvkům

$input = $form->getComponent('name');
// alternativní syntax: $input = $form['name'];

Cili, asi by to mohlo byt neco takoveho:

$this['offer']->addSelect('test', 'bez názvu', $hodnoty)->setPrompt('-');

$myselect = $form->getComponent('test'); // nebo
$myselect = $form['test']; // ale tomu bych se vyhnul, muzes se trefit do interniho nazvu v objektu

$myselect->setLabet('xxx'); // nevim, mrkni do dokumentace, jen tipuji vzor podle ostatnich prikladu
Editováno 6.12.2020 10:18
 
Nahoru Odpovědět
6.12.2020 10:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.