Generování SEO rout se zachováním ID v URL a tahání názvů z DB, jde to jednoduše?
- forkman
- Člen | 72
Potřeboval bych nějakou jednoduchou SEO optimalizaci na e-shopu, který jsem dělal na Nette, dřív, když jsem to dělal ručně, tak to vypadalo nějak následovně http://example.com/…uktu/pid-157, nebo http://example.com/…gorie/cid-27 s tím, že název kategorie a položky bylo vytáhnutý název z DB a bylo to „zwebalizované“. SimpleSeoRouter od Honzy tvrdíka bohužel použít nelze, protože nemůžu zajistit unikátnost názvů položek a kategorií.
Takže moje otázka: Jde nějak jednoduše použít třídu Route a doplnit do URL „webalizovaný“ název vytažený z databáze/pole/cache? podle ID v generovaném odkazu?
Prošel jsem si všechny témata na fóru, ale nic z toho nesedělo na můj problém. Předem dík za rady.
- Foowie
- Člen | 269
Něco najít lze … a je to i v dokumentaci ale trošku jinak podané ;)
Editoval Foowie (14. 6. 2010 13:55)
- forkman
- Člen | 72
Dík za nakopnutí, ale bohužel mi to úplně nestačí :-) Nevím, jestli to takhle vůbec může fungovat, ale když zapíšu tu routu takhle, tak se mi namatchne a odkazy se vygenerují podle poslední nejobecnejší routy
<?php
Route::addStyle('seo');
Route::setStyleProperty('seo', Route::FILTER_OUT, callback('Items::getName'));
$router[] = new Route('produkt/<seo>/pid-<id>', array(
'module' => 'Front',
'presenter' => 'Polozky',
'action' => 'detail',
'seo' => NULL,
'id' => NULL,
));
$router[] = new Route('<presenter>/<action>/<id>', array(
'module' => 'Front',
'id' => NULL
));
?>
- forkman
- Člen | 72
Tak to bude asi tím, že jsem to špatně pochopil :-) parametr seo tam totiž vůbec nemám a potřeboval bych ho vyrobit z databáze. Pokud pomocí callback funkce přepíšu původní ID, klidně si ho můžu dát do adresy, ale pak bych tam potřeboval dát ještě původní číselné ID a to už nevím jak na to.
Chtěl bych něco jako tohle:
<?php
Route::addStyle('#seo');
Route::setStyleProperty('#seo', Route::FILTER_OUT, callback('Items::getName'));
$router[] = new Route('produkt/pid-<id>/<id #seo>', array(
'module' => 'Front',
'presenter' => 'Polozky',
'action' => 'detail',
'seo' => NULL,
'id' => NULL,
));
?>
Podle čeho vůbec callback fce dostane parametr?
- Foowie
- Člen | 269
On to má být callback na filtr. (jako parametr dostane položku id a returnem to vrátí upravený výsledek)
Možná bych tam seo ani nedával. Místo toho bych použil styl na id, něco jako:
function getName($id) {
$seo = Items::getName($id);
return "pid-" . $id . "/" . $seo;
}
a pak ještě funkci getId která bude jako Route::FILTER_IN
a
vyextrahuje ID :) .
PS: nevím, jestli nebude dělat to lomítko problémy. Místo něho bych možná použil nějaký jiný znak, případně jde na to napsat regexp pro sprývný match části adresy. Vyzkoušej a napiš ;)