InputLists: RadioList & CheckboxList
- Vojtěch Dobeš
- Gold Partner | 1316
Dovolil jsem si implementovat novou verzi RadioListu a CheckboxListu.
Poněvadž skoro každý měsíc se někdo trápí s renderováním jednoho
z těchto prvků unikátním způsobem, zaměřil jsem své verze na pohodlnou
custom renderovatelnost. Prvky lze přidávat pomocí metod
addMultiRadio
a addMultiCheckbox
. Oba prvky se
chovají jako své známé originály (RadioList z Nette, CheckboxList jako
známý doplněk). Nepodporují však předání klíče metodě
getControl
. Kromě této změny zachovávají plnou zpětnou
kompatibilitu.
Co umí navíc? Především manuální renderování. Viz README
Github: vojtech-dobes/nette-forms-inputlist
Composer: vojtech-dobes/nette-forms-inputlist
Instalace:
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('inputlist', new VojtechDobes\NetteForms\InputListExtension);
};
- Michalek
- Člen | 211
Díky moc.
Já bych jen dodal pár věcí :-)
1. pro aktuální beta Nette (version 2.1-dev released on 2012–12–29) je potřeba jedna úprava.
- InputListExtension.php
use Nette\Utils\PhpGenerator\ClassType; => use Nette\PhpGenerator\ClassType;
2. Kromě {inputlist name ...}...{/inputlist}
lze stále
používat {input name}
– pak se vygeneruje všechno samo. Fakt
to z toho nevyplývá a ztratil jsem kvůli tomu spoustu času, tak ať to
mají ostatní lehčí :)
3. V případě použití makra {inputlist}
je také
nutné zaregistrovat makra
pomocí \VojtechDobes\NetteForms\InputListMacros::install($compiler);
Editoval Michalek (5. 1. 2013 1:17)
- JakubTN
- Bronze Partner | 49
Zdravim, addon vypada vyborne! :)
Snazim sa ho pouzit podla navodu, no dostavam hlasku od ladenky: http://cl.ly/…0S3k3E2Z0z1f
V presenteri mam
$form->addMultiRadio('deliveryoption', 'Spôsob doručenia', $options);
V sablone potom
{inputlist deliveryoption as $key => $label}
{input} {label /}
{/inputlist}
Neviete kde by mohla byt chyba? Prehliadol som nieco?
Dakujem za pomoc.
- Vojtěch Dobeš
- Gold Partner | 1316
Mergnuto, díky přátelé za pull requesty, reporty a trpělivost se slepým programátorem…
- enumag
- Člen | 2118
Ne že bych té implementaci dvakrát rozuměl. :-D https://github.com/…kboxList.php#…
Zkusil jsem na ty dva doplňky dát diff a fakt nevim co má jaké výhody a nevýhody. Ty zdrojáky se liší dost výrazně.
- Vojtěch Dobeš
- Gold Partner | 1316
Určitě by to chtělo prozkoušet, jak se validace na tom mém chová – zkusí to co nejdřív zjistit.
- Stic
- Člen | 28
opat trochu blba pripomienka, no pre zaciatocnikov by sa zisli naozaj trosku lepsie popisane instrukcie :)
do bootstrap.php som dal
<?php
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('inputlist', new VojtechDobes\NetteForms\InputListExtension);
};
$container = $configurator->createContainer();
?>
v presenteri mam
<?php
protected function createComponentScreenTestForm()
{
$form = new Form;
$form->addMultiRadio('sex', 'Sex:', array(
'male' => 'Male',
'female' => 'Female',
));
// call method signInFormSucceeded() on success
$form->onSuccess[] = $this->signInFormSucceeded;
return $form;
}
?>
no a v sablone
<?php
{form screenTestForm}
{inputlist sex as $key => $label}
{input} {label /} {sep}<br>{/sep}
{/inputlist}
{/form}
?>
No troskotam na hlaske : Unknown macro {inputlist} in …/Screen/default.latte:12
Subory som skusil raz nakopirovat do lib/ adresara, raz do components/ ale evidentne to robim naprt :)
Kde presne prosim ich treba dat? Dakujem
- Vojtěch Dobeš
- Gold Partner | 1316
@Stic Vymazání cache nepomůže? Jak vypadá
vygenerovaný SystemContainer
? Obávám se, že postup instalace je
popsaný dostatečně :).
- Václav Mašín
- Člen | 28
Dovolím si se připojit s „reklamací“ na patrně opravdu nefunkční JS validaci.
Jeví se mi to tak, že je problém v tom, že se při použití {inputlist} makra do výsledného HTML kódu <input> elementu nevygenerují ony data-nette-rules atributy.
Konkrétně tento kód v presenteru:
<?php
$this->processForm->addMultiRadio(
'correct',
_('Correct answer:'),
$radios
)->setRequired(_('Please select the correct answer.'));
?>
a tento kód v šabloně:
{inputlist correct as $key => $label}
<tr>
<td>{input}</td>
<td>{label /}</td>
</tr>
{/inputlist}
dá jako výsledek:
<tr>
<td style="padding: 10px"><input type="radio" name="correct" id="frminterviewStepForm-correct-0" required="required" value="13" /></td>
<td style="padding: 10px"><label for="frminterviewStepForm-correct-0">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label></td>
</tr>
<tr>
<td style="padding: 10px"><input type="radio" name="correct" id="frminterviewStepForm-correct-1" required="required" value="14" /></td>
<td style="padding: 10px"><label for="frminterviewStepForm-correct-1">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label></td>
</tr>
<tr>
<td style="padding: 10px"><input type="radio" name="correct" id="frminterviewStepForm-correct-2" required="required" value="15" /></td>
<td style="padding: 10px"><label for="frminterviewStepForm-correct-2">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label></td>
</tr>
<tr>
<td style="padding: 10px"><input type="radio" name="correct" id="frminterviewStepForm-correct-3" required="required" value="16" /></td>
<td style="padding: 10px"><label for="frminterviewStepForm-correct-3">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label></td>
</tr>
Přičemž při změně kódu šablony na obvyklé:
{input correct}
je výsledkem:
<input type="radio" name="correct" id="frminterviewStepForm-correct-0" required="required" data-nette-rules="{op:':filled',msg:"Vyberte pros\u00edm spr\u00e1vnou odpov\u011b\u010f."}" value="13" /><label for="frminterviewStepForm-correct-0">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label><input type="radio" name="correct" id="frminterviewStepForm-correct-1" required="required" value="14" /><label for="frminterviewStepForm-correct-1">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label><input type="radio" name="correct" id="frminterviewStepForm-correct-2" required="required" value="15" /><label for="frminterviewStepForm-correct-2">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label><input type="radio" name="correct" id="frminterviewStepForm-correct-3" required="required" value="16" /><label for="frminterviewStepForm-correct-3">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</label><br />
(Tady se mi BTW taky moc nezdají ty chybějící <br> oddělovače mezi jednotlivými volbami).
Každopádně moc díky za toto rozšíření – zrovna jsem něco takového potřeboval. :-)
- Vojtěch Dobeš
- Gold Partner | 1316
Nenechám se kolegou hrachem zahanbit a taky dodělám Javacriptovou validaci :). Co nejdřív.
- pavelplzak
- Člen | 21
Někdo tip jak k MultiRadioListu rozchodit Live Form Validation ( https://gist.github.com/redhead/552273 ) ? :-)
- orech
- Člen | 40
Zdravím, mám problém rozbehať inputlist, hlási:
Class ‚VojtechDobes\NetteForms\InputListExtension‘ not found
\libs\composer\autoload_namespaces.php
(tu sú súbory zo
src):
'VojtechDobes\\NetteForms' => array($vendorDir.'/InputList/'),
bootstrap.php
:
/ Configure application
$configurator = new Nette\Config\Configurator;
// InputList
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('inputlist', new \VojtechDobes\NetteForms\InputListExtension);
};
// Enable Nette Debugger for error visualisation & logging
$configurator->setDebugMode(true);
$configurator->enableDebugger(__DIR__ . '/../log');
Skúšal som niekoľkokrát premazať cache a editovať neon, no nepomohlo to.
Vopred ďakujem za pomoc
Editoval orech (12. 12. 2013 7:59)