Checkboxlist
#1 před 3 lety
- timbulko
- Člen

- Registrovaný: 11. 4. 2009
- Příspěvky: 97
Checkboxlist
Zdravím,
je nejaká možnosť ako by sa dal vytvoriť checkboxlist? Čiže niečo
podobné ako radiolist, ale namiesto radio by tam boli checkboxy. http://tophry.net/…kboxlist.png
Vďaka.
#2 před 3 lety
- Patrik Votoček
- Nette Evangelist

- Registrovaný: 8. 3. 2008
- Příspěvky: 2122
Re: Checkboxlist
V nette to aktualně není… Ale možná by ti mohlo pomoct toto http://forum.nette.org/…iewtopic.php?… a da se to resit vice zpusoby vlastni renderer pro formulare. Pak to taky muzes vykreslovat sam vice: http://forum.nette.org/…ni-formularu
Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce
všechno jde.“
#3 před 3 lety
- t.prochazka
- Člen

- Registrovaný: 27. 1. 2009
- Příspěvky: 10
Re: Checkboxlist
A není nějak možné pod jeden label vložit více formulářových prvků, něco jako:
<?php
$form->addItem('Label:')
->addCheckbox('a1','text1');
->addCheckbox('a2','text2');
?>
Taky mi není zatím jasné, jak všechny checkboxy předat jako pole, tedy aby to vygenerovalo name=„d[a]“, name=„d[b]“, name=„d[c]“, jakmile dám d[c] jako name, spadne to na chybě.
#4 před 3 lety
- Jod
- Nette guru

- Registrovaný: 24. 9. 2008
- Příspěvky: 808
Re: Checkboxlist
Dá sa to, ale myslím že defaultný renderer to nezvláda. Takže buď si napíšeš svoj, alebo to vypíšeš do šablony ručne.
Do pola cez container
<?php
$c = $form->addContainer('d');
$c->addCheckbox('a', 'text');
$c->addCheckbox('b', 'text');
?>
Všetko je v Akrabat.forms v examples distribúcie. Zomg, puff..
#5 před 3 lety
- t.prochazka
- Člen

- Registrovaný: 27. 1. 2009
- Příspěvky: 10
Re: Checkboxlist
Díky, to řeší to name=„d[a]“, ale jak dostat třeba dva textová pole vedle sebe, když potřebuji třeba rok zadat od do.
#6 před 3 lety
- Jod
- Nette guru

- Registrovaný: 24. 9. 2008
- Příspěvky: 808
Re: Checkboxlist
Daj jedno rok od a druhé rok do. Ak to chceš vedľa seba som ti napísal, že si buď musíš napísať vlastný renderer, alebo ručne do šablony.
Všetko je v Akrabat.forms v examples distribúcie. Zomg, puff..
#7 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
Ještě k tomu CheckboxListu. Už to bude pár dní, co jsem si udělal
obdobu RadioListu. Místo jedné hodnoty nebo NULL, jako to má
RadioList, vrací pole hodnot nebo NULL.
Také u toho nefunguje JS validace filled, takže jsem metodu
validateFilled u RadioListu přejmenoval na
validateServerFilled, ke které se JS validace negeneruje
automaticky.
A proč to není poděděné od RadioListu, když to má víc než polovinu
metod stejných? Protože se v getControl využívá featury
parent::getControl, což nedělá zrovna to, co by bylo
potřeba:)
Tak pokud to někdo využije, copy & pastujte dále…
class CheckboxList extends FormControl
{
/** @var Nette\Web\Html separator element template */
protected $separator;
/** @var Nette\Web\Html container element template */
protected $container;
/** @var array */
protected $items = array();
/**
* @param string label
* @param array options from which to choose
*/
public function __construct($label, array $items = NULL)
{
parent::__construct($label);
$this->control->type = 'checkbox';
$this->container = /*Nette\Web\*/Html::el();
$this->separator = /*Nette\Web\*/Html::el('br');
if ($items !== NULL) $this->setItems($items);
}
/**
* Returns selected radio value.
* @param bool
* @return mixed
*/
public function getValue($raw = FALSE)
{
return is_array($this->value) ? $this->value : NULL;
}
/**
* Sets options from which to choose.
* @param array
* @return RadioList provides a fluent interface
*/
public function setItems(array $items)
{
$this->items = $items;
return $this;
}
/**
* Returns options from which to choose.
* @return array
*/
final public function getItems()
{
return $this->items;
}
/**
* Returns separator HTML element template.
* @return Nette\Web\Html
*/
final public function getSeparatorPrototype()
{
return $this->separator;
}
/**
* Returns container HTML element template.
* @return Nette\Web\Html
*/
final public function getContainerPrototype()
{
return $this->container;
}
/**
* Generates control's HTML element.
* @param mixed
* @return Nette\Web\Html
*/
public function getControl($key = NULL)
{
if ($key === NULL) {
$container = clone $this->container;
$separator = (string) $this->separator;
} elseif (!isset($this->items[$key])) {
return NULL;
}
$control = parent::getControl();
$control->name .= '[]';
$id = $control->id;
$counter = -1;
$values = $this->value === NULL ? NULL : (array) $this->getValue();
$label = /*Nette\Web\*/Html::el('label');
foreach ($this->items as $k => $val) {
$counter++;
if ($key !== NULL && $key != $k) continue; // intentionally ==
$control->id = $label->for = $id . '-' . $counter;
$control->checked = (count($values) > 0) ? in_array($k, $values) : false;
$control->value = $k;
if ($val instanceof /*Nette\Web\*/Html) {
$label->setHtml($val);
} else {
$label->setText($this->translate($val));
}
if ($key !== NULL) {
return (string) $control . (string) $label;
}
$container->add((string) $control . (string) $label . $separator);
}
return $container;
}
/**
* Generates label's HTML element.
* @return void
*/
public function getLabel()
{
$label = parent::getLabel();
$label->for = NULL;
return $label;
}
/**
* Filled validator: has been any radio button selected?
* @param IFormControl
* @return bool
*/
public static function validateServerFilled(IFormControl $control)
{
return $control->getValue() !== NULL;
}
}
A příklad použití…
$form['name'] = new CheckboxList('title', $items);
$form['name']->addRule('CheckboxList::validateServerFilled', 'Zatrhněte něco...!');
Mimochodem, nestálo by za to udělat nějakou abstraktní třídu (idea… FormControlList), od které by RadioList a CheckboxList dědily?
A asi jedna na Davida… Proč není CheckboxList zařazen do výchozích prvků? Je to proto, že může vrátit pole a né jen jednu hodnotu?
Editoval vlki (26. 5. 2009 13:43)
#8 před 3 lety
- romansklenar
- Moderator

- Registrovaný: 20. 7. 2008
- Příspěvky: 780
Re: Checkboxlist
Je škoda aby tahle komponenta zůstala zapadlá ve fóru, nechceš ji vlki přidat do extras?
#9 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
Jojo, během zítřka jí tam hodím.
#10 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
Extras už mají nové děťátko – CheckboxList :)
#11 před 3 lety
- Lopo
- Nette guru

- Registrovaný: 29. 5. 2009
- Příspěvky: 282
Re: Checkboxlist
404 Not Found
The requested URL /files//checkboxlist.zip does not exist.
#12 před 3 lety
#13 před 3 lety
- Lopo
- Nette guru

- Registrovaný: 29. 5. 2009
- Příspěvky: 282
Re: Checkboxlist
docela ma pobavilo toto v CheckboxList.php :)
* @package Nette\Extras\Captcha
#14 před 3 lety
- dotTwelve
- Člen

- Registrovaný: 19. 6. 2009
- Příspěvky: 176
Re: Checkboxlist
Hlasi mi to chybu: Extension method handler ‚CheckboxList::addCheckboxList‘ is not callable. Co s tim?
#15 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
Lopo napsal(a):
docela ma pobavilo toto v CheckboxList.php :)
* @package Nette\Extras\Captcha
Fixed. Použil jsem Captchu jako pajc. Nestydím se za to:)
dotTwelve napsal(a):
Hlasi mi to chybu: Extension method handler ‚CheckboxList::addCheckboxList‘ is not callable. Co s tim?
Vypadá to jako bys neměl v momentě, kdy registruješ extension metodu, k dispozici třídu CheckboxList. Používáš RobotLoader?
#16 před 3 lety
- dotTwelve
- Člen

- Registrovaný: 19. 6. 2009
- Příspěvky: 176
Re: Checkboxlist
Pouzivam, viz:
<?php
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();
?>
#17 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
A Form::extensionMethod('Form::addCheckboxList', array('CheckboxList',
'addCheckboxList')); máš v bootstrapu? To by ti mělo fungovat…
CheckboxList.php máš někde v dosahu toho RobotLoaderu?
Funguje ti CheckboxList bez použití extension metody?
Tzn. místo
$form->addCheckboxList('demo', 'Choices', $items);
tohle..
$form['demo'] = new CheckboxList('Choices', $items);
..?
Zkusil jsi vymazat temp?
#18 před 3 lety
- dotTwelve
- Člen

- Registrovaný: 19. 6. 2009
- Příspěvky: 176
Re: Checkboxlist
Tak uz to slape, jak hodinky, jsem tele, sice jsem mazal temp, ale ne kompletne. Diky
#19 před 3 lety
- lucass
- Člen

- Registrovaný: 4. 12. 2008
- Příspěvky: 84
Re: Checkboxlist
Zdravím,
vyzkoušel jsem Checkboxlist a zdá se mi, že je nutné překrýt metodu FormControl::setValue($value), aby to po načtení formuláře zaškrtalo příslušná pole, viz kód:
<?php
...
public function setValue($value)
{
$this->value = is_array($value) ? $value : array($value);
}
...
?>
Možná to není chybka a dělá se to v tomto případě jinak. Kdyžtak mě opravte, pokud se mýlím a něco jsem přehlédl.
Doplnění: i když je fakt, že si load stejně musím ručně, páč v DibiRow nikdy nebudu sloupec typu array;) Takže asi nesmyslná připomínka…
Editoval lucass (10. 7. 2009 15:13)
#20 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
Zdravim,
je nejaka moznost, jak pridat podporu CheckboxListu do kontejneru? Pokud mam napriklad
<?php
...
$skupina = $form->addContainer('vazba');
$items = $tiskovina->getPapir();
$skupina->addCheckboxList('papir','Papír',$items);
...
?>
tak mi nette vyhodi logicky chybu Call to undefined method
FormContainer::addCheckboxList()., protoze tu metodu proste nezna. Jenom
tak pres:
<?php
Form::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));
?>
ji taky pridat nemuzu, protoze metoda
CheckboxList::addCheckboxList bere jako prvni argument typ Form a
ne FormContainer.
Jde to nejak vykutit bez prepsani CheckboxListu? At nedelam neco zbytecne :)
#21 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
Hm… a nejde to udělat takto?
<?php
$skupina['papir'] = new CheckboxList('Papír', $items);
?>
Už se mi do toho teď nechce drbat, když to bude David dávat do distribuce.
#22 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
vlki napsal(a):
Hm… a nejde to udělat takto?
<?php $skupina['papir'] = new CheckboxList('Papír', $items); ?>Už se mi do toho teď nechce drbat, když to bude David dávat do distribuce.
no, to praveze nejde. Teda slo by to, ale to bych si to cele kompletne rozbil a to se mi zrovna dvakrat nechce. :( No a jestli to bude David davat do distribuce, nebude lepsi, ze to pojede i uvnitr kontejneru?
EDIT: no jak si tak prochazim zdrojaky FormContainer, tak mas pravdu. Asi to cele rozbiju a udelam znovu. Je mi ale naprosto jasne, ze ve chvili, kdy dopisu posledni strednik po kompletnim prekopani vyda David novou verzi, ktera to bude podporovat :D
Editoval kraklin (11. 9. 2009 18:13)
#23 před 3 lety
- jasir
- Nette guru

- Registrovaný: 4. 12. 2008
- Příspěvky: 768
Re: Checkboxlist
A co bys tím rozbil? Vždyť ta addCheckBoxList dělá toto:
<?php
public static function addCheckboxList(Form $form, $name, $label, array $items = NULL)
{
return $form[$name] = new self($label, $items);
}
?>
Takže to co píše vlki je ekvivalentní, akorát se to přidává ne do
formu, ale do containeru…
Nebo mi něco uniká?
#24 před 3 lety
- kravčo
- Moderator

- Registrovaný: 15. 6. 2008
- Příspěvky: 800
Re: Checkboxlist
vlki napsal(a):
Už se mi do toho teď nechce drbat, když to bude David dávat do distribuce.
Nemal by si práve preto, že to pôjde do distribúcie, takéto bugy opraviť?
Imho stačí zmeniť class-hint, keďže všetky metódy pridávajúce
controly sú implementované vo FormContaineri a Form
od neho dedí…
public static function addCheckboxList(FormContainer $container, $name, $label, array $items = NULL)
{
return $container[$name] = new self($label, $items);
}
a samozrejme opraviť registráciu v bootstrape:
FormContainer::extensionMethod('FormContainer::addCheckboxList', 'CheckboxList::addCheckboxList');
#25 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
kravčo napsal(a):
vlki napsal(a):
Už se mi do toho teď nechce drbat, když to bude David dávat do distribuce.
Nemal by si práve preto, že to pôjde do distribúcie, takéto bugy opraviť?
Imho stačí zmeniť class-hint, keďže všetky metódy pridávajúce controly sú implementované vo
FormContaineri aFormod neho dedí…public static function addCheckboxList(FormContainer $container, $name, $label, array $items = NULL) { return $container[$name] = new self($label, $items); }a samozrejme opraviť registráciu v bootstrape:
FormContainer::extensionMethod('FormContainer::addCheckboxList', 'CheckboxList::addCheckboxList');
presne takhle jsem to chtel vyresit, akorat mi hlasil, ze nemuze predeklarovat addCheckboxList. Tak jsem vytvoril novou:
<?php
public static function addCheckboxListContainer(FormContainer $form, $name, $label, array $items = NULL)
{
return $form[$name] = new self($label, $items);
}
?>
a do bootstrapu pridal:
Form::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxListContainer'));
a slape to jako hodinky. Je to sice prasarna, ale nechtelo se mi nad tim dlouho badat. Mozna v nejake min vytizene chvilce, ale to driv bude soucasti distribuce :)
#26 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
jasir napsal(a):
Takže to co píše vlki je ekvivalentní, akorát se to přidává ne do formu, ale do containeru…
Nebo mi něco uniká?
jj je to ekvivalentni, ale v soucasne podobe formulare jaky mam mi to prislo zbytecne komplikovane. Kdyz nad tim premyslim ted, slo by to udelat, ale uz jsem si reseni vytvoril :)
EDIT: No asi uz u toho sedim dlouho, takze mi nejak prestava fungovat mozkovna a odmita premyslet. Samozrejme, ze by to tak slo a nic by se tim nemenilo, jenom jsem si to nekde na ceste monitor->oci->mozek zbytecne zkomplikoval a hned radeji zavrhl, nez abych se zamyslel. Radeji uz to dneska vypinam :)
Editoval kraklin (11. 9. 2009 18:42)
#27 před 3 lety
- kravčo
- Moderator

- Registrovaný: 15. 6. 2008
- Příspěvky: 800
Re: Checkboxlist
kraklin napsal(a):
presne takhle jsem to chtel vyresit, akorat mi hlasil, ze nemuze predeklarovat addCheckboxList. Tak jsem vytvoril novou:
To je dosť zvláštne… Nemáš tam tú metódu dvakrát?
#28 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
kravčo napsal(a):
kraklin napsal(a):
presne takhle jsem to chtel vyresit, akorat mi hlasil, ze nemuze predeklarovat addCheckboxList. Tak jsem vytvoril novou:
To je dosť zvláštne… Nemáš tam tú metódu dvakrát?
no ani ne. Neni to nahodou tak, ze kdyz mas metodu se stejnym nazvem musi se lisit poctem argumentu a ne jenom jejich typem aby jsi ji mohl pretizit? V Ccku ti staci zmenit typ k pretizeni ale nevim jak se s timhle pere PHP
#29 před 3 lety
- vlki
- Nette guru

- Registrovaný: 30. 6. 2008
- Příspěvky: 239
Re: Checkboxlist
V Ccku ti staci zmenit typ k pretizeni ale nevim jak se s timhle pere PHP
Přesněji až od C++ ;) A myslím, že toto php nepodporuje, ne?
Nemal by si práve preto, že to pôjde do distribúcie, takéto bugy opraviť?
No, zatím jsem měl takovou zkušenost, že to David stejně vždycky udělal nějak rafinovaněji, než někdo navrhoval:) Toto ještě opravím.
Přemýšlel jsem třeba nad doděláním podpory pravidla FILLED na straně klienta a došel k závěru, že to asi stejně teď nemá cenu.
#30 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
vlki napsal(a):
Přesněji až od C++ ;) A myslím, že toto php nepodporuje, ne?
samozrejme v C++ :)
#31 před 3 lety
- kravčo
- Moderator

- Registrovaný: 15. 6. 2008
- Příspěvky: 800
Re: Checkboxlist
kraklin napsal(a):
kravčo napsal(a):
To je dosť zvláštne… Nemáš tam tú metódu dvakrát?
no ani ne. Neni to nahodou tak, ze kdyz mas metodu se stejnym nazvem musi se lisit poctem argumentu a ne jenom jejich typem aby jsi ji mohl pretizit? V Ccku ti staci zmenit typ k pretizeni ale nevim jak se s timhle pere PHP
PHP overloading nepodporuje, navyše ti úplne stačí jedna metóda – tá
pre FormContainer.
#32 před 3 lety
- kraklin
- Člen

- Registrovaný: 3. 9. 2009
- Příspěvky: 14
Re: Checkboxlist
kravčo napsal(a):
kraklin napsal(a):
kravčo napsal(a):
To je dosť zvláštne… Nemáš tam tú metódu dvakrát?
no ani ne. Neni to nahodou tak, ze kdyz mas metodu se stejnym nazvem musi se lisit poctem argumentu a ne jenom jejich typem aby jsi ji mohl pretizit? V Ccku ti staci zmenit typ k pretizeni ale nevim jak se s timhle pere PHP
PHP overloading nepodporuje, navyše ti úplne stačí jedna metóda – tá pre
FormContainer.
jj mas pravdu, staci jenom ta jedna.
#33 před 3 lety
- zakjan
- Člen

- Registrovaný: 17. 2. 2009
- Příspěvky: 10
Re: Checkboxlist
Pro použití v aktuálním Nette je potřeba ve zdrojáku trochu upravit metodu getLabel:
public function getLabel($caption = NULL)
{
$label = parent::getLabel($caption);
#34 před 3 lety
#35 před 2 lety
- m0ufa
- Nový člen

- Registrovaný: 19. 11. 2009
- Příspěvky: 2
Re: Checkboxlist
ahoj,
můžete mne prosím někdo nakopnout jakým způsobem nastavím jednotlivou
položku jako checked?
<?php
protected function createComponentUserForm()
{
$form = new AppForm;
...
$roles = array('1'=>'admin', '2'=>'editor', '3'=>'viewer', '4'=>'guest');
$form->addCheckboxList('roles', 'role:',$roles);
...
}
?>
Zkoušel jsem :
<?php
public function actionDetail($username)
{
$form = $this['userForm'];
$this->template->form = $form;
$form->fireEvents();
$this['userForm']->setDefaults(array(
'roles' => '1'));
}
?>
a nic…
Díky.
#36 před 2 lety
- lucass
- Člen

- Registrovaný: 4. 12. 2008
- Příspěvky: 84
Re: Checkboxlist
Zkus
<?php
...
$form['roles']->setDefaultValue(array(1,2,3)); // to pole je neasociativni, jdou to hodnoty jednotlivych checkboxu, tj. budou zaskrtnute admin, editor, viewer
...
?>
#37 před 2 lety
#38 před 2 lety
- Ondřej Mirtes
- Moderator

- Registrovaný: 8. 1. 2009
- Příspěvky: 1622
Re: Checkboxlist
Ahoj,
v nové verzi s Nette s novou validací formulářů tento doplněk není
kompatibilní – při nastavení setRequired se všechny položky označí
jako povinné, tudíž musí být všechny zaškrtnuté.
#39 před rokem
- acidcliq
- Nový člen

- Registrovaný: 30. 11. 2010
- Příspěvky: 5
Re: Checkboxlist
technicka, jde nejaky zpusobem manipulovat s labely? (nemyslim hlavni)
Online