Nette Forms Horizontal CSS + Stránkování + Reset Button

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

Zdravím,

dělám agendu rezervací(plánů) v čase s tím že chci vypisovat defaultně aktuální týden se stránkováním (předchozí, následující, aktuální) a při aplikaci firmu uplatnit i tento filtr v němž jsou položky uživatel, lokace a od kdy do kdy se mají data renderovat (zobrazit) → Nette 2.2.9 + Bootstrap 3.3.4

  1. první věc co mi nefunguje je zaroznat formuláž vytvořený přes nette forms horizontálně
  2. jak propojit forms a stránkování s tím že defaultní stránka bude fungovat na principu google agendy s tím že uvidíme aktuální týden a budeme se moci pohybovat do minulosti i do budoucnosti naplánovaných

ukolů

  1. jak zjistím který submit jsem zmáčknul když mám jeden pro zapnutí filtru a druhý pro jeho zrušení
  2. lze předat requer formu přímo render metodě když tam mám stránkování v jejím parametru ?

TEMPLATE

{if $user->isAllowed('Reservations','agendaFilter')}
                            <div class="row">
                                <div class="col-lg-12">
                                    {if $ActiveFilter}
                                        <div class="alert alert-success">
                                            <i class="fa fa-check fa-fw"></i> Filtr je aktivní
                                        </div>
                                    {else}
                                        <div class="alert alert-warning">
                                            <i class="fa fa-warning fa-fw"></i> Filtr není aktivní
                                        </div>
                                    {/if}
                                    {control agendaFilter}
                                </div>
                            </div>
                        {/if}

                        <p id="cntr">Was found - <b>{$res_cnt}</b> record(s)</p>

                        <div class="clear"></div>
                        <div class="table-responsive">

                            <table class="table table-hover">
                                <thead>
                                    <tr>
                                        <th nowrap>From Date</th>
                                        <th nowrap>To Date</th>
                                        <th nowrap>Calendar</th>
                                        <th nowrap>User</th>
                                        <th nowrap>Department</th>
                                    </tr>
                                </thead>

                                <tbody>
                                    {foreach $all_res as $res}
                                        <tr>
                                            <td nowrap>{$res->fromDate|date:'%d.%m.%Y %H'}</td>
                                            <td nowrap>{$res->toDate|date:'%d.%m.%Y %H'}</td>
                                            <td nowrap>{$res->calendarName}</td>
                                            <td nowrap>{$res->userName}</td>
                                            <td nowrap>{$res->departmentName}</td>
                                        </tr>
                                    {/foreach}
                                </tbody>
                            </table>

                            <div class="center-block">
                                <ul class="pagination">
                                    <li><a n:href="this, page => $paginator->getPage() - 1" n:if="!$paginator->isFirst()"> předchozí</a></li>
                                        {for $i = 1; $i <= $paginator->getLastPage(); $i++}
                                        <li {if $i == $paginator->getPage()} class="active" {/if}><a n:href="this, page => $i">{$i}</a></li>
                                        {/for}
                                    <li><a n:href="this, page => $paginator->getPage() + 1" n:if="!$paginator->isLast()"> další</a></li>
                                </ul>
                            </div>

                        </div>

vytvoření komponenty Formuláře (generuje se jako prvky tabulky)

$form = new Form;
        $form->getElementPrototype()
                ->class('form-horizontal form-group flex')->role('form');

předání formuláře render agenda

public function processOfFilter($form) {
    if ($form->isSuccess()) {
        $this->formValues = $form->getValues();
        $this->renderAgenda();

    }
}

renderování dat agendy se stránkováním

public function renderAgenda($page = 1) {
        $limit = 25;

        // Is filter Active ?
        if ($this->formValues != NULL) {
            $this->template->ActiveFilter = TRUE;
        } else {
            $this->template->ActiveFilter = FALSE;
        }

        if ($this->user->isAllowed('Reservations', 'agendaFilter')) { // Admin & SuperUser
            $this->template->res_cnt = //DB COUNT ALL
        } else { // User
            $this->template->res_cnt = //DB COUNT ONLY USER
        }

        $paginator = new Nette\Utils\Paginator;
        $paginator->setItemCount($this->template->res_cnt); // celkový počet položek (např. článků)
        $paginator->setItemsPerPage($limit); // počet položek na stránce
        $paginator->setPage($page); // číslo aktuální stránky, číslováno od 1

        if ($this->user->isAllowed('Reservations', 'agendaFilter')) { // Admin & SuperUser

            $this->template->all_res = //DB FETCH ALL
        } else { // Users
            $this->template->all_res = //DB FETCH ALL
        }

        if ($page < 1 || $page > $paginator->getLastPage()) {
            $page = 1;
        }

        $paginator->setPage($page);

        $this->template->paginator = $paginator;
    }

formulář zapnutía vypnutí filtru

$form->addSubmit('filter', 'Filtrovat')
        ->getControlPrototype()
        ->setClass('btn btn-default');

$form->addSubmit('reset', 'Zrušit')
        ->getControlPrototype()
        ->setClass('btn btn-default');

$form->onSuccess[] = array($this, 'processOfFilter');

return $form;

Editoval Joacim (18. 6. 2015 18:44)