Ajax v beforeRendery na zmenu casti obrazovky
- oneRow
- Člen | 10
Ahojte,
chcel by som vytvorit v BasePresentery v beforeRendery kus kodu na zmenu casti obrazovky.
V sablone mam:
{snippet}
{foreach $scc as $sc}
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
{/foreach}
Text
{/snippet}
V skratke by sa po kliknut na prvy link by sa mal na obrazovke zobrazit nejaky text (Text 1) a po kliknuti na druhy link zasee nejaky iny text (Text 2).
V basepresentery v beforeRender metode mam:
if (!$this->presenter->isAjax()) {
\Tracy\Debugger::barDump("nie je ajax");
//$this->redirect('this');
} else {
$textID; //potrebujem dostat z toho linku
$this->text = $this->change_text_model->getTextForID($textID); //tento text tam potrebujem zobrazit
}
No, dostavam sa iba do prvej vetvy (takze ajax nepozna!). Nette ajax mam pritom includnuty a aj v konzole vidim, ze ajaxovo prebieha poziadavka GET.
- cendak
- Člen | 21
Problém bude patrně v tom, že nemáš pojmenovaný snippet v šabloně a že ho pak v presenteru neinvaliduješ. Mrkni sem.
{snippet header}
{foreach $scc as $sc}
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
{/foreach}
Text
{/snippet}
if ( $this->isAjax() ) {
$this->redrawControl("header");
} else {
$this->redirect("this");
}
Editoval cendak (25. 4. 2016 10:29)
- CZechBoY
- Člen | 3608
Musíš do latte dát snippet s textem
{foreach $scc as $sc}
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
{/foreach}
{snippet text}
Text
{/snippet}
a pak v tom presenteru
public function handleChangeScreen($id)
{
if (!$this->presenter->isAjax()) {
\Tracy\Debugger::barDump("nie je ajax");
//$this->redirect('this');
} else {
$textID = $id; //potrebujem dostat z toho linku
$this->template->text = $this->change_text_model->getTextForID($textID); //tento text tam potrebujem zobrazit
$this->redrawControl('text');
}
}
Editoval CZechBoY (25. 4. 2016 10:31)
- oneRow
- Člen | 10
Chalani, dakujem za odpovede, ale chyba musi byt niekde inde. Toto som skusal a nejde to stale – stale spadam do vetvy !$this->presenter->isAjax().
Este asi dodam, ze ten problem je trosku komplexnejsi, iba som sa ho snazil zjednoduchcit. V tej sablone – v tom snippete je totiz este formular (mozno to zmeni nieco na veci), vyzera takto:
{foreach $scc as $sc}
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
<a class="ajax pull-left" n:href="changeScreen! $sc->id"></a>
{/foreach}
{snippet}
Text
{control mojFormular}
Tu Vypis hodnotu formularu mojFormular po ajaxovom volani
{/snippet}
Tento formular je velmi jednoduchy a ked kliknem na jeden button, tak sa mi AJAXovo premaze tento formular a do databazy sa odosle hodnota formulara. To mi vsetko dobre funguje – skutocne sa po kliknuti na button formular premaze a odosle do databazy. Problem je iba s tymto 2. AJAXom – teda touto zmenou textu.
Cize vlastne ako keby sa v 1 snippete snazim menit 2 prvky pomocou 2 ajaxovych volani – da sa nieco take vobec?
Prekvapivo, v spracovani toho formlaru uz nespadam do vetvy
!$this->presenter->isAjax(), ale AJAX rozozna a spracuje – toto je pre
mna zahada.
Tam to spracovanie vyzera takto:
if (!$this->presenter->isAjax()) {
$this->redirect('this');
} else {
$this->redrawControl();
$this->udaje_model->pridajStav($values['stav']) //dostanem sa sem, narozdiel od prveho pripadu
Editoval oneRow (25. 4. 2016 10:51)