Nefunguje odesilani formulare (jako komponenta)
- tomasnikl
- Člen | 137
Ahoj,
narazil jsem na problem, kdy se mi nechce odesilat forumlar, ktery je jako komponenta a ma vlastni sablonu. Kdyz kouknu do zdrojaku, tak vidim, ze formular ma nastavenou action="", takze ne ?do=contactFormSubmitted jak bych ocekaval.
Kde jsem prosim Vas udelal chybu?
komponenta:
class ContactUsFormControl extends Control {
public function render()
{
$translator = new MyTranslator($this->lang);
$form = new Nette\Application\UI\Form;
$form->setTranslator($translator);
//$form->getElementPrototype()->class('ajax');
$form->addTextArea('request', 'form_request')->setRequired('form_require_request');
$form->addSubmit('send', 'form_send');
$form->onSuccess[] = callback($this, 'contactFormSubmitted');
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/ContactUsForm.phtml');
$template->form = $form;
$template->render();
}
public function contactFormSubmitted($form)
{
$this->sendMail($form->getValues());
$this->flashMessage('form_contact_send', 'ok ajax');
if (!$this->isAjax()){
$this->redirect('this');
} else {
$this->invalidateControl('form');
$form->setValues(array(), TRUE);
}
}
}
a presenter:
protected function createComponentContactUsForm()
{
return new ContactUsFormControl($this->lang);
}
- Jan Voráček
- Člen | 90
Formulář nemáš připojený ke komponentě. Doporučuji i v komponentách vytvářet formuláře stejně jako v presenterech – pomocí továrniček:
class ContactUsFormControl extends Control {
public function render()
{
$template = $this->template;
$template->setFile(dirname(__FILE__) . '/ContactUsForm.phtml');
$template->render();
}
protected function createComponentForm($name) {
$translator = new MyTranslator($this->lang);
$form = new Nette\Application\UI\Form($this, $name);
$form->setTranslator($translator);
//$form->getElementPrototype()->class('ajax');
$form->addTextArea('request', 'form_request')->setRequired('form_require_request');
$form->addSubmit('send', 'form_send');
$form->onSuccess[] = callback($this, 'contactFormSubmitted');
return $form;
}
public function contactFormSubmitted($form)
{
$this->sendMail($form->getValues());
$this->flashMessage('form_contact_send', 'ok ajax');
if (!$this->isAjax()){
$this->redirect('this');
} else {
$this->invalidateControl('form');
$form->setValues(array(), TRUE);
}
}
}
- tomasnikl
- Člen | 137
tak jsem narazil jeste na jeden problem.. upravuju jeden formular v nejakem jiz hotovem projektu a situace je podobna. Nevidite v kodu nize nejakou chybu? formular se odesle na ?do=objednavkaForm-submit, ale redirect na Homepage:saleComplete jiz nefunguje a formular se ani nezpracuje.
Presenter:
protected function createComponentObjednavkaForm()
{
$translator = new MyTranslator($this->lang);
$form = new Nette\Application\UI\Form;
$form->setTranslator($translator);
$form->addText('customerName', 'form_name')
->setRequired('form_require_name');
//A dalsi a dalsi nedulezite inputy
$form->addSubmit('send', 'form_send');
$form->onSuccess[] = callback($this, 'ObjednavkaFormSubmitted');
return $form;
}
public function ObjednavkaFormSubmitted($form)
{
// Nejake zpracovani formulare a pote:
$this->redirect('Homepage:saleComplete');
}
a sablona latte:
{form objednavkaForm}
<table class="formTable">
<tr>
<td>{label customerIn /}</td>
<td>{input customerIn}</td>
<td>{label customerTin /}</td>
<td>{input customerTin}</td>
</tr>
<!-- dalsi a dalsi inputy -->
<tr>
<td> </td>
<td colspan="3"><div style="width:150px">{input send}</div></td>
</tr>
</table>
{/form}
- Jan Voráček
- Člen | 90
Nelíbí se mi název metody velkým písmenem (ObjednavkaFormSubmitted), ale to je detail. Nějak nevidím chybu. Zkus si třeba postupně dumpovat v metodě ObjednavkaFormSubmitted a zjišťovat, co všechno se provede.
public function ObjednavkaFormSubmitted($form)
{
dump($form);
// Nejake zpracovani formulare a pote:
$this->redirect('Homepage:saleComplete');
}
atd.