SEO přátelské url za pomocí slug v databázi

vanaveno
Člen | 144
+
0
-

Dobrý den,
tak se prokousávám začátky a i když to jde pomalu, tak s přestávkami, jsem si za měsíc postavil tento blog.

http://netteblog-us.svethostingu-tmp.cz/…yfilter/show?…

Nemá ještě dořešeny přátelské url. Pročetl jsem si dokumentaci a prohledal forum, ale zatím nevím jak na to. Každý post a kategorie má v databázi tabulku 'slug", kam se zapisují přátelské url v podobě neco-url-o-necem. V blogu jsem si vytvořit přes továrničku menu ke kategoriím (Kategorie 1, Kategorie 2). Rád bych, aby když klient klikne na odkaz např. Kategorie 1, se url v prohlížeči skládala takto.

http://netteblog-us.svethostingu-tmp.cz/…/slug-clanku

Momentálně mi ta kategorie odkazuje na prezenter categoryfilter, název toho prezenteru v url nechci, chtěl bych tam pouze url názvu kategorie. Když kliknu na odkaz článku, který mi vypíše kategorie např:

http://netteblog-us.svethostingu-tmp.cz/post/show?…

Rád bych aby se odkaz skládal takto

http://netteblog-us.svethostingu-tmp.cz/…e-1/1-clanek

Lze to nějak nebo budu muset překopat prezentery postu a categoryfilter?

Děkuji za každou radu
Vana

Petr Parolek
Člen | 455
+
0
-

Snad tgi pomůže mé staré řešení https://forum.nette.org/…rze-v-adrese

vanaveno
Člen | 144
+
0
-

Díky za reakci. Vapadá to, že to je to co hledám. Tedy jestli dobře chápu, že to podstrčí cestu k artiklu i kategorii a název prezenteru a detailu se schová.

Například
www.mujweb.cz/…anek-o-nicem

ppar napsal(a):

Snad tgi pomůže mé staré řešení https://forum.nette.org/…rze-v-adrese

vanaveno
Člen | 144
+
0
-

Překopíroval jsem tvoje staré vlákno sem, abych na to lépe viděl. Líbí se mi na tom ty zvýrazňovače kódu.

V modelu mám metody:

Tady nechápu jestli pro to musím udělat soubor model?

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:

*
Tohle hodit asi do BasePresenteru*

$this->template->path = $this->database->fetchPath($catId);
<a href="{link Article:show $path,$article->id}-{$article->slug}">{$article->title}</a>

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;
}

Algoritmus by mal byť asi

A tohle je správné řešení celého problému?

$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));

Editoval vanaveno (6. 1. 2019 23:49)