Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 42a6b656

Přidáno uživatelem Filip Jani před téměř 6 roky(ů)

Odstranění example dynamického formuláře

Zobrazit rozdíly:

app/AdminModule/component/Example/ExampleDynamic.latte
1
{form form}
2
    <div class="row mb-2">
3
        <div class="col-1">
4
            {label element}
5
        </div>
6
        <div class="col-9">
7
            {input element}
8
        </div>
9
    </div>
10

  
11
    <div n:multiplier="books">
12
        <div class="row mb-2">
13
            <div class="col-1"><label n:name="line">Řádka</label></div>
14
            <div class="col-3"><input n:name="line" n:class="form-control" required></div>
15
            <div class="col-1 offset-1"><label n:name="book">Knížka</label></div>
16
            <div class="col-3"><input n:name="book" n:class="form-control"></div>
17
            <div class="col-2">{btnRemove 'class' => 'btn btn-danger'}</div>
18
        </div>
19
    </div>
20

  
21
    {btnCreate books class => 'btn btn-success'}
22

  
23
    <div class="row mt-5">
24
        <div class="col-2">
25
            {input submit}
26
        </div>
27
    </div>
28

  
29
    <hr class="mt-5">
30
    <h4>Výsledky</h4>
31

  
32
    <code>
33
        {snippet results}
34
            {ifset $results}
35
                {foreach $results as $element => $value}
36
                    {if $value instanceof \Nette\Utils\ArrayHash}
37
                        {foreach $value as $el => $val}
38
                            <b>Element:</b> {$element}[{$el}], <b>value:</b> {var_dump($val)}
39
                            <br>
40
                        {/foreach}
41
                    {else}
42
                        <b>Element:</b> {$element}, <b>value:</b> {$value}<br>
43
                    {/if}
44
                {/foreach}
45
            {/ifset}
46
        {/snippet}
47
    </code>
48
{/form}
app/AdminModule/component/Example/ExampleDynamic.php
1
<?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
}
app/AdminModule/presenters/ExamplePresenter.php
1
<?php
2

  
3

  
4
namespace App\AdminModule\Presenters;
5

  
6

  
7
use App\AdminModule\Components\IExampleDynamicFactory;
8

  
9
class ExamplePresenter extends BaseAdminPresenter
10
{
11
    /**
12
     * @var IExampleDynamicFactory
13
     */
14
    private $dynamicFactory;
15

  
16
    public function __construct(IExampleDynamicFactory $dynamicFactory)
17
    {
18

  
19
        $this->dynamicFactory = $dynamicFactory;
20
    }
21

  
22
    public function createComponentForm()
23
    {
24
        return $this->dynamicFactory->create();
25
    }
26
}
app/AdminModule/templates/Example/default.latte
1
{block content}
2
{control form}

Také k dispozici: Unified diff