Nefungující visual paginator
- demonic
- Člen | 19
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
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
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)
- bojovyletoun
- Člen | 667
taky začínám. 1) zkus podle tutoriálu
- zkus bez vyhledávání, aby to fungovalo, a pak až tam přidat search
- demonic
- Člen | 19
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)