Projekt

Obecné

Profil

Stáhnout (2.15 KB) Statistiky
| Větev: | Tag: | Revize:
1 e19aef4e Filip Jani
<?php
2
3
4
namespace App\AdminModule\Components;
5
6
7
use App\Utils\Form;
8
use Nette\Application\UI\Control;
9
use Nette\Forms\Container;
10
11
/**
12
 * Ukázkový dynamický formulář - SMAZAT PŘI PŘEDÁNÍ!
13
 *
14
 * @package App\AdminModule\Components
15
 */
16
class ExampleDynamic extends Control
17
{
18
    public function render()
19
    {
20
        $this->template->setFile(__DIR__ . '/ExampleDynamic.latte');
21
        $this->template->render();
22
    }
23
24
    public function createComponentForm()
25
    {
26
        $form = new Form;
27
28
        $min = 1; // Minimální počet kopií které se zobrazí ve formuláři (tj. 1 = minimálně jednou tam budou ty prvky)
29
30
        $form->addText('element', 'Další prvky');
31
32
        // Definice dynamických prvků
33
        $multiplier = $form->addMultiplier('books', function (Container $container)
34
        {
35
            $container->addText('line', 'Řádka');
36
            $container->addText('book', 'Knížka');
37
        }, $min);
38
39
        // Definice tlačítek pro přidání / odebrání řádku
40
        $multiplier->addCreateButton('Add')->addClass('btn btn-primary');
41
        $multiplier->addRemoveButton('Remove')->addClass('btn btn-danger');
42
43
        $form->setDefaults($this->getContainerDefaults());
44
45
        $form->addSubmit('submit', 'Odeslat');
46
        $form->onSuccess[] = [$this, 'formSuccess'];
47
48
        return $form;
49
    }
50
51
    public function formSuccess(Form $form)
52
    {
53
        \Tracy\Debugger::barDump($form->getValues());
54
        $this->template->results = $form->getValues();
55
        $this->redrawControl('results');
56
    }
57
58
    /**
59
     * Vrací testovací pole s defaultníma hodnotama pro ukázku jak se plní formulář při editaci
60
     */
61
    public function getContainerDefaults()
62
    {
63
        return [
64
            'element' => 'Nějaký další prvky',
65
            'books' =>  // název kontaineru v addMultiplier
66
                [
67
                    ['line' => '1.', 'book' => 'kniha 1.'],
68
                    ['line' => '2.', 'book' => 'kniha 2.'],
69
                    ['line' => '3.', 'book' => 'kniha 3.']
70
                ]
71
        ];
72
    }
73
74
}
75
76
interface IExampleDynamicFactory
77
{
78
    /**
79
     * @return ExampleDynamic
80
     */
81
    public function create();
82
}