Číslo v začátku názvu presenteru – nevytvoří se link

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

Zdravím,
chtěl jsem se zeptat odborníků na nette jak je to s čísly v názvu presenterů?

Potřebuji udělat adresu „…cz/3-neco/“, ale narazil jsem na problém, že pokud presenter začíná číslem nevygeneruje se mi adresa. Zkoušel jsem to i přes překlad rout a nastal ten samý problém.

Proto jsem se chtěl zeptat jestli už někdo něco takového řešil, nebo jak by se to řešit dalo.

Předem díky za odpověď.

Filip Procházka
Moderator | 4668
+
0
-

To vypadá na práci pro SEO Router

kokoumes
Člen | 39
+
0
-

No mě se nechce dělat nis složitýho. stačil by mi třeba pouze překlad pro jednu stránku.. Opravdunikdo neví?

Filip Procházka
Moderator | 4668
+
0
-

Tak tam to číslo nedávej :)

22
Člen | 1478
+
0
-

anebo je dej na konec :-))
anebo /3/text

Editoval 22 (26. 4. 2011 15:51)

kokoumes
Člen | 39
+
0
-

No problém je, že tam to číslo prostě nutně potřebuju kvůli významu adresy. :-(
Klidně by to mohlo být i ve tvaru 3neco, ale to číslo je tam fakt důležitý

Editoval kokoumes (26. 4. 2011 16:40)

kokoumes
Člen | 39
+
0
-

Proč je to vůbec problém začínat číslem? Když použiju překlad adres a dám čislo doprostřed je to OK.
Opravdu nikdo neví jak to řešit(jednoduše)?

Martin
Člen | 171
+
0
-

Není to sice asi úplně to, co jsi chtěl, ale třeba to pomůže:

$router[] = new Route('<id>-[!<presenter>]/[!<action>]', 'Homepage:default');

Myslím, že ale naopak to může být právě to, co potřebuješ, je-li pro Tebe to číslo tak důležité. Dostaneš ho pak jako parametr. Samozřejmě si to pak ale musíš spárovat.

Teď třeba zrovna dělám jednoduché CMS, kde je kompletní strom stránek v databázi, ale některé z nich se editor může rozhodnout nasměrovat k zobrazení konkrétního presenteru a akce místo obsahu z DB (třeba ..tady chci mít chat.. ..a tady vyhledávání..). Takže pak ta stránka v DB, identifikovaná jednoznačným ID, vyjadřuje jen umístění ve stromu (a v menu aplikace). Pro tento případ přidávám na začátku bootstrap.php (používám ale dvojici id+slug, kdyby to bylo id-presenter/action, vypadalo by to malinko jinak):

Model::init(Environment::getConfig()->database);
$URLs = Model::getURLs();//Vrátí jen ty stránky, které místo obsahu zobrazují Presenter[/Akce]
foreach ($URLs as $URL) {
    $rtIDSlug = $URL->id.'-'.$URL->slug;
    $rtPresenter = $URL->presenter;
    $rtAction = $URL->action;
    if ($rtAction == '') {
        $rtAction = 'default';
    }
    Debug::barDump(array($rtIDSlug => $rtPresenter.':'.$rtAction));
    $router[] = new Route($rtIDSlug, array(
        'presenter' => $rtPresenter,
        'action' => $rtAction,
        'idslug' => $rtIDSlug,
    ));
	//a abych je mohl odkazovat i bez ID, třeba nějaký rychlým odkazem z šablony (ten nemůže vést na Presenter/action, neb jest vše editovatelné za běhu):
    $router[] = new Route($URL->slug, array(
        'presenter' => $rtPresenter,
        'action' => $rtAction,
        'idslug' => $rtIDSlug,
   ));
}

Můžeš to mít podobně, ale to číslo nemusíš tahat z databáze, pokud ho nechceš dynamicky přidělovat, stačí ho mít třeba jako atribut příslušného Presenteru (přístupný přes metodu BasePresenteru) a v routě si přiřadit dvojici ID-Presenter.

Třeba se Ti ale nakonec přecijen ozve někdo, kdo v Nette dělá déle a poradí nějaké jednoduché a správné řešení. To už jsem tady zjistil – snaha pomoci je. Ale žadatelů o pomoc je hodně a mistři Nette mají i jiné věci na práci. Pokud chceš rychlou a kvalitní odpověď od někoho z nich, je lepší mít ve vláknu nejdříve nějakou úplně špatnou radu, která je uhodí do očí – pak se někdo brzy objeví s kvalitní opravou.

Editoval Martin (30. 4. 2011 11:21)