předání proměnné do komponenty
- simPod
- Člen | 383
zdravim.
Volam v Template komponentu pomoci:
{control editItem}
Zaroven mam v Template promennou $id
A potreboval bych nejakym zpusobem predat tu promennou $id
do
me komponenty, aby komponenta mohla pri renderovani zohlednit $id
(v setValue()
).
Ve vysledku bych poteboval, aby v komponente formulare bylo predepsane id polozky, ktere jsem si uz predtim vytahl z daabaze.
<?php
function createComponentEditItem()
{
$form = new Nette\Application\UI\Form;
$form->addText('name', 'Název:')
->setRequired()
->setValue($id);
$form->addSubmit('send', 'Edit');
$form->onSuccess[] = callback($this, 'editItemSubmitted');
return $form;
}
?>
doufam ze je to trochu srozumitelne. Dik
- mkoubik
- Člen | 728
Zaprvé nepoužívej setValue()
pokud nevíš proč to děláš.
K nastavení výchozí hodnoty slouží
$control->setDefaultValue()
nebo
$form->setDefaults()
.
K dotazu – hodnoty se dají do komponenty předat v action, nebo render
metodě pomocí $this['nazevKomponenty']->setValue($value)
,
pokud má komponenta příslušnou metodu. U tvého formuláře např.
$this['editItem']['name']->setDefaultId($text)
.
Pokud máš $id
dostupné v šabloně, předpokládám, že je
dostupné i v render metodě. Jinak to zavání programováním
v šabloně.
Editoval mkoubik (5. 10. 2011 0:08)
- Patrik Votoček
- Člen | 2221
běžně se to dělá v akci presenteru tj:
class FooPresenter extends BasePresenter
{
public function createComponentEditItem()
{
$form = new Nette\Application\UI\Form;
$form->addText('name', 'Název:')->setRequired();
$form->addSubmit('send', 'Edit');
$form->onSuccess[] = callback($this, 'editItemSubmitted');
return $form;
}
public function actionEdit($id)
{
$this['editItem-name']->setDefaultValue($id);
}
}
- Filip Procházka
- Moderator | 4668
Zkus
public function actionEdit($id)
{
$this['editItem']->setDefaults(array(
"test"=>"test"
));
}
- Patrik Votoček
- Člen | 2221
pokud to chceš nastavovat pro všechny prvky formuláře musíš použít
$this['editItem']
(místo $this['editItem-name']
který vybere pouze prvek „name“) :-)
- simPod
- Člen | 383
ja se nevyjadril spravne, omlouvam se, nevim proc jsem to zapomnel :/
mam formularovy prvek Select (addSelect()) a v metode renderXXX nebo actionXXX do nej chci poslat array
zkousel jsem
$this['myComponent']['selectfield']->setDefaultValues(array("test"=>"test"));
to ale pravdepodobne nefunguje… prosim o radu, dekuji
- Filip Procházka
- Moderator | 4668
Nejspíše chceš
$this['myComponent']['selectfield']->setItems(array("test" => "test"));
Ale to by jsi měl načítat a plnit v továrničce
$form->addSelect('selectfield', "Popisek", array("test" => "test"))
- simPod
- Člen | 383
setItems()! to je ono, dekuji.
Mno a jeste jedna vec
v modelu mam metodu na ziskani dat z databaze z tabulky
<?php
function getAll()
{
return $this->connection->table('items');
}
?>
V prezenteru ji zavolam a dostanu zpatky 3 sloupce (id
,
nazev
, druhe_id
) v objektu. A ted potrebuji nastavit
do Selectu pole (pomoci setItems() metody)ve tvaru
array(id=>nazev,id=>nazev...)
. Tzn. aby v Selectu v Option
byly zobrazena data z tabulkoveho sloupce nazev
a hodnota byla ze
sloupce id
. Sloupec druhe_id
by se vynechal. Je na to
nejaka Nette vzchztavka, nebo musim rucne objekt preformatovat do pole?
Dekuji
Editoval simPod (6. 10. 2011 21:47)
- Filip Procházka
- Moderator | 4668
Dibi na to má vychytávku, vypadala by takto:
function getPairs()
{
return $this->db->select('id,nazev')->from('table')->fetchPairs();
}
Nette\Database
na to asi vychytávku nemá, nebo ano?
Takže ručně.
$pairs = array();
foreach ($this->model->getAll() as $row) {
$pairs[$row->id] = $row->nazev;
}
$form->addSelect('selectfield', "Popisek", $pairs);