Jak pouzit setDefaults u selectu

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

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
+
0
-
<?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
+
0
-

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)

despiq
Člen | 320
+
0
-

pokud nekdo nekde napsal ze na select nejde pouzit setDefaults tak kecal

ten muj priklad o post vys by mel fungovat tak nevim co dal bych k tomu napsal

llsm
Člen | 121
+
0
-

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 | 116
+
0
-

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' ) );
?>