nekonecne vnoreni + posledni stranka + router

TheNEoo
Člen | 75
+
0
-

Ahoj všem,
jakým zpusobem řešíte situaci, kdy máte jednu šablonu a zanorujete stránky, které mají stále stejnou sablonu?.

např.

mam Homepage:default a Homepage:page

zanoreni: neco/hlavni-stranka
(homepage:default id=>1)

další: neco/hlavni-stranka/podstranka_stranka1/
(homepage:default id=>1, id=>2)

dalsí: neco/hlavni-stranka/podstranka_stranka1/podstranka_podstranky/
(homepage:default id=>1, id=>2, id=>3)

a takto zanorovat do konecna.

jde mi o to, ze se jedna stále o stejnou sablonu. Pokud se jedna o poslední stránku, tak pak je sablona homepage:page

Jak takovou situaci resit? Jak co se týče šablony, presenteru i routeru? Netusim, jak na to, ci od ceho se odpichnout.

Editoval TheNEoo (17. 8. 2017 12:55)

CZechBoY
Člen | 3608
+
0
-

Tak url můžeš mít jakou chceš žejo, to na tý moc nezáleží.
Já jsem pro autodíly měl url takhle: /skoda/fabia/2012/sedacky.html

greeny
Člen | 405
+
0
-

Tu stromovou strukturu měj v DB a předávej si IDčko jen té poslední stránky a z DB vytáhni ty předchozí :)

TheNEoo
Člen | 75
+
0
-

To vím, ale jak toho docílit?

<!-- sem nevkládám asi predesle sranky, ale jen stranku nasledujici? typuji že ano
<a n:href ="Homepage:default id=>id_nasledne_stranky">

Typuji teda ze si budu muset v presenteru udrzovat zanoreni

$values = array(
1 => id_prvni_stranky
2 => id_pod_stranky
3 => id_pod_pod_stranky
etc...
)

a vrouteru? Vubec netusim jak pred informace routeru a pouzit pak filter in a out

TheNEoo
Člen | 75
+
0
-

greeny napsal(a):

Tu stromovou strukturu měj v DB a předávej si IDčko jen té poslední stránky a z DB vytáhni ty předchozí :)

děkuji dobry nápad :)

ovšem stále zustává router jak na nej

greeny
Člen | 405
+
0
-

Pokud potřebuješ mít v cestě všechny kategorie nebo whatever co to je, tak si napiš filtr (https://doc.nette.org/…tion/routing#…).

Zjednodušeně:

<?php

$router[] = new Route('<path .*>', [
	'presenter' => 'Page',
	'action' => 'view',
	NULL => [
		Route::FILTER_IN => function ($params) {
			$lastItem = end(explode('/', $params['path']));
			if (!$item = $database->getItemByIdentifier($lastItem)) { // použij nějakou vlastní službu na vytažení těch dat
				$params['id'] = $item->id;
				unset($params['path']);
			}
			return $params;
		},
		Route::FILTER_OUT => function ($params) {
			$parents = $database->getParentsById($params['id']); // opět nějaká vlastní služba
			$path = '';
			foreach ($parents as $parent) {
				$path = $parent->identifer . '/' . $path;
			}
			$params['path'] = $path;
			unset($params['id']);
			return $params;
		},
	],
]);

<a n:href="Page:view $page->id">Odkaz na stránku</a> // takhle pak vypadá odkaz
?>
TheNEoo
Člen | 75
+
0
-

greeny napsal(a):

Pokud potřebuješ mít v cestě všechny kategorie nebo whatever co to je, tak si napiš filtr (https://doc.nette.org/…tion/routing#…).

Zjednodušeně:

dekuji to je presne ono nedokazal jsem si predstavit ty globalni filtry

Editoval TheNEoo (17. 8. 2017 21:57)

TheNEoo
Člen | 75
+
0
-

Ahoj znova všem :)
Dostal jsem se do bodu, který je podobný prispevku od greeny.

Aktuálně když jsem na hlavni strance, tak odkazy vypadaj nasledovně:

localhost (homepage:default)

odkazy:

  • localhost/internet
  • localhost/iptv
  • etc…

pri prokliku na odkaz localhost/internet se dostanu o bod dál, to je správne.

  • a mam na stránce odkazy:
  • localhost/domacnosti
  • localhost/firmy

ovsem je to podstranka odkazu internet, takze odkazy by mely být:

  • localhost/internet/domacnosti
  • localhost/internet/firmy

nekde me neco utika a nevim co.

dle mě bych měl v šablone n:href předat celou cestu a ne jen id (to jest celou cestu plus id)

Editoval TheNEoo (17. 8. 2017 21:53)

CZechBoY
Člen | 3608
+
0
-

Tak pokud predas id, je potreba v routeru dotahnout kompletni cestu z db.