Podivné chování s výpisem dat s využitím AJAXu
- Manny7
- Člen | 67
Ahoj,
v templatu mám vypsány data z databázové tabulky. Ve vypsané tabulce mám
přidánu možnost řadit výpis pomocí ASC a DESC.
Řeším to nějak takto:
na začátku šablony:
@{block #content}
odkaz
<a href="{link sorting! 'sc' => 'asc'}" class="ajax"><img src="{$basePath}/images/sortup.png" alt="" /></a>
<a href="{link sorting! 'sc' => 'desc'}" class="ajax"><img src="{$basePath}/images/sortdown.png" alt="" /></a>
zde si ta data vypisuji:
{snippet tab_ajaxs}
{$i=0}
{foreach $tab_ajaxs as $tab_ajax}
{$i++}
{if ($i == 2)}
<tr class="suda">
{$i=0}
{else}
<tr class="licha">
{/if}
// zde jsou vypsána data
</tr>
{/foreach}
{/snippet}
Handler vede sem:
public function renderDefault()
{
$man = new \SqlManager;
$this->template->tab_ajaxs = $man->findAll('comp')->orderBy('id')->desc();
}
public function handleSorting($sc)
{
$sql = new \SqlManager;
$this->template->tab_ajaxs = $sql->findAll('comp')->orderBy('id')->asc();
$this->invalidateControl('tab_ajaxs');
}
Způsob řazení dat při výpisu z tabulky mám špatně, defaultně si data vypisuji jako DESC, ale abych viděl změnu, tak jsem do handleru prásknul natvrdo ASC.
Ale hlavní problém je, že po kliknutí na odkaz se mi data nejenže nepřeřadí (z DESC **výpisu na **ASC), ale nad původně vypsanou tabulku dat z DB (vypisuje se z defaultRenderu) se mi vytvoří ještě jedna (ten)… takže ve výsledku tam mám 2 tabulky s daty z DB…
do stránky mám nahráty tyto JS v tomto pořadí:
jQuery poslední verze,
jquery.livequery.js,
jquery.nette.js
Neměli byste tip na to, v čem by mohl být problém? Pořád nevím, jestli mi něco podstatného uniká nebo tam je jen nějaká přehlédnutá krpa… Děkuji
EDIT: upravena nesrovnalost v názvu proměnné
Editoval Manny7 (29. 8. 2010 15:11)
- Ondrej
- Člen | 110
Manny7 napsal(a):
Ondrej – tak to jsem myslel, že co je v renderDefault(), tak to se použije při načtení stránky a po zavolání nějakého handleru dojde k přepsání renderDefaultu tím volaným handlerem…
renderDefault() se pouzije i pro ajax handler. Si v handleru uloz smer razeni do promenne a tu pouzij v renderDefault().
- Manny7
- Člen | 67
Tak se mi to pořád nedaří a bojuju s tím. Zkusil jsem:
public $scCol = NULL;
public function handleSorting($sc)
{
$scCol = $sc;
}
public function renderDefault($scCol)
{
$man = new \SqlManager;
if(isset($scCol)):
if($scCol == 'asc')
$this->template->tab_ajaxs= $man->findAll('comp')->orderBy('id')->asc();
else
$this->template->tab_ajaxs= $man->findAll('comp')->orderBy('id')->desc();
else:
$this->template->tab_ajaxs= $man->findAll('comp')->orderBy('id')->desc();
endif;
$this->invalidateControl('tab_ajaxs');
}
Stále nemůžu ten handler přimět k jinému způsobu řazení :|