Podivné chování s výpisem dat s využitím AJAXu

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

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
+
0
-

Manny7 napsal(a):

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

Nemas snippet uvnitr tabulky? <table> by mel byt uvnitr snippetu.

Manny7
Člen | 67
+
0
-

Ano, tak ten problém, že se mi data vypsala jakoby 2× byl způsoben tím, co poradil Ondrej, díky ;)

Pomocí logu sql jsem teďka zjistil, že ten handler se vůbec nevykoná… ten dotaz na ASC vůbec nedojde

Editoval Manny7 (29. 8. 2010 14:54)

Ondrej
Člen | 110
+
0
-

Manny7 napsal(a):

Pomocí logu sql jsem teďka zjistil, že ten handler se vůbec nevykoná… ten dotaz na ASC vůbec nedojde

vykonat by se mel, ale do sablony se stejne pouzije ten posledni SQL dotaz z renderDefault()

Manny7
Člen | 67
+
0
-

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…

hmm… a jak by se to teda dalo obejít, resp. jak by šlo udělat to sortrování tedy?

Ondrej
Člen | 110
+
0
-

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
+
0
-

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í :|

Ondrej
Člen | 110
+
0
-

a co tak pracovat s $this->scCol ;)

Manny7
Člen | 67
+
0
-

Ondrej ohh, no jasně… díky! :)

Manny7
Člen | 67
+
0
-

Ještě mě napadla jedna otázka – v templatu mám pomocnou proměnno $i – kdekoli, kde se vyskytuje v kódu, tak se vlastně vypíše (takže se vypíše třeba i tohle: {$i=0} jako 0). Dají se podobné pomocné proměnné zneaktivnit/zneviditelnit na výstupu nějak?

Panda
Člen | 569
+
0
-

{$ ...} je makro pro vypsání. Pokud chceš do proměnné přiřadit hodnotu, použij {assign i => 0}.

22
Člen | 1478
+
0
-

btw proč nepoužiješ proměnou $iterator->isOdd() např.?

Manny7
Člen | 67
+
0
-

22 protože jsem nevěděl, že něco takového je. A pěkně to ulehčuje práci a zpřehledňuje kód :)
Přidávám link, mohl by se hodit dalším