Nefunkční rekurze v adrese

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

Ahoj, rád bych měl v vlastním CMS odkazy např. ve tvaru /kategorie/subkategorie/sub2, neomezený počet vnořených subkategorií.

V modelu mám metody:

public function fetchCategory($aId) {
    $return = $this->database->table('web_articles')->where('id', $aId)->fetch();
    return $return->category;
}

public function fetchPath($catId) {
    $category = $this->database->table('web_menu_items')->where("id",$catId)->fetch();
    $return = $category->alias;
    $sub = $this->fetchSubPath($category->parent_id);
    return $return;
}

v presenter mám:

$this->template->path = $this->database->fetchPath($catId);

Namísto celé cesty se mi objeví v url pouze poslední subkategorie.

Kde dělám chybu prosím?

Díky moc

Unlink
Člen | 298
+
0
-

Ako máš nastavený router a ako tie adresy generuješ?

Petr Parolek
Člen | 455
+
0
-

routy nyní nemám zaplé, neřeším je, chci tu cestu do parametru např. /article/show?path=kategorie/sub1/sub2

Unlink
Člen | 298
+
0
-

A odkaz vytváraš ako?

Petr Parolek
Člen | 455
+
0
-
<a href="{link Article:show $path,$article->id}-{$article->slug}">{$article->title}</a>

Editoval ppar (25. 6. 2015 22:09)

Unlink
Člen | 298
+
0
-

A to idčko ti do linku dá?

lebo teraz som to skúsil a fungovať by to malo:

Nech mám:

$this->template->path = '/kategorie/subkategorie/sub2';
$this->template->id = 1;
public function renderShow($path, $id)

a v latte

{link Homepage:show $path,$id}

dostanem očakávané
homepage/show/1?path=/kategorie/subkategorie/sub2

Určite nieje problém v tom modely a dostaneš celú cestu? Nemal by si tam mať

return $sub.'/'.$return;

Editoval Unlink (26. 6. 2015 9:43)

Petr Parolek
Člen | 455
+
0
-

Vždyť proměnnou path netaháš odnikud.

David Matějka
Moderator | 6445
+
0
-

@ppar tim @Unlink ukazuje, ze chyba neni v routovani ani ve vytvareni odkazu, ale prave v modelu, kde mas promennou $sub, se kterou nic nedelas

Petr Parolek
Člen | 455
+
0
-

sorry, zapomněl jsem tu poslat druhou metodu:

public function fetchSubPath($catId) {
        Debugger::barDump($catId);
        //$articles = $this->database->table('web_articles')->where("catid",$catId)->fetch();
        //Debugger::barDump($articles->catid->alias);
        $category = $this->database->table('web_menu_items')->where("parent_id",$catId)->fetch();
        $return = $category->alias;
        //$return = $category-alias;
        //Debugger::barDump($category);
        Debugger::barDump($return);
        return $return;
}
Petr Parolek
Člen | 455
+
0
-

@DavidMatějka
vím no… Nevím totiž, jak správně implementovat rekurzi.

Editoval ppar (26. 6. 2015 14:10)

Unlink
Člen | 298
+
0
-

Algoritmus by mal byť asi

$path = [];
$catId = 1;
do {
	$result = $this->database->table('web_menu_items')->where("id",$catId)->fetch();
	$path[] = $result->alias;
	$catId = $result->parent_id;
} while ($catId != NULL);
return implode('/', array_reverse($path));
Petr Parolek
Člen | 455
+
0
-

Díky, už to jede, jak má.