Problém formuláře s více komponentami na stránce
- mach2roman
- Člen | 22
Prosím o radu jak zjistit, kde je problém. Mám v presenteru vytvořeny 2 komponenty
<?php
protected function createComponentDenikDispeceraNaplanovano($name)
{
$report = new ReportViewer();
return $report;
}
protected function createComponentDenikDispeceraSparovano($name)
{
$report = new ReportViewer();
return $report;
}
?>
Komponenta ReportViewer má v sobě tvárničku na formulář s filtrem s tímto kodem
<?php
protected function createComponentReportFilter($name)
{
$form = new AppForm($this, $name);
foreach ($this->columns as $column){
$form->addText($column->getColumnNumber(), $column->getColumnName(), 30, 30);
}
$form->addSubmit('filter', 'Filtruj');
$form->onSubmit[] = array($this, 'okClickedFiltruj');
return $form;
}
?>
Pokud zobrazím na stránce pouze jednu komponentu (buď {control denikDispeceraNaplanovano} nebo {control denikDispeceraSparovano}, tak vše funguje jak má. Pokud všem zobrazím na jedné stránce obě komponenty, pak při odeslání formu komponenty se nevrátí žádná data. Zkusil jsem v metodě kClickedFiltruj hned na začátku vypsat přes $this->presenter->request->getPost() co je v POSTu a zjistil jsem, že pokud je zobrazena jen jedna komponenta tak jsou v POSTu všechna furmulářová pole správně, ale pokud jsou zobrazeny obě komponenty, tak je tam jen tlačítko filter.
Používám Nette 0.9.6 .
- frosty22
- Člen | 373
Jen tak zkusím odhadnout, zdali náhodou se nevytváří oba formuláře se stejnými názvy, resp. zdali nemají stejný signál – <form action=„../?do=tohle-by-melo-byt-unikatni“> což by mohlo být způsobeno tím ,že se oba formuláře jmenují „reportFilter“, ikdyž teoreticky by v názvu měl být i název komponenty nadtím, čili: „denikDispeceraSparovano-reportFilter“ a „denikDispeceraNaplanovano-reportFilter“ což je ok, ale pokud tomu tak není, tak zkus předat vlastní název třeba:
$form = new AppForm($this, $name.__CLASS__);
Ale jenom taková zkouška, co mě napadla
- bojovyletoun
- Člen | 667
název formu by na to nenměl mít vliv. Můj příklad:
Formuláře mají správný action ?do=ab-sub-submit
správné ID
id="frm-ab-sub
, akorát id prvků není rozlišeno
frmsub-se
. Zajímalo by mě proč to nejdem zkus poslat
zdroják.
Zde je muj
šablona
{block content}
<a n:href="this">home</a>
{control a}
{ifset $control[ab]}{control ab}{/ifset}
<hr>
{snippet dumps}
{!$u}
{=rand()}
{/snippet}
code php
<?php
class TPPresenter extends \Nette\Application\UI\Presenter
{
protected function startup()
{
parent::startup();
new Cp($this, 'a'); //first comp;
$this['ab'] = new Cp; //second;
}
}
class Cp extends \Nette\Application\UI\Control
{
function createComponentSub($n)
{
$f = new \Nette\Application\UI\Form;
$f->elementPrototype->class('ajax');
$w = &$f->renderer->wrappers;
$w['pair']['container'] = null; //just styling
$f->addSelect('select', "sel")->setItems(array("a" => "Aa", "b" => "bá"));
$f->addSubmit('su1');
$p = $this->getPresenter();
$f->onSuccess[] = function(\Nette\Application\UI\Form $f) use ($p) {
$p->invalidateControl();
ob_start();
dump($p->request->post);
dump($p->request->params);
$p->template->u = ob_get_clean();
};
return $f;
}
function render()
{
echo $this['sub'];
}
}