Jak automaticky na SEO permalinky (URI) článků?

MyEgo.cz

home foto blogy mywindows.cz kontakt

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


Komentáře

  1. 1 Vita/Marabu 22.04.04, 02:04:26
    FB

    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 :)

  2. 2 Radek Hulán 22.04.04, 02:04:37
    FB

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

  3. 3 Vita/Marabu 22.04.04, 07:04:25
    FB

    [2] Mezery jsou osetrene uz v strtr :)

  4. 4 Milan Kryl 22.04.04, 08:04:34
    FB

    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?

  5. 5 Ondřej Kokeš 22.04.04, 01:04:57
    FB

    mod_rewrite [4]

  6. 6 Radek Hulán 22.04.04, 02:04:15
    FB

    [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á..

  7. 7 David 22.04.04, 07:04:41
    FB

    [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?

  8. 8 Radek Hulán 22.04.04, 07:04:51
    FB

    [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();
    ?>

  9. 9 David 22.04.04, 08:04:15
    FB

    [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.

  10. 10 Radek Hulán 22.04.04, 08:04:52
    FB

    [9] no, ten příklad, který jsem Vám psal, na ten NEPOTŘEBUJETE mod_rewrite, stačí podpora .htaccess..

  11. 11 Martin - Techblog 22.04.04, 09:04:38
    FB

    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ší.

  12. 12 Vita/Marabu 22.04.04, 09:04:45
    FB

    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.

  13. 13 Radek Hulán 22.04.04, 09:04:59
    FB

    [11] protože není jasné, zda strtolower() převede korektně třeba Ĺ na ľ ;)

  14. 14 Martin - Techblog 22.04.04, 10:04:35
    FB

    [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...

  15. 15 Radek Hulán 22.04.04, 11:04:16
    FB

    [14] jo, teorie taková je, praxe je ale trošku jiná..

  16. 16 dgx 22.04.04, 11:04:25
    FB

    [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

  17. 17 Martin - Techblog 23.04.04, 10:04:43
    FB

    [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á.