Zdravím fórum a mám dotaz, zda je přirozené, že se v Moodlu země ve výběrovém listboxu na stránce registrace uživatelů zobrazují ve špatném pořadí.
Ohákovaná písmena (tedy i Českou republiku) tam mám až pod Z, takže někteří uživatelé ji považují za nenalezitelnou, a pak mi tam vyplňují různé Angory, Afghánistány, Barmy atd.
Napadlo mě, že by to mohlo být špatným collation, které je u některých tabulek utf8_czech_ci (defaultní nastaveni databáze), ale u některých utf_unicode_ci (k čemuž asi došlo kdysi při upgradu verzí, jinak si to nedovedu vysvětlit).
Nevíte, ve které tabulce by ten seznam zemí z toho listboxu mohl být?
Moodle 1.8.2+ na Debianu, mySQL 5.032, PHP 5.2.0.8.11
Díky za rady a podněty
Jakub Šerých
To je častá chyba a popravdě přesně nevím, čím to je. Ale seznam zemí se dle mě načítá z jazykového baličku a ne z databáze (collation si nicméně opravte, tím nic nezkazíte).
Pokud je za řazení zemí z jazykového balíčku zodpovědné PHP, bude řazení ovlivněné nastavením locales. Možná je potřeba rozšíření mbstring? Opravdu teď jen hádám.
--mudrd8mz
Pokud je za řazení zemí z jazykového balíčku zodpovědné PHP, bude řazení ovlivněné nastavením locales. Možná je potřeba rozšíření mbstring? Opravdu teď jen hádám.
--mudrd8mz
Super tip! Zoznam zemi sa nacitava z jazykoveho balicku zo suboru countries.php.
Chybne radenie sposobuje zle (resp. nevhodne) nastavenie locales. V pripade, ze nastavim napr. en_US tak to bude zoradovat tak ako pisete.
Ked nastavim cs_CZ tak budu tie s 'hackami' prve. No nemusia to aspon hladat
No a nakoniec nastavenie locale na cs_CZ.UTF-8 ponukne spravne abecedne zoradenie.
Locale sa v moodle definuje v Administratíva / ▶ Jazyk / ▶ Jazykové nastavenia / Premenná locale
peter
Chybne radenie sposobuje zle (resp. nevhodne) nastavenie locales. V pripade, ze nastavim napr. en_US tak to bude zoradovat tak ako pisete.
Ked nastavim cs_CZ tak budu tie s 'hackami' prve. No nemusia to aspon hladat
No a nakoniec nastavenie locale na cs_CZ.UTF-8 ponukne spravne abecedne zoradenie.
Locale sa v moodle definuje v Administratíva / ▶ Jazyk / ▶ Jazykové nastavenia / Premenná locale
peter
Podle dokumentace by ale locale v nastavení instalace mělo zůstat prázdné, protože přinejmenším od 1.8 je locale definováno přímo v každém jazykovém balíčku (v souboru langconfig.php), a nemá tedy smysl nastavovat ho natvrdo pro celý server (předpokládá se – předpokládám ;) –, že se změnou jazyka si uživatel přepíná i způsob řazení).
Chyba je (byla) přímo ve funkci pro řazení zemí. V souboru lib/moodlelib.php hledejte funkci get_list_of_countries(). Pro větev 1.8 STABLE je pro řazení seznamu použita funkce asort($string), kdežto ve větvi 1.9 STABLE je od verze souboru 1.960.2.39 použita funkce uasort($string, 'strcoll'). Přenesete-li řádek z větve 1.9 do souboru z větve 1.8, bude řazení fungovat správně i v Moodlu 1.8.x.
Chyba je (byla) přímo ve funkci pro řazení zemí. V souboru lib/moodlelib.php hledejte funkci get_list_of_countries(). Pro větev 1.8 STABLE je pro řazení seznamu použita funkce asort($string), kdežto ve větvi 1.9 STABLE je od verze souboru 1.960.2.39 použita funkce uasort($string, 'strcoll'). Přenesete-li řádek z větve 1.9 do souboru z větve 1.8, bude řazení fungovat správně i v Moodlu 1.8.x.
>Pro větev 1.8 STABLE je pro řazení seznamu použita funkce asort($string), kdežto ve větvi 1.9 STABLE je od verze souboru 1.960.2.39 použita funkce uasort($string, 'strcoll'). Přenesete-li řádek z větve 1.9 do souboru z větve 1.8, bude řazení fungovat správně i v Moodlu 1.8.x.
Trefa do černého, už to fachá.
Díky moc
Jakub Šerých
Trefa do černého, už to fachá.
Díky moc
Jakub Šerých
Tak jsem z toho nějaký zmatený. Jednak to po změně locale v nastaveni Moodlu nadále nefunguje a jednak jsem v celém adresáři moodlu našel jediný soubor countries.php a sice v lang/en_utf8/ a v něm sice skutečně jsou země, ale jen v angličtině, takže to ten moodle musí brát odněkud z jiného místa
Ale i tak díky za radu
Jakub Šerých
Ale i tak díky za radu
Jakub Šerých
Odkud to bere je jasné - z jazykového balíčku, který není v adresáři se zdrojáky Moodlu, ale jeho datovém adresáři - přesněji v
--mudrd8mz
$CFG->dataroot/lang/cs_utf8/countries.phpVe vašem případě bych se řídil Danovou radou a upravil si zdrojový kód funkce get_list_of_countries()
--mudrd8mz
No je pravda, ze som to skusal na moodle 1.9 (neuvedomil som si ze mate 1.8).
Subor countries.php daneho jazyka treba hladat v moodledata.
peter
Subor countries.php daneho jazyka treba hladat v moodledata.
peter
Tak mám stejný problém, akorát na verzi 1.9.4+ (20090225) běžící na linuxu.
Stejná verze instalace na Windows stroji řadí země bez problémů, tak bych to přičítal nějakému nastavení dané instalace.
Nenapadne, prosím, někoho po čem se koukat? Zřejmě to bude souviset s nastavením PHP nebo Apache?
Stejná verze instalace na Windows stroji řadí země bez problémů, tak bych to přičítal nějakému nastavení dané instalace.
Nenapadne, prosím, někoho po čem se koukat? Zřejmě to bude souviset s nastavením PHP nebo Apache?
Apache httpd do toho určitě nemluví, php nejspíš taky ne. Jaké máte nastavení systému?
$ locale
LANG=cs_CZ.UTF-8
LC_CTYPE="cs_CZ.UTF-8"
...