Metody presenteru v komponente

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
len123
Člen | 3
+
0
-

Zdravim.
Potrebujem cez komponentu pridat produkt do session + prekreslit nakupny kosik (meni sa tam pocet produktov).
v komponente som vytvoril tuto metodu, ktora by to mala urobit:

	public function handleAddtocart($productId, $count = 1){
		$this->redrawControl('cart');
		if ($count>0){
			$session = $this->presenter->getSession();

			if (!isset($session->products[$productId])) $session->products[$productId] = $count;
			else $session->products[$productId] += $count;
		}
	}

Vracia mi to ale chybu:
Call to undefined method App\FrontModule\Pages\SpecialnaPonuka::redrawControl()
nedostanem sa ani k tym sessions, takze nespravne volam tieto metody presenteru.

V nette som este nerobil, takze je to mozno blba otazka :)
Dakujem

David Matějka
Moderator | 6445
+
0
-

Co pouzivas za nette? redrawControl je v nette >= 2.1, v 2.0 je to invalidateControl

len123
Člen | 3
+
0
-

Je to
VERSION = ‚2.1-dev‘


invalidateControl funguje. Ale k session sa este nedostanem, hadze to chybu. Asi sa metoda na prisup k sessions vola tiez nejako inak.

V @layout.latte mam snippet cart, ktory zinvalidujem v handleAddtocart(), prebehne mi aj request, ale server nevrati ziadne zinvalidovane snippety.

Pri prvom volani (vykresleni celej stranky) nastavujem v snippete cart pocet produktov PagePresenter v metode renderDefault takto (priklad, ked sa dostanem k sessions tak tam bude scitanie produktov v kosiku):

$this->template->cartCount = 0;

V komponente SpecialnaPonuka v metode handeAddtocart prepisem tuto premennu a zinvalidujem snippet cart.

$this->template->cartCount = 8;
$this->invalidateControl('cart');

idem na to dobre? lebo mi to nefunguje :)

Editoval len123 (11. 3. 2014 10:53)

Pavel Macháň
Člen | 282
+
0
-

len123 napsal(a):

Je to
VERSION = ‚2.1-dev‘

Doporucuju prejit na 2.1 stable

David Matějka
Moderator | 6445
+
0
-

K session by ses takhle mel dostat – i kdyz to neni idealni, spravne by sis mel vyzadat session jako zavislost – ale to az jindy :)
problem bude, ze nepouzivas sekce, viz dokumentace

muzes take pouzit shortcut ->presenter->getSession('sectionName')

len123
Člen | 3
+
0
-

ja by som nikdy nepouzil dev verziu na vyvoj produkcnej verzie webu, ale dostal som za ulohu upravit web, ktory bol napisany v tejto verzii. takze to bude este zabava :)

k tym session asi budem pristupovat cez $_SESSION, ten ajax poriesim tiez „rucne“ :) tak dakujem zatial za pomoc