Jak pouzit setDefaults u selectu
- llsm
- Člen | 121
Zdravim,
zeptam se co nejjednoduseji, lze aplikovat setDefaults na select?
<?php
function createComponentSelect () {
$form = new AppForm;
$form->addSelect('sel', 'sel', $poleMoznosti,'10');
return $form;
}
public function renderEdit ($id = 0) {
$form = $this['todoForm'];
if (!$form->isSubmitted()) {
$row = $this->model->findTest($id);
$form->setDefaults($row);
}
}
?>
Vim, ze takhle to nefunguje. Potreboval bych nejak zajistit, aby se vychozi hodnota vytvorila az ve funkci renderEdit, tedy nelze pouzit addSelect()->setDefaultValue(). Dekuji za pomoc.
- despiq
- Člen | 320
<?php
function createComponentSelectForm($name) {
$form = new AppForm($this, $name);
$poleMoznosti = array(1 => 1, 2 => 2);
$form->addSelect('sel', 'sel', $poleMoznosti,'10');
$form->addSubmit('set','Set')->onClick[] = array($this,'selectFormSubmitted')
return $form;
}
public function renderEdit($id = 0) {
$row = $this->model->findTest($id);
$this['selectForm']->setDefaults($row);
}
?>
Editoval despiq (31. 7. 2010 18:26)
- llsm
- Člen | 121
Ahoj,
ja jsem ten kod jen tak nastrelil, abych popsal problem. Pro predstavu ted mam
formular, kde je nekolik textovych poli a jeden select, do textovych se
defaultni hodnoty vypisou, ale select zustane serazeny tak jak jsem mu tam
nahral pole s hodnotami. Co jsem tak prochazel forum, tak jsem z toho nabyl
pocitu, ze select funguje trochu jinak co se tyce vyberu defaultni hodnoty a
setDefaults se na nej neda aplikovat. Proto se zajimam, jeslti existuji i jine
zpusoby.
Diskutuje se na toto tema tady ve vlaknu.
A ja bych potreboval najit zpusob, jak zajistit, abych do toho selectu nalil
hodnoty az v te funkci renderXXX. Jestli je to vubec mozne. Pro uplnost
prikladam, jak ted vypada fce renderXXX.
<?php
public function renderEdit($formID, $table, $lineID) {
$form = $this['editLine'];
$this->createForm($formID, $form);
if (!$form->isSubmitted()) {
$row = $this->model->findValue($table, $lineID);
if (!$row) {
throw new BadRequestException('Record not found');
}
$form->setDefaults($row);
}
}
?>
Dekuji za odpovedi
Editoval llsm (31. 7. 2010 10:20)
- llsm
- Člen | 121
Tvuj priklad by jiste fungoval, ale duvodem by bylo to, ze za ciselne indexy
pole dosazujes cisla = kdyby select mel v moznostech stringy (tipuji ze
nejcastejsi moznost) a $row bral z db kde jsou take stringy, tak je neumi
porovnat a nastavit nejaky jako default, ale zaroven nevrati zadnou chybu. Jako
setDefaults pro select musis mit cislo, ktery ti rekne kolikatou polozku v poli
moznosti ma vybrat a doplnit. A v tom tkvel muj problem, databaze vracela
string s hodnotou. Budu si muset rozmyslet, jestli kvuli tomu nezmenit model
v databazi.
Kazdopadne ti dekuji za tvou ucast, moc si ji vazim
- LuKo
- Člen | 113
Nejspíš potřebuješ něco takového:
<?php
// nyní (asi) máš:
$items = array( 'red', 'blue' );
// -> generuje <option value="0">red</option><option value="1">blue</option>
// potřebuješ:
$items = array( 'red' => 'red', 'blue' => 'blue' );
// -> generuje <option value="red">red</option><option value="blue">blue</option>
// např. v dibi vyřešíš:
$items = dibi::query( 'SELECT [color] FROM [color_table]' )->fetchPairs( 'color', 'color' );
$form = new AppForm();
$form->select( 'sel', 'sel', $items );
$form->setDefaults( array( 'sel' => 'blue' ) );
?>