jak dostat SQL data do compomenty i šablony
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- MzK
- Člen | 127
Snaha je taková.. Potřebuji dostat informace o zboží do šablony + to samé zboží i do komponenty formuláře. A nechci provádět ten samý dotaz 2×.
<?php
// pokud je $id tak se edituje, pokud ID není, tak přidávám nové zboží
public function renderGood($id = null) {
if ($id != null) {
$this->good = dibi::fetch("SELECT * FROM goods WHERE id = %i", $id);
}
$this->template->good = $this->good; //vyuziva defaulni hodnoty
}
//tovarnicka pro pridani / editovani zbozi
protected function createComponentGood() {
$form = new AppForm();
$id = $this->getParam('id');
if (!empty($id)) { // id neni prazdne
$values = $this->good; //vyuzije naplneni dat v renderGood
}
$form->setValues($values);
}
?>
Bohužel toto řešení mi funguje pouze při vykreslení formuláře.. Při odeslání formuláře nastane chyba, protože renderCosi ještě neproběhlo. A zrovna mne nenapadá elegantní řešení. Ano, mohu ten SQL dotaz zavolat 2×, ale myslel jsem, jestli to neřešíte jinak.
Editoval zacatecnik (26. 7. 2011 22:08)
- newPOPE
- Člen | 648
@majkl mal na mysli ze namiesto
<?php
renderGood(...);
//napises
actionGood(...);
?>
action sa spracovava skor, cize data by uz v template
mali byt.
a pokial su to tie iste data tak by som to asi napisal takto
<?php
public function actionGood($id) {
...
$this->template->good = dibi::fetch(...);
}
public function createComponentGoodForm() {
...
$form->setValues($this->template->good);
...
}
?>
pride mi to ako menej kodu