sNews i polskie krzaczki w URL

Jakiś czas temu mendax opisał na swoim blogu kilka alternatywnych CMSów, którymi warto byłoby się zainteresować. Jednym z nich był sNews. W komentarzach do tego wpisu pojawiła się informacja że ma on problemy z polskimi znakami w tytułach, a dokładniej z tworzeniem przyjaznych adresów na ich podstawie – polskie znaki są z nich usuwane. Ponieważ postanowiłem sam postawić kilka stronek na sNews, zainteresowałem się osobiście tą sprawą.

W wersji 1.7 sNews wyświetla pod polem do wpisywania tytułu dodatkowe pole, w którym na bieżąco podczas wpisywania tytułu pojawia się proponowany adres – oczywiście z usuniętymi polskimi znakami. Można więc ręcznie dodać brakujące literki. Lepiej jednak byłoby nie musieć tego robić.

Po przejrzeniu kodu tego CMSa znalazłem funkcję cleanSEF(), która odpowiada za tworzenie adresów URL. Znajduje się ona w pliku snews.php, od linii 3365. Aby sNews poprawnie zamieniał polskie znaki na ich odpowiedniki bez ogonków, należy ją zamienić na następującą wersję:

function cleanSEF($string) {
    $from = array('ą','ć','ę','ł','ń','ó','ś','ź','ż','Ą','Ć','Ę','Ł','Ń','Ó','Ś','Ź','Ż');
    $to   = array('a','c','e','l','n','o','s','z','z','A','C','E','L','N','O','S','Z','Z');
    $string = str_replace($from, $to, $string);
    $string = preg_replace('/[^a-zA-Z0-9_]/', ' ', $string);
    $string = trim($string);
    $string = preg_replace('/\s+/', '-', $string);
    return strtolower($string);
}

To wszystko – od tego momentu zamiast polskich znaków w adresach będą pojawiać się ich odpowiedniki bez ogonków.

Przy okazji moich testów okazało się też ze sNews nie radzi sobie dobrze na Windows – w adresie pojawiał się backslash, który powodował że adresy nie działały. Rozwiązaniem okazało się zamienianie backslashy na shashe w ścieżce do skryptu. W tym celu trzeba dodać jedną linię do funkcji site() (linia 39 w pliku snews.php), tak aby wyglądała następująco:

function site() {
    $host = 'http://'.$_SERVER['HTTP_HOST'];
    $directory = dirname($_SERVER['SCRIPT_NAME']);
    $directory = str_replace('\\', '/', $directory);
    $website = $directory == '/' ? $host.'/' : $host.$directory.'/';
    return $website;
}

This entry was posted on niedziela, Listopad 2nd, 2008 at 0:03 and is filed under Skrypty. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Jeden komentarz do “sNews i polskie krzaczki w URL”

  1. Pablo Says:

    Jak ja lubie jak cos jest wytlumaczone klarownie :-)

    Dzieki!

    Dobra uwaga: nalezy zapisac jako utf-8.

 

Dodaj komentarz

Zanim dodasz komentarz, zapoznaj się z zasadami korzystania z serwisu i polityką prywatności! Komentarze niezgodne z zasadami korzystania z serwisu będę usuwane.

Proszę pozostawić te dwa pola tak jak są: