Routing URL viac úrovnový odkaz
- SontoEremo
- Člen | 341
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
Takže nikto také nič neriešil? Ja už neviem ako to mám poskladať aby to fungovalo.
- stewestw
- Člen | 42
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
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
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
<?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)
- Unlink
- Člen | 298
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
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 {
}
- SontoEremo
- Člen | 341
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
@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ý
- SontoEremo
- Člen | 341
@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
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