Nefungující visual paginator

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

Zdravím,řeším takový problémek. Visual paginator se sice zobrazuje ale po kliknutí mi zmizí snippet search_result místo toho aby se překreslil. Po vyhledání se načtou do search_result výsledky s paginátorem
, po kliknutí např na druhou stránku div zmizí a nic se neděje.

    public function MySearchFormSubmitted(AppForm $form)
    {
      if ($form['ok']->isSubmittedBy()) {
        $search = $form['search']->value;
        $subject = new Subjects;
        $vp = $this['vp']; //zavola komponentu Vp
        $paginator = $vp->paginator;
        $paginator->itemsPerPage = 2;
        $paginator->itemCount = $subject->CountResults($search);
        $subjects = $subject->findSubjects($search, $paginator->offset, $paginator->itemsPerPage);
        $this->template->search_term = $search;
        $this->template->suggestions = $subjects;
        if (!$this->isAjax())
          $this->redirect('this');
        else {
          $this->invalidateControl('search_result');
          $this->invalidateControl('search_form');
          $form->setValues(array(), TRUE);
        }
      }
    }
    public function renderDefault()
    {
      if ($this->isAjax()){
        $this->invalidateControl('search_result');
        }
    }
    protected function createComponentVp()
    {
      return new \VisualPaginator;
    }
--/

Editoval demonic (24. 11. 2010 20:14)

bojovyletoun
Člen | 667
+
0
-

jedeš s ajaxem nebo bez ajaxu? – zkus firebug – panel net

demonic
Člen | 19
+
0
-

S ajaxem, bez nej to nejde taky, coz je mi zahadou, nesjpis sem nekde neco zapomel. V dokumentaci se clovek moc nedocte.

bojovyletoun
Člen | 667
+
0
-

viděl bych chybu, že paginator nastavuješ(), jen pokud odesíláš nějaký formulář.

zkus přemístit kod jinam (itemspaerpage, subejcts)..

help
https://pla.nette.org/…ivajici-ajax#…

Editoval bojovyletoun (24. 11. 2010 22:09)

demonic
Člen | 19
+
0
-

Já teoreticky potřebuju ten paginátor až ve chvíli, když se formulář odešle, do té doby nemám co stránkovat a přemístit asi kod není možné, vše se odvíjí od hodnoty $search na kterou čekám. Můžes uvést co jsi měl na mysli? Na ten článek sem se díval několikrát i předtím ale pořád mi to nejde do hlavy. Děkuji za příspěvek!

Editoval demonic (24. 11. 2010 22:46)

HanziQ
Člen | 16
+
0
-

Když klikneš na odkaz ve VP tak se ti formulář znovu neodesílá, tzn MySearchFormSubmitted neproběhne a VP neni(invaliduje se, ale nemá data na překreslení).

demonic
Člen | 19
+
0
-

To zní logicky, ted' jak z toho ven? S nette začínám jsem proto celkem ztracený, zkusil jsem vše co mě napadlo. Díky za rady!

bojovyletoun
Člen | 667
+
0
-

taky začínám. 1) zkus podle tutoriálu

  1. zkus bez vyhledávání, aby to fungovalo, a pak až tam přidat search
demonic
Člen | 19
+
0
-

Udělal sem toto, níže uvedené řešení, které funguje, avšak přijde mi dost nečisté a navíc tím přicházím o podporu ajaxu odeslání formuláře. Dokázal by někdo poradit nějaké čistější řešení? S příkladem užití. Díky za jakékoli rady!

    protected function createComponentVp()
    {
      return new \VisualPaginator;
    }

    public function renderDefault()
    {

      if($this->getParam('query')){
        $search = $this->getParam('query');
        $subject = new Subjects;
        $vp = $this['vp']; //zavola komponentu Vp
        $paginator = $vp->paginator;
        $paginator->itemsPerPage = 2;
        $paginator->itemCount = $subject->CountResults($search);
        $subjects = $subject->findSubjects($search, $paginator->offset, $paginator->itemsPerPage);
        $this->template->search_term = $search;
        $this->template->suggestions = $subjects;
        if ($this->isAjax())
        $this->invalidateControl('search_result');
       }
    }
public function MySearchFormSubmitted(AppForm $form)
    {
      if ($form['ok']->isSubmittedBy()) {
        $query = $form['search']->value;
        $this->redirect('Default', array('query' => $query));
      }
    }

    protected function createComponentMySearchForm($name)
    {
        $form = new AppForm($this, $name);
        $form->getElementPrototype()->class('ajax');
        $form->addText('search', 'Hledaný prodejce:')
           ->addRule(Form::FILLED, 'Zadejte prosím hledaného prodejce.');
        $form->addSubmit('ok', 'Vyhledat');
        $form->onSubmit[] = callback($this, 'MySearchFormSubmitted');
    }
--/
<script>
  $("a.ajax, .paginator a").live("click", function (event) {  /*visual_paginator*/
  var vp_link;
    event.preventDefault();
      if($(this).attr('href') == '/'){
        vp_link = '/?vp-page=1';
      }
      else{
        vp_link = this.href;
      }
    $.get(vp_link+'&'+'query={!$search_term}');
    alert(this.href+'{$search_term}');
    });

// ...tady je jeste podpora odeslani formulare ajaxem
</script>

Editoval demonic (26. 11. 2010 9:00)