Pristup k formulari v sablone pri pouzitich formularovych maker

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

Ahojte, mam takovyto kod v sablone:

{form textForm}
<table class="vypis" cellpadding="0" cellspacing="0">
    <thead>
        <tr>
            <th>Napište název textu</th><th>Zobrazovat datum</th><th>Zvolte jazyk</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td style="padding: 5px;">{input text_name, class => 'pole01'}</td>
            <td style="padding: 5px;">{input content_show_date}</td>
            <td style="padding: 5px;">{input text_lang_id, class => 'pole01'}</td>
        </tr>
        <tr>
            <th colspan="3">Napište text</th>
        </tr>
        <tr>
            <td style="padding: 5px;" colspan="3">{input text_text}</td>
        </tr>
        <tr>
            <td style="padding: 5px;" colspan="3"><p class="ulozit">{input odeslat}</p></td>
        </tr>
        </tr>
    </tbody>
</table>
{/form}

a takto vytvarim formular v presenteru:

protected function createComponentTextForm($name)
{
    $form = new TextForm($this, $name);
    if($this->formFunction == 'create') {
        $form->onSubmit[] = array($form, 'formSubmitedCreate');
    }
    if($this->formFunction == 'edit') {
        $form->onSubmit[] = array($form, 'formSubmitedEdit');
        $form->addHidden('content_id');
        $form->addHidden('content_type');
    }
}

Zajimalo by me, jestli je mozne nejak pristupovat z sablony k tomu formulari, napriklad abych mohl pouzit neco takoveho jako

<div n:foreach="$form->getComponents(TRUE, 'Nette\Forms\HiddenField') as $control">{$control->control}</div>

vzhledem k tomu, ze skryta pole pridavam k formulari dynamicky na zaklade toho zda jde o editacni, nebo vytvareci formular.

aannubis
Člen | 33
+
0
-

Nikdo neporadí?

bojovyletoun
Člen | 667
+
0
-
  1. FormMacros:„http://nette.merxes.cz/form-macros/“
  2. (templateFormRender):„https://componette.org/search/?q=templaterenderer“
  3. asi bude stačit toto: https://forum.nette.org/…apis-sablony příklad: {$control['loginForm']['user']->control}

začal bych možností 3, pak 1. dvojka je dle mě málo používaná

Editoval bojovyletoun (14. 4. 2011 14:42)

aannubis
Člen | 33
+
0
-

Ahoj, dikuji, no prave ja ty makra pouzivam – ale neprisel jsem na to, jak kdyz vytvorim ten formular makrem {form nazevFormulare} tak jak v nem pristoupim ke skrytym polym tak, abych je mohl foreachem projit. Chapu zapis {input}, to pouzivam, ale jde mi o to, ze dopredu nevim jake a kolik bude hidden poli, a potreboval bych je tedy vytahnout necim jako

$form->getComponents(TRUE, 'Nette\Forms\HiddenField') as $control

coz se mi vsak nedari, nebot to makro {form nazevFormulare} mi zadnou promenou $form nevytvori :(

Foowie
Člen | 269
+
0
-

Připiš si do třídy s formulářovými makry statický getter na statickou proměnnou $form a potom ten form normálně získáš \Nette\Templates\FormMacros::getForm()

aannubis
Člen | 33
+
0
-

Děkuji pěkně, vyzkouším :-)

aannubis
Člen | 33
+
0
-

Tak nakonec jsem to vyresil takto, do FormMacros jsem si pridal

$latte->macros['formHiddenFields']='<?php '.__CLASS__.'::hiddenFields() ?>';


static function hiddenFields(){
  foreach (self::getForm()->getComponents(TRUE, 'Nette\Forms\HiddenField') as $polozka) {
    echo $polozka->control;
  }
}

Kdyz si takto pridam neco do te knihovny, neni to proti nejakym licencnim ujednanim?

bojovyletoun
Člen | 667
+
0
-

Licence BSD: Pokud dílo nešíříš, můžeš si dělat co chceš. Pokud šíříš (můžeš šířit i s úpravami), tak až pak vznikají podmínky (stručně: informace o copyrightu musí zůstat, prohlášení o zřeknutí odpovědnosti a nepoužívat Nette v názvech projektů)

viz zde https://nette.org/cs/license