Předávání proměnné do componenty formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Sejber
- Člen | 10
Ahoj,
mám databázi promo kódů. Každý promo kód má své odměny.
Potřebuju formulář s vypsanými odměnami dle promokódu, který
návštěvník zadá v předchotím kroku.
Všechno jde, dokud nedám odeslat formulář, ve které se vybere odměna.
V proměnné $this->currentBenefits je pole s odměnami, ale evidentě si je neudrží po odeslání formuláře, protože když dumpnu $form->getValues(), tak benefit je NULL.
<?php
function createComponentSelectBenefitForm($form) {
$form = new Form();
$benefits = $this->currentBenefits;
$form->addSelect('benefit', 'Zvolte odměnu', $benefits)
->addRule(Form::FILLED, 'Zvolte odměnu');
$form->addText('name', 'Vaše identifikace')
->addRule(Form::FILLED, 'Vyplňte Vaši identifikaci');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = callback($this, 'selectBenefitSubmit');
return $form;
}
?>
- Sejber
- Člen | 10
matej21 napsal(a):
kde a jak plnis currentBenefits?
<?php
protected $currentBenefits = NULL;
protected $benefits = array(
'promo007' => array(
0 => 'LCD Televizor',
1 => 'Mikrovlná trouba',
2 => 'Varná konvice',
3 => 'Hrnek na kafe',
),
'promo008' => array(
0 => '10 000 CZK',
1 => '385 EUR',
2 => '526 USD',
),
);
function insertCodeSubmit($form) {
$code = $form['code']->getValue();
if ($this->checkPromoCode($code)) {
$this->template->codeIsInserted = true;
$this->setCurrentBenefits($code);
} else {
$this->template->codeIsInserted = false;
$this->flashMessage('Neplatný promo kód!','error');
}
}
function setCurrentBenefits($code) {
$this->currentBenefits = $this->getBenefitsByCode($code);
}
function getBenefitsByCode($code) {
return $this->benefits[$code];
}
?>
- David Matějka
- Moderator | 6445
nejlepsi bude bud si ten „code“ dat do url (z insertCodeSubmit
presmerovat
$this->redirect('someAction', array('code'=>$code));
) nebo ho
propasovat do druhyho formu jako skryty input