Link a pole url url adres

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

Dobrý den,
rád bych nějak elegantně vyřešil předávání pole adres (předem neznám počet těchto url) na presenter. Mám například následující:

{var $urls = array('spotrebice', 'kuchyne', 'varice')}
{plink Categories:default $urls}

V presenteru bych si to v action odchytil například:

<?php
  .....
  public function actionDefault($urls)
  {
	\dump($urls); //array('spotrebice', 'kuchyne', 'varice')
  }
  .....
?>

A pomocí routy bych nějakým způsobem řekl, že se mezi parametry má vložit znak /. Je toto možné? Díky,

net-vor
Člen | 35
+
0
-

Ahoj, spíš se zeptám, k čemu přesně by to mělo být / co by to mělo umět? Jinak mi přijde dost divné definovat URL v šabloně, o to se stará router. Pokud chceš dostat pole nějakých kategorií např. pro menu, tak šablona se akorát stará o to, aby se to vykreslilo, nic víc…

marau
Člen | 50
+
0
-

Jde mi pouze o zkrácený a přehledný zápis + možnost změny oddělovače přímo v routeru. Nyní musím pole převádět na řetězec (například implode(‚/‘, $pole)) a poté zase rozdělovat (explode(‚/‘, $pole)). Tyto 2 roky by bylo možné vynechat :)

Filip Procházka
Moderator | 4668
+
0
-
$router[] = new Route('/kategorie/<kategorie .*?>/', array(
	'presenter' => 'Categories',
	'action' => 'default',
	'kategorie' => array(
		Route::VALUE => NULL,
		Route::FILTER_IN => function($kategorie) { return explode('/', $kategorie); },
		Route::FILTER_OUT => function($kategorie) { return implode('/', $kategorie); }
	) // možná to bude chtít trochu si pohrát s těmi filtry
));

šablona

{plink Categories:default, 'kategorie' => ['spotrebice', 'kuchyne', 'varice']}

<!-- nebo pokud máš údaj v nějaké proměnné -->
{plink Categories:default, 'kategorie' => $kategorie}

vygeneruje

/kategorie/spotrebice/kuchyne/varice/

presenter

class Categories extends BasePresenter
{
	/** @persistent */
	public $kategorie = array();

	public function renderDefault()
	{
		dump($this->kategorie);
	}

}

ps: pokud uvedeš v presenteru parametr, pak ho nebudeš muset pojmenovávat v odkazech

public function renderDefault($kategorie)
{plink Categories:default, ['spotrebice', 'kuchyne', 'varice']}

Editoval HosipLan (19. 12. 2010 15:50)

krissott
Člen | 48
+
0
-

Zkoušel jsem to naprosto stejně, ale tady se mi to zastavi:

<?php
Route::FILTER_OUT => function($kategorie) { return implode('/', $kategorie); }
?>

Kategorie je NULL. Nemela vy se Route::VALUE nastavit jinak nez na NULL?

Editoval krissott (26. 1. 2011 14:07)

Oggy
Člen | 306
+
0
-

krissott napsal(a):

Zkoušel jsem to naprosto stejně, ale tady se mi to zastavi:

<?php
Route::FILTER_OUT => function($kategorie) { return implode('/', $kategorie); }
?>

Kategorie je NULL. Nemela vy se Route::VALUE nastavit jinak nez na NULL?

řeším podobný problém.. a taky je v tomto řešení proměnná $kategorie NULL namísto pole.

marau: tobě to funguje?

bojovyletoun
Člen | 667
+
0
-

Asi jsem našel problém , proč to nejde. Pokud parametr není skalární, tak k překladu nedojde. Pokud tu podmínku vynechám, tak to funguje.

Má to svůj důvod? mě teď žádný nenapadá (maximálně, že je nutné vždy uvést u neskalárního parametru Filtr_OUT, který z něj vytvoří string)

Editoval bojovyletoun (24. 2. 2011 18:42)