Persistentní parametry v odkazech

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

(Nette 0.9.3, PHP 5.3)

Ahoj,
řeším teď takový podivný problém s persistentními parametry. Jak jsem pochopil, taky by se měly automaticky předávat do linků v šabloně daného presenteru.
Moje šablona:

<a href="{link click!}"  >Click</a>

Do href se dostane jen ?do=click

Když to změním na

<a href="{link click!, 'round' => $round}"  >Click</a>

Do href se dostane jen ?do=click (=to same)

Když to změním na

<a href="{link click!, 'round' => 3}"  >Click</a>

Do href se dostane ?round=3&do=click

Persistentni parametr mam definovany takto:

final class Presenter
{
	  public $round = 0;

    public function handleClick($round)
    {
    	$this->round =  $this->round + $round;
    }

    public static function getPersistentParams()
    {
        return array('round');
    }

    public function renderDefault()
    {

        $this->template->round = $this->round;
        //$this->invalidateControl('round');
    }

Snazim se udelat jakoby „pricitani“, podobne jak je tomu v prikladu fifteen (ten mi fugnuje).
Nevite, co kde mam spatne prosim?

Vyki
Člen | 388
+
0
-

Ten parametr se ti automaticky do URL přidá pokud nemá nastavenu svou výchozí hodnotu. Je zbytečné předávat hodnotu o které víš, že je výchozí. Dejme tomu, že bys měl v presenteru persistentní parametr $js, který by signalizoval vypnutý nebo zapnutý JS. Ve výchozím stavu bys měl definici persistentního parametru v presenteru.

<?php
	/** @persistent int */
	public $js = 1;		//zapnutý js
?>

V šabloně bys měl tlačítko, které by ti js vyplo {link jsoff!} a v presenteru obslužný signál .

<?php
	public function handleJsoff()
	{
		$this->js = 0;
	}
?>

Nyní když nebude $js nastaveno na výchozí hodnotu, začne se ti do URL jako parametr přidávat.

Editoval Vyki (12. 7. 2010 14:55)

raia
Člen | 25
+
0
-

Díky za info, už je mi to jasnější.

Mohu v šabloně změnit hodnotu persistentního parametru?

Vyki
Člen | 388
+
0
-

Ano, hodnota per. parametru v šabloně měnit lze.

raia
Člen | 25
+
0
-

Vyki napsal(a):

Ano, hodnota per. parametru v šabloně měnit lze.

A je to možné i dynamickým způsobem? Nějak mi to nejde.

{link click!, 'round' => $presenter->round} nefunguje

{link click!, 'round' => 3} funguje

Editoval raia (12. 7. 2010 13:55)

Vyki
Člen | 388
+
0
-

Ta první možnost nedává smysl, ten parametr se ti do URL vloží sám. Pokud chceš jako hodnotu toho parametru vložit třeba číslo, tak si ho ulož jako proměnnou do template.

<?php
        /** @persistent int */
        public $round = 1;

	renderDefault()
	{
		$this->template->number = 8;
	}
?>

{link click!, 'round' => $number}

Editoval Vyki (12. 7. 2010 14:04)

raia
Člen | 25
+
0
-

Díky!