Efektivnější routování pro eshop?

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

Ahoj, zajimalo by me zda by se nasledujici routa nedala upravit tak, abych nemusel pred znacky (brands) a stitky (tags) davat do url „/brands/“ nebo „/tags/“. Ted url vypada napr. takhle „/boty/znacky/adidas/stitky/novinka/“, takze se zbytecne url prodluzuje a pro SEO to neni uplne optimalni. Chtel bych dosahnout, aby url vypadala takhle: „/boty/adidas/novinka/“ ale nevim presne zda to v Nette nejak jde nebo jak nejlepe by se to dalo udelat. Asi by pomohl nejaky seznam povolenych tvaru pro brands a tags, ale nevim co kde a jak.

$router[] = new Route('<categories>[/znacky/<brands>][/stitky/<tags>]/', array(
    	'presenter' => 'Product',
    	'action' => 'list',
	'categories' => null,
	'brands' => null,
	'tags' => null,
));
h4kuna
Backer | 740
+
0
-

ahoj, myslíš toto?

'<categories>[/znacky/<brands>][/stitky/<tags>]/' /*přepsat na*/
'<categories>[/<brands adibas|nake|reeebok>][/<tags novinky|sleva|velky-kamarad>]/' /* je pro toto /boty/adibas/novinka/ */

v presenteru najdes jako

<?php
/** @persistent */
public $brands;
//...
dump($this->brands);
?>

PS: nechtěl jsem dělat reklamu tak jsem ty značky upravil, ale stejně je všichni znaj :)

Editoval matata (7. 2. 2011 15:03)

Neuronic
Člen | 12
+
0
-

Nooo takhle me to uz napadlo, ale jestli neni nejaky lepsi zpusob jak to provazat s databazi, zebych tomu <brands> nastavil nejake pole povolenych hodnot :-). Teda takhle jak si to poslal se to nastavuje, ale myslel jsem spis neco ve stylu, ze mu predam pole.

Editoval Neuronic (7. 2. 2011 15:18)

Filip Procházka
Moderator | 4668
+
0
-

mělo by fungovat něco jako

use Nette\Application\Route;

$router[] = new Route('<categories>[/<brands>][/<tags>]/', array(
        'presenter' => 'Product',
        'action' => 'list',
        'categories' => null,
        'brands' => array(
			Route::VALUE => NULL,
			Route::FILTER_IN => function ($brand) {
				static $allowed = array(
					"adibas",
					"nake",
					"reeebok"
				);

				return in_array($brand, $allowed) ? $branch : NULL;
			}
		),
        'tags' => array(
			Route::VALUE => NULL,
			Route::FILTER_IN => function ($tag) {
				static $allowed = array(
					"novinky",
					"sleva",
					"velky-kamarad"
				);

				return in_array($tag, $allowed) ? $tag: NULL;
			}
		),
));
Neuronic
Člen | 12
+
0
-

Super, diky moc! :)