persistentní parametr v poli

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

# PHP 5.3.3–1ubuntu9.3
# Apache/2.2.16 (Ubuntu)
# Nette Framework 2.0-dev (revision 9f535f9 released on 2011–01–10)

Mám takový dotaz – jak se dají používat persistentní parametry v poli?
potřebuji mít v poli parametry a nemuset u každého odkazu vypisovat celé pole..
presenter:

<?php
public $tags;
...
$this->tags = $this->getParam('tags');
...
?>

šablona:

<?php
...
<a n:foreach="$tagGroup->tag() as $tag" n:href="this 'tags[]' => $tag['id']">{$tag['value']}</a>
...
?>

Takto funguje jen první odkaz, který vytvoří url: …presenter/action/1?tags[0]=7
a při dalším odkazu, který by měl přidat do pole tags další prvek se nic neděje.. při najetí na odkaz si vypadá odkaz takto: …presenter/action/1?tags[]=2&tags[0]=7 ale při kliknutí se url nezmění

jde to řešit takovýmto odkazem:

<?php
<a n:href="this 'tags' => array('1','2')">to prave orechove</a>
?>

ale tady bych musel u každého odkazu vypisovat celé pole a přidat ten daný tag pro aktuální odkaz.

Dělám něco špatně? Neřešil toto již někdo? Děkuju

Editoval Oggy (22. 2. 2011 10:30)

Filip Procházka
Moderator | 4668
+
0
-

V čem je problém?

/** @persistent */
public $tags;

public function renderDefault()
{
	$this->tags = array(1,2,3);
	dump($this->link('this'));

	dump($this->link('this', array('tags' => array(3,2,1))));
}

nebo postupné přidávání

public function renderDefault()
{
	$this->template->tags = $this->tags;
}

a šablona

{var $tags = array_merge($tags, array(5))}
<a href="{link this, 'tags' => $tags}">pridat neco</a>

neni to sice moc hezke, ale kdyz chces neco pridat, lepsi syntax me nenapada

Editoval HosipLan (22. 2. 2011 12:20)

Oggy
Člen | 306
+
0
-

no problém je tady:

<?php
public $tags;
...
$this->tags = $this->getParam('tags');
...
?>

šablona:

<?php
<a href="{link 'this', 'tags[]' => 9}">test</a>
?>

odkazuje sice na stranku: …/?tags[]=9&tags[0]=3
ale při kliknutí se reloadne ale znovu na url …/?tags[0]=3

když jsem to dumpoval z presnteru.. tak generovalo správnou url.. to se děje i v tom na jakou stránku to odkazuje.. ale po přesunu na tu url se vrací k té původní..

nevím jestli to popisuju nějak rozumně :-)

tady v tom dumpu je vzdycky jen ta prvni hodnota
( v tomhle pripade array(1) ▼ [
0 ⇒ „3“ (2)
])
a dalsi hodnoty ne ..

<?php
 protected function  startup() {
        parent::startup();
Debug::barDump($this->params);
        $this->tags = $this->getParam('tags');
    }
?>
Oggy
Člen | 306
+
0
-

>

a šablona

{var $tags = array_merge($tags, array(5))}
<a href="{link this, 'tags' => $tags}">pridat neco</a>

neni to sice moc hezke, ale kdyz chces neco pridat, lepsi syntax me nenapada

aha..koukám že mě předběhl než jsem odpověděl.. o tomhle vím.. jen jsem se ptal jestli to takhle musím dělat u každého odkazu nebo právě využít těch vlastností persistentního parametru..