Generování rout za běhu a řešení problému ohledně SEO

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

Mám takovýto router:

class RouterFactory
{

	/** @var PageRepository */
	private $pageRepository;


	/**
	 * @param PageRepository $pageRepository
	 */
	public function __construct(PageRepository $pageRepository)
	{
		$this->pageRepository = $pageRepository;
	}


	/**
	 * @return \Nette\Application\IRouter
	 */
	public function createRouter()
	{
		$router = new RouteList();

		$router[] = new Route('[<locale [a-z]{2}>/]', 'Homepage:default');
		$router[] = new Route('[<locale [a-z]{2}>/]index.php', 'Homepage:default', Route::ONE_WAY);

		$pages = $this->pageRepository->findAllPages();
		foreach ($pages as $page) {
			$router[] = new Route('[<locale [a-z]{2}>/]' . $page->slug, $page->presenter . ':' . $page->action);
		}

		$router[] = new Route('[<locale [a-z]{2}>/]<presenter>/<action>[/<id>]', 'Homepage:default');

		return $router;
	}

}

Mám to řešené takto, protože v administraci si stránky můžete pojmenovat a můžete si do nich vkládat obsah. Ke každé stránce pak musíte vždy přiřadit dvojici Presenter:action, aby bylo jasné, jaké jméno stránky patří k jakému presenteru a akci. Např. http://example.com/kontakt/ je namapován na Contact:default. Díky tomu není url anglicky, tedy http://example.com/contact/ a také nenusím každý presenter:akci routovat ručně právě pro případ, že bych chtěl mít název stránky v češtine. Dalo by se to samozřejmě udělat i tak, že bych presentery pojmenovával česky, ale to není hezké. :-)

Zajímalo by mě tedy, jestli je tento způsob generování rout v pořádku. Jak by se pak dala případně řešit situace, kdy by si uživatel existující stránku kontakt, která je namapovaná na Contact:default přejmenoval na kontakty nebo kntaktni-stranka aby si ji vyhledávače nezačali indexovat jako novou stránku, přitom by šlo vlastně o tu samou se stejným názvem. Toto myslím že řeší Route::ONE_WAY že?

Jan Tvrdík
Nette guru | 2595
+
+1
-

Zajímalo by mě tedy, jestli je tento způsob generování rout v pořádku

Není, všechny ty routy vygenerované v cyklu lze nahradit jednou univerzální routou se správně napsaným globálním filtrem. Tvoje řešení špatně škáluje pro větší množství stránek.