RadioList::getOption() jenom jako string
- Mikulas Dite
- Člen | 756
Ahoj, dneska jsem narazil na problém s nastavením jakéhokoliv parametru
jednomu option
v RadioList
u. Každá jeho metoda (teda
dvě, getControl($key)
a getOption($key)
) vrací html
ve stringu. Opravdu nikde není možnost získat normální objekt, který by
uměl vracet prototype?
- Majkl578
- Moderator | 1364
https://api.nette.org/…dioList.html
FormControl::getControlPrototype()
jinak RadioList::getControl() by také měl vracet Html objekt (viz API).
- Mikulas Dite
- Člen | 756
Otestoval sem to a viděl bych to na problém RadioListu:
$form->addRadioList('radio', NULL ,array('jedna', 'dva'));
foreach ($form['radio']->getControl() as $option) {
if ($option instanceof Object) {
Debug::dump(TRUE);
} else {
Debug::dump(FALSE);
}
Debug::dump($option);
}
bool(FALSE)
string(106) "<input type="radio" name="radio" id="frm-radio-0" value="0" /><label for="frm-radio-0">jedna</label><br />"
bool(FALSE)
string(104) "<input type="radio" name="radio" id="frm-radio-1" value="1" /><label for="frm-radio-1">dva</label><br />"
- Mikulas Dite
- Člen | 756
Nette neumožňuje editaci jednotlivých položek RadioListu.
Rád bych napsal nějaké řešení s Html objektem. Je tu ale zádrhel: Jak
spojit input radio
a label
?
- Pokud by to bylo přes nějaký další Html wrapper, například
div
, itarace nagetControl()
wrappery ho vracela místo radio controlů.getControl($key)
by nebyl problém. - Udělat nějaký speciální objekt děděný od Html, který by defaultně control vracel a na požádání funkce z RadioList::getLabel($key) by vracel label.
- Udělat zvlášť speciální gettery pro jednotlivé controly (tzn. něco
jiného než
getControl($key)
) a pro labely. Ztíží manuální render každé položky zvlášť.
- Mikulas Dite
- Člen | 756
Vytvořil jsem novou třídu RadioListItem
. Stará se právě
o jednu dvojici input-label
. Umožňuje RadioListu vracet přes
metody getItemControl($key)
a getItemLabel($key)
jejich Html elementy a ty následně editovat. Žádný BC break nebyl potřeba,
všechny originální NetteForm testy prošly úspěšně.
Fork na:
https://github.com/Rullaf/nette
Ukázky:
$form->addRadioList('name', 'label', array('jedna', 'dva', 'tri'));
$form['radio']->getControl(1)->class = 'radioClass';
//stejné jako:
$form['radio']->getItemControl(1)->class = 'radioClass';
$form['radio']->getItemLabel(1)->class = 'labelClass';
$form->addRadioList('radio', null, array('jedna' => 'aaa', 'dva' => 'bbb', 'tri' => 'ccc'))
$form['radio']->getControl('dva')->class = 'radioClass';
//stejné jako:
$form['radio']->getItemControl('dva')->class = 'radioClass';
$form['radio']->getItemLabel('dva')->class = 'labelClass';
A místo class
se dá pochopitelně využít jakýkoliv jiný
Html atribut, případně jakákoli metoda třídy Html
.
Teď už se tahle feature má šanci do Nette dostat?
Editoval Mikulas Dite (9. 4. 2010 16:43)