Jak automaticky na SEO permalinky (URI) článků?
Technologie
22.04.04
Víťa Marabu se měl ptal po ICQ, jak na SEO odkazy. Nucleus CMS má plně automatické generování SEO odkazů článků, a starají se o to 2 jednoduché funkce.
Konkrétní postup:
function iso2ascii($s){ $iso="áčďéěíĺľňóřšťúůýžäëöüÁČĎÉĚÍĹĽŇÓŘŠŤÚŮÝŽÄËÖÜ"; $asc="acdeeillnorstuuyzaeouACDEEILLNORSTUUYZAEOU"; return strtr($s,$iso,$asc); } function _makefancyTitle($title) { $title = strtolower(iso2ascii(strip_tags(trim($title)))); preg_match_all('/[a-zA-Z0-9]+/', $title, $nt); return strtolower(implode('-', $nt[0])); }
PS: Víťa potřeboval konverzi i azbuky, není problém si funkci iso2ascii() uzpůsobit a doplnit i o azbuku ;)
function makeurl ($string) {
$string = trim ($string);
$string = strtr ($string,
"áčďéěíňöóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ _",
"acdeeinoorstuuyzacdeeinorstuuyz--");
$string = ereg_replace ('[^A-Za-z0-9 -]', '', $string);
$string = strtolower ($string);
return $string;
}
Jak vidno funkce je identicka. Tenhle problem vznika v situaci kdy neni jasne co vlastne prijde - cestina, rustina... takze to jede v utf-8 a jakakoli konverze bude ztratova. To jen tak na vysvetleni :)
[1] ty funkce jsou podobný, ale.. ta moje převádí víc diakritiky na ASCII a taky dává místo mezer mezi slova pomlčky ;)
[2] Mezery jsou osetrene uz v strtr :)
a jak potom z url zjistujes o ktery clanek se jedna? nejakym modrewritem? a nebo je to pro kazdy clanek soubor v adresari item, kterej se o zobrazeni stara?
mod_rewrite [4]
[4] jasně, mod-rewrite, v DB mám tabulku, kde k SEO URI článku je přiřazeno jeho id... včetně historie názvů, pokud změním název článku, ten starý se ukládá..
[6] A slo by to nejak i bez mod_rewrite, aniz bych musel nazev predavat jako get parametr? A ma vubec takove predavani parametrem smysl?
[7] teď moc nerozumím otázce?
mimochodem, na něco stačí jen .htaccess: ;)
<FilesMatch "^item$">
ForceType application/x-httpd-php
</FilesMatch>
a potom vytvořím soubor item (bez přípony!):
<?php
$data = explode("/",serverVar('PATH_INFO'));
$title = $data[intval(1)];
$query = 'SELECT iblog, inumber FROM '.sql_table('item').' WHERE iurltitle='' . $title . '' ';
$res = sql_query($query);
if ($obj = mysql_fetch_object($res)){
// article found
$blogid = $obj->iblog;
$itemid = $obj->inumber;
}
selector();
?>
[8] Kdyz nemohu pouzit mod_rewrite, existuje moznost, ze seo odkaz budu tvorit ve tvaru domena.cz/index.php?spot=seo-nazev-clanku. Pak je vse bez problemu, az na to, ze si nejsem jisty, za seo nazev ma smysl(pro vyhledavace), kdyz je ulozeny jako hodnota promenne spot.
Existuje tedy moznost, ze bych odkaz generoval ve zvaru domena.cz/seo-nazev-clanku.html a dostal se k tomu nazvu, aniz bych pouzil mod_rewrite?
Jiste, existuje ta moznost s
<FilesMatch "^item$">
ForceType application/x-httpd-php
</FilesMatch>
ale zas to neni mozne pouzit pro dokumenty v rootu serveru.
[9] no, ten příklad, který jsem Vám psal, na ten NEPOTŘEBUJETE mod_rewrite, stačí podpora .htaccess..
Nechápu, proč se ve všech návrzích objevuje prvně převod na asci a až potom na malá písmena. Kdyby to bylo naopak, tak by se nemuselo měnit tolik znaků a dle mého laického názoru by to bylo o něco rychlejší.
Nuz tak jsme vcera s Radkem dospeli k tomu ze asi nema smysl pro jazyky pisici nelatinkou vyrabet podobne odkazy. I kdyby se totiz podarilo slovo z rustiny prepsat do latinky, nebude to davat smysl v latince... napr. o korejstine, kantonstine a podobnych ani nemluve. Tedy - ne ze by to neslo ale asi to nema smysl protoze ti lidi nehledaji dle fonetiky.
Takze pro podobne jazyky je asi nejsnazsi proste nechat autora pojmenovat ten clanek jak uzna za vhodne v latince.
[11] protože není jasné, zda strtolower() převede korektně třeba Ĺ na ľ ;)
[13] Nepletu-li se, tak to by se mělo vyřešit vhodným nastavením "setlocale" viz:
http://cz.php.net/manual/cs...
[14] jo, teorie taková je, praxe je ale trošku jiná..
[11] >> bylo o něco rychlejší
když u auta odstraníte boční zrcátka, tak bude dle mého laického názoru taky o něco rychlejší :-)
Ale vážně: použití scriptovacích jazyků, špatně navržené algoritmy nebo chybějící indexy v databázích jsou tím, co program zpomalí znatelně. Oproti tomu jsou záměny pár znaků nicotné operace.
[9] Nemáte-li přístup k .htaccess, tak prostě pište example.com/item.php/seo-nazev-clanku
[16] >> když u auta odstraníte boční zrcátka, tak bude dle mého laického názoru taky o něco rychlejší
Jde o to, jaké auto to je. To, které má překonat rychlostní rekordy je mít nebude. Ale samozřejmě máte pravdu; v běžných aplikacích to asi nikdo nepozná.