více stejných komponent s různým id
- jeremy13
- Člen | 18
Potřebuji několik stejných formulářů na jedné stránce, ovšem s rozdílnou skrytou položkou id. Vytvořil jsem si tedy komponentu:
<?php
class Rate extends Control {
private $id_t;
protected function createComponentRateForm() {
$form = new MyForm;
$form->getElementPrototype()->class('ajax');
$stars = array(
'20' => '1',
'40' => '2',
'60' => '3',
'80' => '4',
'100' => '5',
);
$form->addRadioList('star', 'Hodnocení', $stars)
->getControlPrototype()->setClass('');
$form->addHidden('b_id')->setDefaultValue($this->id_t);
$form->addSubmit('save', 'Ohodnotit');
$form->onSubmit[] = callback($this, 'processRatingForm');
return $form;
}
public function processRatingForm(Form $form) {
$values = $form->getValues();
$this->flashMessage($values['star']);
if($values['star']=='')$values['star']=0;
$this->reputationModel->userRating($values['b_id'], $values['star']);
if (!$this->isAjax())
$this->redirect('this');
else {
$this->invalidateControl('hodnoceni');
}
}
public function render($id_t) {
$this->id_t = $id_t;
echo $this['rateForm'];
}
}
?>
V prezenteru pak mam:
<?php
public function createComponentRate(){
$rate = new Rate;
return $rate;
}
?>
V šabloně pak mám v cyklu:
{control rate $r->b_id}
U všech mi to ovšem vloží stejné id, konkrétně první položky. Kdysi jsem podobnou věc vyřešil, že id bylo součástí názvu komponenty, jejíž název jsem pak parsoval, ovšem takhle by to bylo asi o dost pěknější, jenže bohužel nefunkční :) Jakoukoliv radu, případně i jiný způsob, jak by se to dalo dělat, uvítám :)
- srigi
- Nette Blogger | 558
Dovodom preco sa to nenastavi je zivotny cyklus. V render fazi (ked sa lazy
sposobom vytvori komponenta a zaroven Form) je uz neskoro na nastavenie
setDefaultValue($this->id_t)
. Budes sa asi musiet vzdat lazy
sposobu natahovania componenty Rate
a zapisat to explicitne
v Presenteri do nejakej jej property.
Zaroven vsak potom mozes zjednodusit kod a zjednodusit volanie
Presenter => Rate => RateForm
na
Presenter => RateForm
.
BTW precitaj si toto vlakno
Editoval srigi (22. 1. 2011 21:33)