Formular se neodesle (removeComponent)
- libik
- Člen | 100
Zdravim,
Mam formular, ktery vklada polozky do stromove struktury.
Polozka muze byt bud typu node nebo odkaz. Dle zvoleneho typu se dynamicky zobrazi nekolik souvisejicich prvku. Mam ale problem s jednim prvkem, ktery mi zpusobuje to, ze se formular neodesle.
$form->addRadioList('item_type', 'Typ položky', array('node' => 'Sekce', 'link' => 'Odkaz'))->setDefaultValue('node')->setOption('description', 'Odkaz bude zobrazen v menu.')
->addCondition(Form::EQUAL, 'node')
->toggle('frm-menuForm-in_menu-pair')
->elseCondition(Form::EQUAL, 'link')
->toggle('frm-menuForm-link-pair')
->toggle('frm-menuForm-link_target-pair')
->toggle('frm-menuForm-link_type-pair')
->endCondition();
Zde bych teoreticky mohl mit jeste ->toggle(‚frm-menuForm-link_color-pair‘), ale zobrazeni tohoto prvku zavisi jeste na dalsi hodnote jineho prvku.
Formular zobrazuju v modal okne pomoci handleAddForm($nodeId) z vice
mist – bud obecneho nebo v nejakem miste ve stromu – znam parent –
tedy $nodeId.
Pokud $nodeId nemam, zobrazim ve formulari take selectbox, aby uzivatel umisteni
vybral.
if (empty($id) AND empty($nodeId))
{
$form->addSelect('parent', 'Umístění', $menuIt, 10)->setOption('description', Html::el()->setHtml('Vyberte nadřazenou sekci <strong>pod kterou</strong> bude položka vložena.'))->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'node')->toggle('frm-menuForm-subweb-pair');
if ($this->lang == 'cs')
{
$form['parent']->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'node')->toggle('frm-menuForm-show_events-pair');
$form['parent']->addCondition(Form::IS_IN, array(1, 2))->addConditionOn($form['item_type'], Form::EQUAL, 'link')->toggle('frm-menuForm-link_color-pair');
}
$form['parent']->getLabelPrototype()->class('required');
$form['parent']->setAttribute('class', 'span5');
}
else
{
$form->addHidden('parent');
}
Prvek link_color (selectbox) se ma zobrazit jen v pripade, ze $nodeId <= 2 a take pokud je tedy splnena podminka ze vkladana polozka je typu link.
handleAddForm:
public function handleAddForm($nodeId = '')
{
if ($this->isAjax())
{
$subtitle = '';
if (is_numeric($nodeId))
{
$section = $this->template->section = $this->menu->find($nodeId);
$subtitle = ' pod ' . $section->name;
$this['menuForm']['parent']->setDefaultValue($section->id);
if($nodeId > 2)
$this['menuForm']->removeComponent($this['menuForm']->getComponent('link_color'));
....
}
$tpl = $this->template->setFile(__DIR__ . '/../templates/Menu/form.latte');
$this->template->title = 'Vložit sekci' . $subtitle;
$this->payload->tpl = (string) $tpl;
$this->payload->modal = true;
$this->redrawControl();
}
A pokud to takto pustim (tlacitkem v nejake sekci, takze $nodeId znam), validace probehne, ale uz ne processMenuForm. Jakmile podminku s $nodeId > 2 a removeComponen zakomentuji, formular se zpracuje – ale prvek link_color vidim, i kdyz bych nemel (dle podminky).
Nevim, zda jsem to popsal srozumitelne, pripadne doplni. Zatim netusim, proc se formular nezpracuje (nevrati payload ale celou stranku a vizualne se nic nezmeni, modal zustane otevreny).
Diky.
Editoval libik (8. 1. 2015 14:06)