Přihlášení

registrace ~ obnova hesla

MyEgo.cz › Jak automaticky na SEO permalinky (URI) článků? .

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

Thursday, 22.04.04 - Technologie - autor: Radek Hulán

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

Thursday, 22.04.04 - Technologie - autor: Radek Hulán - 6526x

Komentáře:

  1. [1] Vita/Marabu 212.96.178.68

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

    odpověz na tento komentář
    1. na komentář reagoval Radek Hulán — #2
    karma: 0 Thursday, 22.04.04, 02:26:59
  2. [2] Radek Hulán

    odpovídá na Vita/Marabu — #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 ;)

    odpověz na tento komentář
    1. na komentář reagoval Vita/Marabu — #3
    karma: 10 Thursday, 22.04.04, 02:37:03
  3. [3] Vita/Marabu 212.96.178.68

    odpovídá na Radek Hulán — #2 Mezery jsou osetrene uz v strtr :)

    odpověz na tento komentář karma: 0 Thursday, 22.04.04, 07:25:17
  4. [4] Milan Kryl kryl.kolej.mff.cuni.cz

    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?

    odpověz na tento komentář
    1. na komentář reagoval #lama — #5
    2. na komentář reagoval Radek Hulán — #6
    karma: 0 Thursday, 22.04.04, 08:34:56
  5. [5] #lama r3e61.mistral.cz

    mod_rewrite odpovídá na Milan Kryl — #4

    odpověz na tento komentář karma: 0 Thursday, 22.04.04, 13:57:01
  6. [6] Radek Hulán

    odpovídá na Milan Kryl — #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á..

    odpověz na tento komentář
    1. na komentář reagoval David — #7
    karma: 10 Thursday, 22.04.04, 14:15:05
  7. [7] David snat.czfree.net

    odpovídá na Radek Hulán — #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?

    odpověz na tento komentář
    1. na komentář reagoval Radek Hulán — #8
    karma: 0 Thursday, 22.04.04, 19:41:36
  8. [8] Radek Hulán

    odpovídá na David — #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();
    ?>

    odpověz na tento komentář
    1. na komentář reagoval David — #9
    karma: 10 Thursday, 22.04.04, 19:51:32
  9. [9] David snat.czfree.net

    odpovídá na Radek Hulán — #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.

    odpověz na tento komentář
    1. na komentář reagoval Radek Hulán — #10
    2. na komentář reagoval dgx — #16
    karma: 0 Thursday, 22.04.04, 20:15:18
  10. [10] Radek Hulán

    odpovídá na David — #9 no, ten příklad, který jsem Vám psal, na ten NEPOTŘEBUJETE mod_rewrite, stačí podpora .htaccess..

    odpověz na tento komentář karma: 10 Thursday, 22.04.04, 20:52:06
  11. [11] Martin - Techblog 194.108.100.66

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

    odpověz na tento komentář
    1. na komentář reagoval Radek Hulán — #13
    2. na komentář reagoval dgx — #16
    karma: 0 Thursday, 22.04.04, 21:38:02
  12. [12] Vita/Marabu 212.96.178.68

    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.

    odpověz na tento komentář karma: 0 Thursday, 22.04.04, 21:45:40
  13. [13] Radek Hulán

    odpovídá na Martin - Techblog — #11 protože není jasné, zda strtolower() převede korektně třeba Ĺ na ľ ;)

    odpověz na tento komentář
    1. na komentář reagoval Martin - Techblog — #14
    karma: 10 Thursday, 22.04.04, 21:59:19
  14. [14] Martin - Techblog 194.108.100.66

    odpovídá na Radek Hulán — #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...

    odpověz na tento komentář
    1. na komentář reagoval Radek Hulán — #15
    karma: 0 Thursday, 22.04.04, 22:35:07
  15. [15] Radek Hulán

    odpovídá na Martin - Techblog — #14 jo, teorie taková je, praxe je ale trošku jiná..

    odpověz na tento komentář karma: 10 Thursday, 22.04.04, 23:16:49
  16. [16] dgx g207.brno.mistral.cz

    odpovídá na Martin - Techblog — #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.

    odpovídá na David — #9 Nemáte-li přístup k .htaccess, tak prostě pište example.com/item.php/seo-nazev-clanku

    odpověz na tento komentář
    1. na komentář reagoval Martin - Techblog — #17
    karma: 0 Thursday, 22.04.04, 23:25:18
  17. [17] Martin - Techblog 194.108.100.69

    odpovídá na dgx — #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á.

    odpověz na tento komentář karma: 0 Friday, 23.04.04, 22:43:47

Přidejte nový komentář:

Pro přidání komentáře a hlasování se musíte nejdříve zaregistrovat nebo přihlásit.

Pes hra