Low level formulář s input type range. Jak dostat hodnoty input polí vytvořených uvnitř foreach loopu?
- warriotox
- Člen | 30
Mám rezervační systém pro hostel kde jsou sdílené pokoje. Člověk si může udělat rezervaci na několik postelí v každém pokoji. V šabloně mi foreach tvoří input range posuvníky pro každý pokoj, kde name attribut je vždy room-ID_POKOJE a pak value toho posuvníku je počet zvolených postelí. No a teď ale vůbec nevím jak si to poslat zpátky do presenteru společně s jiným formulářem, když to stojí v HTML mimo něj. Zkoušel jsem to co je v návodu na Low-levle formulář, ale vrácená hodnota je prázdná a už vůbec pak nevím jak dostat všechny ty hodnoty u těch posuvníku kde je value > 0 do nějakého pole typu Pokoj ID, Počet žádaných postelí. V aplikaci to vypadá takhle pro představu
screenshot aplikace v prohlizeci
Vytvoření formuláře v presenteru
public function createComponentFormReservation() {
$form = new UI\Form;
//tohle dostatnu zpátky bez problému, ale nevím jak přidat ty range slidery..
$form->addHidden('from_value')->setAttribute('id', 'from_value');
$form->addSubmit('send', 'Odeslat')->setAttribute('id', 'rb-tla-save');
$form->onSuccess[] = $this->formReservationSubmitted;
return $form;
}
v Šabloně
<div id="formular-hidden">
//formulář s tím hidden inputem je tady ale slidery jsou uplně mimo, níže
{control formReservation}
</div>
<div id="slidery">
//generování range sliderů pro každý pokoj
{foreach $availableRooms as $room}
<input name="room-{$room['id']}" class="slider" type="range" min="0" max="{$room['num_free_beds']}" step="1">
{/foreach}
</div>
Zpracování formuláře v presenteru
public function formReservationSubmitted($form) {
$data = $form->getValues();
//tohle správně vezme hodnotu v inputu from_value a můžu jí v klidu uložit do šablony
$test['x'] = $data['from_value'];
//tohle je z toho low-level formuláře návodu, ale nic to nedělá myslím.
//Ta proměná X pak nic neobsahuje a hlavně já potřebuju ne jen room-1 ale všechny pokoje
$values = $form->getHttpData($form::DATA_TEXT, 'room-1');
$values = $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, 'room-1');
//ideálně bych bral něco jako
$test['x'] = $values;
$sess=$this->getSession('rtc');
$sess->x=$test['x'];
$this->redirect('checkout');
}
- Barvoj
- Člen | 60
Jestli se nepletu, tak se hodnoty inputů mimo formulář vůbec neodesílají…
Takže jsou dvě možnosti, jak toto řešit:
- vykreslit formulář ručně a inputy generovat mezi tagy <form></form>
- přidat inputům mimo formulář atribut form vis http://www.w3schools.com/…put_form.asp
Editoval Barvoj (22. 2. 2016 9:33)
- warriotox
- Člen | 30
Barvoj napsal(a):
Jestli se nepletu, tak se hodnoty inputů mimo formulář vůbec neodesílají…
Takže jsou dvě možnosti, jak toto řešit:
- vykreslit formulář ruče a inputy generovat mezi tagy from
- přidat inputům mimo formulář atribut form vis http://www.w3schools.com/…put_form.asp
aha ok, tak s tím už si poradím díky.