Vytváření stránek přes administraci?

- Tomáš Votruba
 - Moderator | 1114
 
Zdravím,
klient chce mít možnost vytvořit si v administraci stránku
např. moje-stranka, tak aby se při zadání
muj-web.cz/moje-stranka načetl obsah, který dané stránce
formulářem přiřadí.
Zajímalo by mě, jak byste to řešili.
- Zatím mne napadá pouze to, že by se ve 
startup()vždy analyzovalo, zda dané klíčové slovo není v tabulce s těmito stránkami, a pokud by bylo, došlo by k přesměrování na presenterstaticPage(který by stránku vypsal) při zachování url. Ale nevím jak moc je to realizovatelné a přijde mi to krkolomné. - Mám mu to rozmluvit, resp. dělat na požádání ručně? V tomto případě by to šlo, protože asi nepůjde o větší počet stránek, co když to ale bude přímo vyžadovaná feature?
 
Díky všem za reakce.
Editoval Schmutzka (5. 12. 2011 19:54)

- pepakriz
 - Člen | 246
 
Správným postupem bude asi vytvoření vlastní routy, která se vždy podívá do db a pokud najde záznam s touto url, zobrazí presenter staticPage, jinak vrátí NULL. Zde se dá inspirovat: https://forum.nette.org/…ovnove-routy#…
Edit: Samozřejmě tato routa musí být zaregistrovaná nad obecnou, která zachytává ostatní presentery.
Editoval pepakriz (5. 12. 2011 13:24)

- Tomáš Votruba
 - Moderator | 1114
 
pepakriz napsal(a):
Správným postupem bude asi vytvoření vlastní routy, která se vždy podívá do db a pokud najde záznam s touto url, zobrazí presenter staticPage, jinak vrátí NULL. Zde se dá inspirovat: https://forum.nette.org/…ovnove-routy#…
Edit: Samozřejmě tato routa musí být zaregistrovaná nad obecnou, která zachytává ostatní presentery.
Uměl bys to sepsat pro Nette 2.0? Koukal jsem na to a bojím se, že to bude úplně jinak.
pYro napsal(a):
Ja si naopak myslim, ze nechat obecnou routu a pak vsechen ostatni traffic poslat na jeden presenter (staticPage), kde se podle URL rozhodne co se bude dit. To by take slo, ne?
Příklad?
HosipLan napsal(a):
K tématu: https://forum.nette.org/…dnot-pri-mvc
Bohužel (zkusil jsem stejně věc s přesměrováním, ale to nejde), při
neexistenci stránky potřebuji přejít na další routu, ne vypsat výjimku
(hlášku).
Stejně tak nechci mít stranka/[!<slug>], ale
jen [!<slug>].
Ideální by v tomto případě nastavit, aby první routa neházela exception a přešla na „may“.
Editoval Schmutzka (5. 12. 2011 22:12)

- Tomáš Jablonický
 - Člen | 115
 
Možná je to prasárna ale mě to funguje :-). Routra:
<?php
 $router[] = $frontRouter = new RouteList('Front');
 $frontRouter[] = new Route('<id>.html', 'Page:default');
 $frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
?>
renderDefault pak vypadá takto:
<?php
 public function renderDefault($id){
  	//sestaveni podminky z id a navraceni obsahu stranky pripadne vyjimka pro 404
 }
?>
				
- Tomáš Votruba
 - Moderator | 1114
 
jablon napsal(a):
Možná je to prasárna ale mě to funguje :-). Routra:
<?php $router[] = $frontRouter = new RouteList('Front'); $frontRouter[] = new Route('<id>.html', 'Page:default'); $frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default'); ?>renderDefault pak vypadá takto:
<?php public function renderDefault($id){ //sestaveni podminky z id a navraceni obsahu stranky pripadne vyjimka pro 404 } ?>
Je to ok, jen to .html je tam navíc. Nechci, aby některé
stránky html měly a některé ne.
*mně
HosipLan napsal(a):
Ale to přece není vůbec žádný problém…
Tzn.?
Našel jsem fční i když krkolomné řešení. Za kratší a hezčí budu
rád.
Pro přehlednost rozepsané.
<?php
function isStaticPage($container) {
	$staticPageName = $container->getService("httpRequest"); // https://doc.nette.org/cs/http/request
	$staticPageName = $staticPageName->getUrl()->path;
	$staticPageName = rtrim($staticPageName,"/");
	$staticPageName = explode("/",$staticPageName);
	$staticPageName = $staticPageName[count($staticPageName)-1];
	return $container->database->page("url",$staticPageName)->count("*");
}
if(isStaticPage($container)) { // nutné pořadí pro statickou stránku
	$frontRouter[] = new Route('<name>', 'StaticPage:default');
}
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
?>
					Editoval Schmutzka (11. 12. 2011 3:32)