Routing URL viac úrovnový odkaz

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

Zdravím,
Vopred sa ospravedlňujem za názov témy pokiaľ nevyhovuje prosím o jej zmenu!
Teraz k veci.
Ako nastaviť Router poprípade akú Adresárovú Štruktúru použiť ak chcem mať adresu v tvare:

domena.xx/templates/category/html-css/creative
domena.xx/templates/category/html-css/creative/portfolio

Toto je môj pokus

<a href="{plink :Templates:HtmlCss:Creative:portfolio}">Link</a>

Toto je výsledok

http://domena.xx/templates/sidebar/html-css.creative/

Moja Routa

/************ TEMPLATES MODULE ************/
		$router[] = new Route('templates/<category>/<presenter>/<action [a-z0-9-]+>[/<id>]', array(
			'module' => 'Templates',
			'category' => 'category',
			'presenter' => 'Homepage',
			'action' => 'default',
			'id' => NULL,
		));

Samozrejme všetkým vopred ďakujem.

SontoEremo
Člen | 341
+
0
-

Takže nikto také nič neriešil? Ja už neviem ako to mám poskladať aby to fungovalo.

stewestw
Člen | 42
+
0
-

ja som to riesil davnejsie. struktura priecinkov by vzdy mala byt v defaultnom nastaveni
<nieco>Module/…

ak si neprestavil v config.neon toto:

mapping:
 *: App\*Module\Presenters\*Presenter

potom staci uz len:

$router = new RouteList();

//  front  subroutes
$router[] = $frontSubRouter = new RouteList('Front');
$frontSubRouter[] = new Route('', 'Registration:Default:default');

v mojom pripade je suborova struktura \App\FrontModule\RegistrationModule\…
a odkazujem na neho:

{plink ':Front:Registration:Default:default'}
SontoEremo
Člen | 341
+
0
-

Nazdar @stewestw
Tak som to skúsil podľa teba no výsledok URL je

http://dome.xx/templates/category/html-css.portforilio/creative

Medzi html-css a portfolio chýba lomítko a za boha neviem ako ho tam dostať

stewestw
Člen | 42
+
0
-

Vies mi sem prosim postnut tvoj novy router a strukturu foldrov?
U mna to zbehava bez bodky. Na tomto linku rozoberaju inac nieco podobne:
https://forum.nette.org/…modulu-bodku

Editoval stewestw (16. 4. 2015 23:06)

SontoEremo
Člen | 341
+
0
-
<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
use Nette\Application\Routers\SimpleRouter;

class RouterFactory {
	/**
	 * @return \Nette\Application\IRouter
	 */
	public static function createRouter() {
		$router = new RouteList();
		$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
		$router[] = $templatesSubRouter = new RouteList('Templates');
		$templatesSubRouter[] = new Route('', 'HtmlCss:Homepage:default');
		$router[] =  new Route('templates/<category>/<presenter>/<action>[/<id>]', array(
			'module' => 'Templates',
			'category' => 'category',
			'presenter' => 'Homepage',
			'action' => 'default',
			'id' => NULL,
		));
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}
}
-> App
	-> module
	-> TemplatesModule
			-> presenters
			-> templates
		-> htmlCssModule
				-> presenters
				-> templates
	-> presenters
		HomepagePresenter <----- Hlavná stránka
	......

Editoval SontoEremo (16. 4. 2015 23:13)

stewestw
Člen | 42
+
0
-

skus to takto:

-> App
    -> AdminModule <---- tu mas momentalne pomenovany priecinok iba ako "module"
           -> TemplatesModule
                -> presenters
                -> templates
           -> htmlCssModule
                -> presenters
                -> templates
    -> presenters
        HomepagePresenter <----- Hlavná stránka
    ......
SontoEremo
Člen | 341
+
0
-

Bohužial stále tak isto

Unlink
Člen | 298
+
0
-

A ktorú url ti to matchne?

Ak máš modul Templates a ten má submodul HtmlCss tak by som to skúsil takto:

<?php
namespace App;
use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
use Nette\Application\Routers\SimpleRouter;

class RouterFactory {
    /**
     * @return \Nette\Application\IRouter
     */
    public static function createRouter() {
        $router = new RouteList();
        $router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
        $router[] = $templatesSubRouter = new RouteList('Templates');
        $templatesSubRouter[] =  new Route('templates/<module>/<presenter>/<action>[/<id>]', array(
            'module' => 'HtmlCss',
            'presenter' => 'Homepage',
            'action' => 'default',
            'id' => NULL,
        ));
        $router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
        return $router;
    }
}

Neviem aký maš nastavený mapping, aký namespace má Homepage presenter?

SontoEremo
Člen | 341
+
0
-

Nazdar @Unlink
Môj mapping v gonfigu je

application:
	errorPresenter: Error
	mapping:
		*: App\*Module\Presenters\*Presenter

Homepage v module HtmlCss je

<?php
namespace App\TemplatesModule\HtmlCssModule\Presenters;

class HomepagePresenter extends CommandPresenter {

}

A Homepage v TemplatesModule je

<?php
namespace App\TemplatesModule\Presenters;

class HomepagePresenter extends BasePresenter {

}
Unlink
Člen | 298
+
0
-

No tak potom by to malo fungovať, skúšal si ten môj kód?
Keď dáš :Templates:HtmlCss:Creative:portfolio tak ti to vygeneruje akú cestu?

SontoEremo
Člen | 341
+
0
-

Skúsim to presne priblížiť o čo mi ide možno sa nájde nejaké iné riešenie ako dosiahnuť tú správnu štruktúru zložiek a URL

Takže Mám hlavné Menu
Domov | Aplikácie | Šablóny
užívateľ klikne na Šablóny
Tam mám submenu
HTML/CSS | WORDPRESS
užívateľ klikne na HTML/CSS
Tam je ďalšie Submenu
Creative atď…
užívateľ klikne na Creative a tam sa mu presmeruje na ďalšie submenu
Portfólio atď
no a potrebujem aby sa dosiahli tieto URL
dome.xx/templates/ ← Klik
domena.xx/templates/html-css/ ← klik
domena.xss/templates/html-css/creative/ ← klik
domena.xss/templates/html-css/creative/portfolio/ ← klik

Sakra mohol som zjednodušene napísať, že potrebujem dosiahnuť takú úroveň url ako mám Themeforest ak vojdete do HTML a tam sa preklikáte všimnete si to kategóriovanie či ako to nazvať :) no ale tu v Nette bez nejakého zložitého písania to asi ani nie je možné či? je aj na to nejaká alternatíva?

P.S: Pozor To HTML/CSS je len jedna z Kategórii Je ich tam viac

SontoEremo
Člen | 341
+
0
-

@Unlink
Áno práve ju skúšam
cesta je Ok

http://localhost/waadlab/templates/html/creative/portfolio

Ale je to zvláštne pretože keď kliknem na Šablóny(Templates)
Tak tam nemám na výber HTML/CSS ale hneď Creative čo potrebujem aby spadalo pod HTML/CSS

A na druhej strane som niečo teraz zistil Ak mám router takto

$router[] =  new Route('templates/<presenter>/<action>[/<id>]', array(
			'module' => 'Templates',
			'presenter' => 'Homepage',
			'action' => 'default',
			'id' => NULL,
		));
		$router[] = $templatesSubRouter = new RouteList('Templates');
        $templatesSubRouter[] =  new Route('templates/<module>/<presenter>/<action>[/<id>]', array(
            'module' => 'HtmlCss',
            'presenter' => 'Homepage',
            'action' => 'default',
            'id' => NULL,
        ));

Je výsledna URL

http://localhost/waadlab/templates/html.homepage/

Ak mám router takto

$router[] = $templatesSubRouter = new RouteList('Templates');
        $templatesSubRouter[] =  new Route('templates/<module>/<presenter>/<action>[/<id>]', array(
            'module' => 'Html',
            'presenter' => 'Homepage',
            'action' => 'default',
            'id' => NULL,
        ));
		$router[] =  new Route('templates/<presenter>/<action>[/<id>]', array(
			'module' => 'Templates',
			'presenter' => 'Homepage',
			'action' => 'default',
			'id' => NULL,
		));

tak zas výsledna URL je skoro OK

http://localhost/waadlab/templates/html/creative/portfolio

Ale bez výberu HTML/CSS ktoré je tam samozrejme automatický

Unlink
Člen | 298
+
0
-

Takže tie jednotlivé úrovne majú slúžiť len na nejakú kategorizáciu, a všetky v podstate okrem toho posledného budú mať rovnaký obsah, tj. zoznam subkategorii?

Nette použije vždy prvú routu ktorá vyhovuje preto to prvé nejde a druhe už áno.

SontoEremo
Člen | 341
+
0
-

@Unlink
Áno v podstate každá Kategória
HTML/CSS | WORDPRESS | PHPBB3 | JOOMLA
Bude mať rovnaké submenu ale s iným obsahom samozrejme.
Takže asi ten môj výsledok URL nedosiahnem

Unlink
Člen | 298
+
0
-

Ale určite to pôjde, len genrovanie menu je jedna vec, ale kam budú všetky tie linky odkazovať?

Lebo ak každý link (nezáleží na dĺžke zanorenia) bude odkazovať na rovnaký presenter a rovnakú akciu (kde povedzme vypíše podkategorie alebo na konci konkrétne produkty)…

Až také znalosti nemám, ale tuna niečo podobné riešili, a výhoda je, že to vieš nejako dynamicky riešiť – povedzme načítanim z databázy.
https://forum.nette.org/…am3-param125