- Przyjazne adresy dla wyszukiwarek “SEF URL” w Joomli
- Podmiana polskich znaków w aliasach i adresach
- Polskie znaki w adresach
- Naprawianie już istniejących aliasów
Joomla 1.5 ma opcję tworzenia przyjaznych adresów dla wyszukiwarek (ang. SEF URL’s – Search Engine Friendly URL’s) jednakże posiada ona pewną niedoróbkę związaną z tworzeniem aliasów dla tytułów zawierających polskie znaki. Przy tworzeniu aliasu dla tytułu Joomla opuszcza po prostu wszystkie polskie znaki przykładowo nasz artykuł jest zatytułowany
“Pchnąć w tę łódź jeża lub ośm skrzyń fig”
powinien zostać przekształcony w alias w postaci tranliterowanej
pchnac-w-te-lodz-jeza-lub-osm-skrzyn-fig
lub z rzeczywistymi polskimi znakami
pchnąć-w-tę-łódź-jeża-lub-ośm-skrzyń-fig
natomiast domyślnie Joomla tworzy nam taki oto alias
pchn-w-t-od-jea-lub-om-skrzy-fig
przez co staje się nieczytelny i nie jest zgodny z oryginałem oraz traci swoje znaczenie.
Wersje Joomli 1.6 oraz Joomla 1.7 są wolne od tego braku i tworzą one poprawne aliasy.
Jak na razie adresy powinny składać się tylko ze znaków z tablicy ASCII a polskie ogonki powinny zostać zamienione na ich graficzne odpowiedniki bez nich np. ę > e itd. W adresach nie powinno być spacji ani innych znaków niedrukowanych są zastępowane przez myślniki. Polskie znaki mogą występować w adresie ale zaleca się aby strona w takim wypadku pracowała w kodowaniu UTF-8 np. Joomla.
Aktywowanie przyjaznych adresów w Joomli
Nasz serwer musi mieć załadowany i uruchomiony moduł mod_rewrite na serwerze Apache. Następnie w głównym katalogu Joomli umieszczamy plik .htaccess o treści:
# @version $Id: htaccess.txt 21064 2011-04-03 22:12:19Z dextercowley $ #Zakomentuj poniższą linie jeśli pojawiają się błędy Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR] RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule .* index.php [F] #Odkomentuj i ustaw odpowiednio poniższą linię jeśli korzystasz z wirtualnych folderów #RewriteBase / RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{REQUEST_URI} !^/index\.php RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw))$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [L] |
lub zmieniamy nazwę htaccess.txt dostarczanego w paczce.
Potem przechodzimy na Zaplecze lub jak kto woli do panelu administratora, wybieramy kolejno Witryna ≫ Konfiguracja i w sekcji Optymalizacja dla wyszukiwarek widzimy ustawienia, które nas interesują:
Kolejne opcje:
- Proste adresy – czy stosować przyjazne adresy, wybieramy “Tak”
- Korzystaj z mod_rewrite – jeśli dodaliśmy odpowiednie wpisy w .htaccess to zaznaczamy “Tak” (zalecane: “Tak”)
- Adresy z przyrostkiem – decyduje o tym czy dodawać na końcu adresu suffix odpowiadający typowi dokumentu. Dla zwykłych podstron byłby to .html (takie rozszerzenie pliku w adresach, decyzja dowolna)
Po wybraniu odpowiednich opcji kliknij w prawym górnym rogu Zapisz lub Zastosuj.
Polskie znaki w aliasach Joomli
Ażeby poprawić tworzenie aliasów w Joomli i polskie znaki były zamieniane na swoje odpowiedniki bez ogonków należy zmodyfikować jeden plik. Poniższą funkcję sam stworzyłem, transliteruje ona dużo więcej niźli tylko polskie znaki np. niemieckie znaki. Tablice są zapisane w formacie szesnastkowym dzięki czemu przy modyfikacji pliku nie musisz pamiętać aby zapisywać go w kodowaniu UTF-8 (bo dla tego kodowania są stworzone tablice).
Otwórz plik filteroutput.php znajdujący się w katalogu /libraries/jooml/filter/. Znajdź w nim:
function stringURLSafe($string) { //remove any '-' from the string they will be used as concatonater $str = str_replace('-', ' ', $string); $lang =& JFactory::getLanguage(); $str = $lang->transliterate($str); // remove any duplicate whitespace, and ensure all characters are alphanumeric $str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str); // lowercase and trim $str = trim(strtolower($str)); return $str; } |
a następnie zamień na:
function stringURLSafe($string) { $map1 = array( "\xc4\x84", "\xc5\x81", "\xc4\xbd", "\xc5\x9a", "\xc2\xa7", "\xc5\xa0", "\xc5\x9e", "\xc5\xa4", "\xc5\xb9", "\xc5\xbd", "\xc5\xbb", "\xc4\x85", "\xc5\x82", "\xc4\xbe", "\xc5\x9b", "\xc5\xa1", "\xc5\x9f", "\xc5\xa5", "\xc5\xba", "\xc5\xbe", "\xc5\xbc", "\xc5\x94", "\xc3\x81", "\xc3\x82", "\xc4\x82", "\xc3\x84", "\xc4\xb9", "\xc4\x86", "\xc3\x87", "\xc4\x8c", "\xc3\x89", "\xc4\x98", "\xc3\x8b", "\xc4\x9a", "\xc3\x8d", "\xc3\x8e", "\xc4\x8e", "\xc4\x90", "\xc5\x83", "\xc5\x87", "\xc3\x93", "\xc3\x94", "\xc5\x90", "\xc3\x96", "\xc3\x97", "\xc5\x98", "\xc5\xae", "\xc3\x9a", "\xc5\xb0", "\xc3\x9c", "\xc3\x9d", "\xc5\xa2", "\xc3\x9f", "\xc5\x95", "\xc3\xa1", "\xc3\xa2", "\xc4\x83", "\xc3\xa4", "\xc4\xba", "\xc4\x87", "\xc3\xa7", "\xc4\x8d", "\xc3\xa9", "\xc4\x99", "\xc3\xab", "\xc4\x9b", "\xc3\xad", "\xc3\xae", "\xc4\x8f", "\xc4\x91", "\xc5\x84", "\xc5\x88", "\xc3\xb3", "\xc3\xb4", "\xc5\x91", "\xc3\xb6", "\xc5\x99", "\xc5\xaf", "\xc3\xba", "\xc5\xb1", "\xc3\xbc", "\xc3\xbd", "\xc5\xa3", ); $map2 = array( "\x41", "\x4c", "\x4c", "\x53", "\x53", "\x53", "\x53", "\x54", "\x5a", "\x5a", "\x5a", "\x61", "\x6c", "\x6c", "\x73", "\x73", "\x73", "\x74", "\x7a", "\x7a", "\x7a", "\x52", "\x41", "\x41", "\x41", "\x41", "\x4c", "\x43", "\x43", "\x43", "\x45", "\x45", "\x45", "\x45", "\x49", "\x49", "\x44", "\x44", "\x4e", "\x4e", "\x4f", "\x4f", "\x4f", "\x4f", "\x78", "\x52", "\x55", "\x55", "\x55", "\x55", "\x59", "\x54", "\x73\x73", "\x72", "\x61", "\x61", "\x61", "\x61", "\x6c", "\x63", "\x63", "\x63", "\x65", "\x65", "\x65", "\x65", "\x69", "\x69", "\x64", "\x64", "\x6e", "\x6e", "\x6f", "\x6f", "\x6f", "\x6f", "\x72", "\x75", "\x75", "\x75", "\x75", "\x79", "\x74", ); $string = str_replace($map1, $map2, $string); $string = strtolower($string); $string = preg_replace('#[\\W]{1,}#', '-', $string); $string = trim($string, '-'); return $string; } |
Zapisz plik i wyślij na serwer FTP, zamień za dotychczas istniejący. Od tej pory wszystkie nowe aliasy będą poprawnie tworzone z podmienionymi polskimi znakami.
Rzeczywiste polskie znaki w adresach Joomli
Jeśli chcesz aby polskie znaki wyświetlały się w pasku adresu to skorzystaj z tej opcji. Będą akceptowane wszystkie znaki z tablicy $map1 = array();
, aktualnie obsługuje ona znaki w języku:
- polskim
- słoweńskim
- bośniackim
- węgierskim
- słowackim
- serbsko–chorwackim
- czeskim
- chorwackim
- rumuńskim
- górno oraz dolnołużyckim
- serbskim (w transkrypcji łacińskiej)
Mimo tego, że tablica ta pokrywa znakami diakrytycznymi z kodowania ISO-8859-2 a kodowanie to z definicji nie wspiera języka niemieckiego to i tak pokrywa wszystkie znaki z tegoż języka. W skrócie: obsługuje także niemieckie znaki.
Tak jak wyżej otwórz plik /libraries/joomla/filter/filteroutput.php i odszukaj:
function stringURLSafe($string) { //remove any '-' from the string they will be used as concatonater $str = str_replace('-', ' ', $string); $lang =& JFactory::getLanguage(); $str = $lang->transliterate($str); // remove any duplicate whitespace, and ensure all characters are alphanumeric $str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str); // lowercase and trim $str = trim(strtolower($str)); return $str; } |
podmień na:
function stringURLSafe($string) { $map1 = array( "\xc4\x84", "\xc5\x81", "\xc4\xbd", "\xc5\x9a", "\xc2\xa7", "\xc5\xa0", "\xc5\x9e", "\xc5\xa4", "\xc5\xb9", "\xc5\xbd", "\xc5\xbb", "\xc4\x85", "\xc5\x82", "\xc4\xbe", "\xc5\x9b", "\xc5\xa1", "\xc5\x9f", "\xc5\xa5", "\xc5\xba", "\xc5\xbe", "\xc5\xbc", "\xc5\x94", "\xc3\x81", "\xc3\x82", "\xc4\x82", "\xc3\x84", "\xc4\xb9", "\xc4\x86", "\xc3\x87", "\xc4\x8c", "\xc3\x89", "\xc4\x98", "\xc3\x8b", "\xc4\x9a", "\xc3\x8d", "\xc3\x8e", "\xc4\x8e", "\xc4\x90", "\xc5\x83", "\xc5\x87", "\xc3\x93", "\xc3\x94", "\xc5\x90", "\xc3\x96", "\xc3\x97", "\xc5\x98", "\xc5\xae", "\xc3\x9a", "\xc5\xb0", "\xc3\x9c", "\xc3\x9d", "\xc5\xa2", "\xc3\x9f", "\xc5\x95", "\xc3\xa1", "\xc3\xa2", "\xc4\x83", "\xc3\xa4", "\xc4\xba", "\xc4\x87", "\xc3\xa7", "\xc4\x8d", "\xc3\xa9", "\xc4\x99", "\xc3\xab", "\xc4\x9b", "\xc3\xad", "\xc3\xae", "\xc4\x8f", "\xc4\x91", "\xc5\x84", "\xc5\x88", "\xc3\xb3", "\xc3\xb4", "\xc5\x91", "\xc3\xb6", "\xc5\x99", "\xc5\xaf", "\xc3\xba", "\xc5\xb1", "\xc3\xbc", "\xc3\xbd", "\xc5\xa3", ); $map1 = implode('', $map1); $string = mb_strtolower($string, 'UTF-8'); $string = preg_replace('#[^\\w' . $map1 . ']{1,}#', '-', $string); $string = trim($string, '-'); return $string; } |
Teraz nowe aliasy będą zawierały polskie znaki co jednocześnie spowoduje wyświetlanie polskich znaków w pasku adresu przeglądarki. Mogą występować pewne błędy związane z serwerem, ale nie powinny.
Naprawianie aliasów w Joomli
Zacznij od poprawienia funkcji, zgodnie z wytycznymi wyżej. Potem możesz skasować alias i kliknąć Zapisz lub Zastosuj, zostanie utworzony nowy poprawny. Jest to czasochłonne dlatego też napisałem skrypt, który zaktualizuje wszystkie aliasy automatycznie alias-updater.php na razie nie posiada żadnych limitów dlatego może się wysypać. Poprawia aliasy w tabelach w bazie zawartych w tablicy $tables = array()
, jeśli jakiejś brakuje to napisz.
Jeśli chcesz aby poprawił na konkretny format to zamień w nim funkcję stringURLSafe()
na którąś z tego wpisu, domyślnie podmienia polskie znaki na czyste odpowiedniki.
Zapisz plik jako alias-updater.php, wgraj do głównego folderu Joomli, wywołaj ten plik i gotowe.
- Wersja 1.0 – brakuje limitowania zapytań oraz możliwe braki tabel do poprawienia
25.02.2012 at 02:21
Dobra robota! Dzieki!
02.10.2015 at 12:36
…super, człowieku zrobiłeś dobrą robotę… , należą się duże słowa uznania…pozdrawiam