předběžné generování formuláře do stránky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dnd
Člen | 16
+
0
-

Používám jen NForm pro usnadnění validace formuláře ve statických stránkách. Stránky jsou bohužel postaveny tak, že obsah každé stránky je uveden ve svém souboru (o-domacich-upirech.php) jako string v proměnné $content='';. Index pak zpracovává adresu a podle toho includuje požadovaný soubor a dále pak pracuje se stringem v proměnné. A do této proměnné jsem ručně zapojil nette prvky formuláře

<?php
$form = new NForm('Kontakt');
$form->addText('jmeno', 'Jméno');
$form->addText('mail', 'E-mail *')
		->addCondition(NForm::FILLED)
		->addRule(NForm::EMAIL,'emailová adresa nemá správný formát');
$form->addText('tel','Telefon *')
		->addConditionOn($form['mail'], ~NForm::FILLED)
		->addRule(NForm::FILLED,'vyplňte alespoň telefon nebo email');
$form->addSubmit('submitKontakt',' ');

$content = '<h1>kontakt</h1>
                <form action="" method="post" id="frm-Kontakt">
                    <p>
                        '.$form['jmeno']->label.'
                        '.$form['jmeno']->control.'
                    </p>
                    <p>
                        '.$form['mail']->label.'
                        '.$form['mail']->control.'
                    </p>
                    <p>
                        '.$form['tel']->label.'
                        '.$form['tel']->control.'
                        <span class="info">Musíte uvést alespoň jeden kontaktní údaj, abychom Vám mohli odpovědět.</span>
                    </p>
                    <p><span>*</span> povinný údaj</p>
                    '.$form['submitKontakt']->control.'
                </form><script src="/js/netteForms.js"></script>';
?>

Bohužel (pokud dobře chápu), takhle nefunguje serverové zpracování. Nezpracuje se po odeslání
$form->isSubmitted();
Nemohu použít $form->render('begin') protože vypíše <form… > přímo do stránky, ale já ho potřebuji do proměnné $content, která se vypíše (s celým formulářem) až později. Takže teď akorát odchytávám $_POST a nemůžu využít ani getValues() :-(
Nedochází mi, proč se $form po odeslání nezpracuje. Co potřebuje proběhnout, aby to fungovalo?

Ot@s
Backer | 476
+
0
-

Hádám, že si budeš muset do projektu přidat ještě i Latte. :-)
Tj. mít latté šablonu s obsahem stránky a formulářema (jak potřebuješ) a pak šablonu vyrenderuješ do $content.

// v $form je definice formulare NForm
$template = new NFileTemplate('o-upirech.latte'); // soubor se šablonou
$template->form = $form;
$template->osloveni = 'Osloveni';

ob_start();
$template->render();
$content = ob_get_contents();
ob_end_clean();

K tomu zachycení odeslání – místo $form->isSubmitted() vyzkoušej $form->isSuccess().

Editoval Ot@s (24. 2. 2012 14:26)

OK3
Člen | 91
+
0
-

Ty ob_ věci jsou nutný? Myslel jsem, že jde něco jako

<?php
$html = (string) $template;
?>