checkbox výber více ID, array
- Tymikes
- Člen | 63
Zdravim,
snažím se vytvořit checkbox, který by sbíral do array idčka.
v latte vykresluji přes foreach:
<input type=checkbox name=sel[] value={$ukol->id_ukolu}>
V presenteru:
public function handleTest() {
$values = $form->getHttpData($form::DATA_TEXT, 'sel[]');
dump($values);
exit;
}
ale nemám vytvořený form a pro tento případ ani nechci, jak se dostanu k samotného checkboxu, zkoušel jsem proměnou, ale potom už mi nic nesbírá.
- Tymikes
- Člen | 63
Moc nevím, jak na to.
v latte mám
{form formular}
<input type=Checkbox name=sel[] value={$ukol->id_ukolu}>
{/form}
v presenteru mám
protected function createComponentFormular()
{
$form = new Form;
return $form;
}
public function handleTest($form) {
$values = $this->template->$form->getHttpData($form::DATA_TEXT, 'sel[]');
dump($values);
exit;
}
a je jedno co označím, chybu vyhazuje:
The variable ‚241‘ does not exist in template.
(241 je ID posledního přidaného řádku)
- Tymikes
- Člen | 63
Tak takto to vypadá po úpravě.
{form formular}
<input type=Checkbox n:name="sel:$ukol->id_ukolu" value={$ukol->id_ukolu}>
{/form}
protected function createComponentFormular()
{
$form = new Form;
$form->addCheckbox('sel', "");
return $form;
}
public function handleTest($form) {
$values = $form['sel']->getValue();
dump($values);
exit;
}
Takto po úprave a vyhazuje mi chybu:
Illegal string offset ‚sel‘
Editoval Tymikes (29. 2. 2016 20:32)
- Tymikes
- Člen | 63
Jsem to tam dával z důvodu, že potřebuju s nima potom pracovat (např. kliknout na odkaz a vybrané smazat, proto ten handle) a nevím, jak to teď udělat když už idčka nejspíš nasbíraná mám, ale mám je až po odeslaní formuláře (takže potřebuju ještě udělat odeslání formuláře/submit tlačítko – ale zase musí být mimo form)
//Tak nakonec mi to hází prázdný Array. Možná bude problém že ve funkci Form $form – není v té funkci definovaný nebo nevim.
protected function createComponentFormular()
{
$form = new Form;
$form->addCheckboxList('sel');
$form->addSubmit('odeslat');
$form->onSuccess[] = function (Form $form, array $values) {
$ids = $values['sel'];
dump($ids);
exit;
};
return $form;
}
{form formular}
<input type=Checkbox n:name="sel:$ukol->id_ukolu" value={$ukol->id_ukolu}>
{/form}
{form formular}
<input type="submit" name="odeslat" value="Dump test"/>
{/form}
Editoval Tymikes (29. 2. 2016 22:05)
- Tymikes
- Člen | 63
Když to zkusím např. takto
protected function createComponentFormular()
{
$form = new Form;
$form->addCheckboxList('sel');
$form->addSubmit('odeslat');
$form->onSuccess[] = array($this, 'registrationFormSucceeded');
return $form;
}
public function registrationFormSucceeded($form)
{
$values = $form->getHttpData($form::DATA_TEXT, 'sel');
dump($values);
exit;
}
Tak to vrací zase furt NULL
- premek_k
- Člen | 172
No a co takhle nepoužít form, ale v javascriptu si zjistit všechny zatržené checkboxy, následně je ajaxem poslat na server
//ajaxovy pozadavek
var x = $.nette.ajax({
url: ajaxLink,
data: {
boxes: checkedBoxes
}
});
a na serveru zpracovat v handle? @Tymikes, nebyl to i tvůj
původní záměr?
Pokud ale děláš něco jako datagrid, raději použij některé hotové řešení, jinak se
s tím udrbeš…
Editoval premek_k (1. 3. 2016 10:19)
- Tymikes
- Člen | 63
Toto záměrem je, jen jsem si myslel, že to půjde tímto způsobem. Jestli bych pak byl schopný s vybranými(zaškrtnutými) řádky pracovat bylo by to ok, ale ještě jsem s ajaxem nedělal.
Můžu se kouknout na ten datagrid, ale nevím kam soubory nakopírovat (composer nepoužívám). do \vendor ?
- Tymikes
- Člen | 63
Tak jsem nainstaloval composer a pomocí něho Grido, chtěl bych to otestovat, ale nevím jak zobrazit ten grid v latte, mám tam tu základní továrničku
protected function createComponentGrid($name)
{
$grid = new Grido\Grid($this, $name);
$grid->setModel(array(
array('name' => 'Lucie', 'gender' => 'female'),
array('name' => 'Petra', 'gender' => 'female'),
array('name' => 'Lenka', 'gender' => 'female'),
));
return $grid;
}
a jak nyní v latte tento grid zobrazim? zkusil jsem
{control grid}
a mám chybu
Class ‚App\Presenters\Grido\Grid‘ not found
Pokud mám vytvořit ještě nějakou třídu, jak bude vypadat presenter
a latte?
- Mysteria
- Člen | 797
Jako obvykle problém se jmennými prostory.
$grid = new \Grido\Grid($this, $name);
- jiri.pudil
- Nette Blogger | 1032
Třída je v onom balíčku nainstalovaném pomocí Composeru. Jen se o ní
ještě musí nějak dozvědět autoloader. Toho docílíš nejsnáz tak, že v bootstrapu
načteš soubor vendor/autoload.php
, který Composer generuje
z metadat jednotlivých balíčků.