SEO přátelské url za pomocí slug v databázi
- vanaveno
- Člen | 144
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
- vanaveno
- Člen | 144
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
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)