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

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

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.

  1. 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 presenter staticPage (který by stránku vypsal) při zachování url. Ale nevím jak moc je to realizovatelné a přijde mi to krkolomné.
  2. 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
+
0
-

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)

pYro
Člen | 29
+
0
-

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?

Tomáš Votruba
Moderator | 1114
+
0
-

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)

Filip Procházka
Moderator | 4668
+
0
-

Ale to přece není vůbec žádný problém…

Tomáš Jablonický
Člen | 115
+
0
-

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
+
0
-

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)