Hromadná editace zázanmů – addCheckbox

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

Zdravím,
řeším teď malý problém. Vypisuji z databáze data a u každého z nich potřebuji mít Checkbox kvůli hromadné editaci záznamů.

Potřebuji, abych při zaškrtnutí polí měl k dispozici jednotlivá ID řádků. Bohužel se mi toho nedaří nijak dopracovat.

Zkoušel jsem vytvořit componentu pomocí cyklu

while($this->model->selectAll())
{
	$form->addCheckbox('ids['.$this->model->selectAll('id').']')
}
return $form

a v šabloně pak vykreslovat pomocí

<td n:foreach="$items as $item">{input ids[{$item['id']}]}</td>

Ale toto řešení nefunguje.
Zkoušel jsem dokumentaci, ale nic podobného tam není.

Mohl by někdo poradit co s tím?

Předem díky

David Ďurika
Člen | 328
+
0
-

skus to takto

VaKvas
Začátečník | 111
+
0
-

a co :

$form->addCheckbox('ids['.$this->model->selectAll('id').']')
	->setValue($this->model->selectAll('id'));

a budes mit
ids[155] s value 155 …

ovsem otazka, co ti vraci selectAll(‚id‘) ;)

Editoval VaKvas (4. 9. 2011 21:17)

Budry
Člen | 88
+
0
-

achtan:
Díky, kouknu na to

VaKvas:
vrátí to chybu
Component name must be non-empty alphanumeric string, ‚ids[2]‘ given.

Funkce selectAll() vrací přesně co chyci

VaKvas
Začátečník | 111
+
0
-

tak to zkus nechat prazdny :

$form->addCheckbox('ids[]')
        ->setValue($this->model->selectAll('id'));

value by melo jit takto nastavit… pole IDcek ti takto taky staci..

Filip Procházka
Moderator | 4668
+
0
-

@**VaKvas**: Kdyby jsi si přeložil tu chybu, došlo by ti, že formuláře nedovolují mít v názvu prvku znaky []. Na takové operace jsou Containery.

A jak už kolega zmiňoval, pokud to chceš krapet chytřejší, použiješ můj addDynamic, na který odkazoval.

VaKvas
Začátečník | 111
+
0
-

HosipLan napsal(a):

@**VaKvas**: Kdyby jsi si přeložil tu chybu, došlo by ti, že formuláře nedovolují mít v názvu prvku znaky []. Na takové operace jsou Containery.

Aha, toto jsem jeste v Nette nepotreboval…
tedy by to slo poresit asi takto ne?

$c = $form->addContainer('ids');
$c->addCheckbox($this->model->selectAll('id'));

Editoval VaKvas (5. 9. 2011 11:05)

Budry
Člen | 88
+
0
-

Díky, pomohlo.

A jak už kolega zmiňoval, pokud to chceš krapet chytřejší, použiješ můj addDynamic, na který odkazoval.

Podívám se na to, vypadá to zajímavě

Ještě v návaznosti na toto téma, spíše zápis a zpracování toho php
Není použití dvojitého foreach blbost?

foreach($value as $ids)
{
  foreach($ids as $id => $val)
  {
      if($val === true)
      {
         dump($id);

      }
   }
}
Filip Procházka
Moderator | 4668
+
0
-

Já žádný dvojitý foreach nepsal, jak jsi na to přišel?

foreach ($form['ids']->values as $id => $values) {
	dump($id, $values);
}
Budry
Člen | 88
+
0
-

Pardon, moje chyba… Byla blbost…

Formulář už to vytvoří, ale mám problém s tím pokud ho chci vykreslit sám do šablony

{form vyberSlovickaForm}
        <table n:if="$slovicka">
            <tr n:foreach="$slovicka as $slovicko">
                <td>{input ids[$slovicko['id']}</td>
                <td>{$slovicko['slovickoCZ']}</td>
                <td>{$slovicko['slovickoEN']}</td>
            </tr>
        </table>
    {/form}

Nemůže fungovat, a nejde ani pokud vypíši jenom jedno pole…

{input ids[1]}

Omlouvám, se ale furt se mi nedaří přijít na to co s tím …

22
Člen | 1478
+
0
-

kdyby sis prošel odkaz od achtana, ušetřil by jsi polovinu dotazů na co se tu ptáš..

Editoval 22 (5. 9. 2011 15:21)