Ajax a snippet refresh tabulky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Ahoj snažím se o jednoduchou filtraci tabulky formou onkeyup kdy při uderu klavesnice se zacně live filtrovat tabulka se zaznamy.Problém: fungue onkeyup ale pouze znovu načte tabulku a to nad tu puvodni se zaznamy ktere tam jsou.

tedy mám takto formulař:

<?php
public function createComponentFilterForm()
		{
				$filterForm = new AppForm();
				$filterForm->getElementPrototype()->class('ajax');
				$filterForm->addText('hledej', 'Hledej')->getControlPrototype()->onkeyup("$(this).ajaxSubmit();");
				$filterForm->onSubmit[] = callback($this, 'processFilterForm');

				return $filterForm;
		}
		public function processFilterForm($form){

			$values = $form->values;
			$this->invalidateControl('tabu');
			$this->template->items = dibi::query("SELECT * FROM mylogin WHERE ID LIKE '%".$values['hledej']."%'");

		}
?>

A takto to mám v sabloně.

<?php
{snippet tabu}

        {foreach $items as $item}
    		<tr {!$iterator->isEven() ? 'class="even"' : 'class="odd"'}" onclick="Link({link this , id=>$item->id,'vp-page' => $curentPage,'order'=>$order});">
            	<td width="32">{$item->id}</td>
                <td  width="10" class="center">{!$item->stat=="1" ? "<img src=\"$basePath/images/stat1.png\"/>" : "<img src=\"$basePath/images/stat0.png\"/>"}</td>
                <td>{$item->jmeno}</td>
                <td>{$item->prava=="2" ? "Administrator" : "Uživatel"}</td>
            </tr>
    	{/foreach}
        {/snippet}
?>

javaskript:

<script>
$("input[name=hledej]").live("keyup", function(){
    $(this).closest('form').submit();
});
</script>

nevím kde hledat chybku…

bojovyletoun
Člen | 667
+
0
-
  1. sql injection

správně …LIKE %s', ‚%‘.$value.‚%‘);

  1. hloupá otázka, ale máš nette.js?

3)jak to funguje na začátku, kde načteš stránku a form je prázdnáý?

KillPrd
Začátečník | 110
+
0
-
  1. děkuji
  2. mám
<?php
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
<script type="text/javascript" src="{$basePath}/js/ajax.js"></script>
?>
  1. načtu stránku a form je prázdný datagird je již naplněný.
KillPrd
Začátečník | 110
+
0
-

Chyba budeasi v tom že nemohu nebo mi nevrací $items ze zpracování formuláře. Tedy otázka jak to udělat aby to z části processFilterForm načetlo do snippetu. Nebo je možnost to udělat bez formuláře?

KillPrd
Začátečník | 110
+
0
-

Tak jsem pokročil a udělal jsem to same bez formuláře. Jeden problém stále přetrvává a to že mi to nevrací hodnoty.
tedy udělal jsem nový script

<script>
$("#frmfilterForm-hledej").live('keyup', function(e){
    $.get("do=test", {"value": $(this).val()});
});
</script>

pomocí něho volám onkeyup handleTest a v něm mám toto

<?php

public function handleTest($co)
{
	$this->template->items = dibi::query("SELECT [*] FROM mylogin WHERE 1");
	$this->invalidateControl('tabu');
	}
?>

Stále by jste nikdo nevěděl?

KillPrd
Začátečník | 110
+
0
-

Další věc je že pokod nevracím array pole typu:
$this->template->items = dibi::query(„SELECT [*] FROM mylogin WHERE 1“);

ale jen samostatnou zprávu tak a mimo tabulku do jineho snippetu tak to funguje.
problém nastane v případě že to chci nacpat do místa kde jsou již načtená data. a do tabulky jako takové.
takže se zdá že budu mnuset načítat celou šablonu s kusem kodu kde budou již načtená data. bohužel nevím jak načíst celou sablonu ale kdyby jste měl někdo řešení sem s ním…

KillPrd
Začátečník | 110
+
0
-

Tak ted se snažím načíst sablonu do daneho snippetu a ani to mi nejde.

<?php
$template = new Template;
$this->template->items = dibi::query("SELECT [id],[jmeno],[prava],[stat] FROM [mylogin] WHERE 1 ORDER BY ID");
 if ($this->isAjax())
$this->template->setFile('tabulkaUsers.phtml');
$this->invalidateControl('sniptab');


?>

a sablona

<?php
{if isset($items)}
        {foreach $items as $item}
    		<tr {!$iterator->isEven() ? 'class="even"' : 'class="odd"'}" onclick="Link({link this , id=>$item->id,'vp-page' => $curentPage,'order'=>$order});">
            	<td width="32">{$item->id}</td>
                <td  width="10" class="center">{!$item->stat=="1" ? "<img src=\"$basePath/images/stat1.png\"/>" : "<img src=\"$basePath/images/stat0.png\"/>"}</td>
                <td>{$item->jmeno}</td>
                <td>{$item->prava=="2" ? "Administrator" : "Uživatel"}</td>
            </tr>
    	{/foreach}
        {/if}
?>

jak zjisti zda se sablona nacte dkyž jí nevidím zda jí nejde.
Nemusím udělat nejaké routy?
Dále nemusím pridat snippety jeste do externí sablony?

KillPrd
Začátečník | 110
+
0
-

Tak jsem pokročil již uspěšně načtu data do externi sablony ale stále se mi nedaří načíst ji do snippetu

<?php
public function handleTest()
		{

			if ($this->isAjax())
        	 $template = $this->template;
             $template->setFile(APP_DIR . '/templates/tabulkaUsers.phtml');
			 $this->template->items = dibi::query("SELECT [id],[jmeno],[prava],[stat] FROM [mylogin] WHERE 1");
			 $template->render();

			 $this->invalidateControl('sniptab');

		}
?>
KillPrd
Začátečník | 110
+
0
-

Ta ksje msvuj problem našel v sekci BUG tedy musím počkat na řešení.