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)