Cze¶æ.
Ale siê namêczy³e¶!.
Ale to dobrze. Doceniam ludzi którzy sami dochodz± do rozwi±zania jakiego¶ problemu. Tylko szkoda Twojej pracy, bo ten sam efekt uzyska³by¶ Ty, i ka¿dy kto ma "
pytajniki" zamiast polskich znaków, modyfikuj±c jeden plik.
A jaki?. Nazywa siê on "
database.php" i znajduje siê w g³ównym katalogu
Joomla o nazwie "
includes". W poprzednich wersjach ten plik od linii
100 mia³ taki kod:
ORYGINALNY KOD z pliku "
database.php" w
Joomla 1.0.11:
Kod: |
$this->_table_prefix = $table_prefix;
//@mysql_query("SET NAMES 'utf8'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
Widzimy tutaj, ¿e ¿e za podwójnym uko¶nikiem ( slashem ) mamy wysy³ane zapytanie do bazy za pomoc± kwerendy
SET NAMES. Za pomoc± tej prostej kwerendy (
SET NAMES 'utf8') mo¿na wymusiæ aby wszelkie napisy by³y odsy³ane do klienta w wybranym formacie (tu:
utf8). Czyli system kodowania znaków dla po³±czenia
Baza SQL->Twój serwer. Ale jak sam widzisz, jest to
zneutralizowane zapytanie, poprzez uko¶niki po to, aby nie wp³ywaæ na domy¶lne ustawienia serwera
MySQL. Tak dzia³o siê do oficjalnej wersji
Joomla 1.0.12.
Natomiast w przypadku
Joomla 1.0.13 ISO kto¶ celowo zrobi³ wymuszenie zmiany kodowania dla
Systemu porównañ dla po³±czenia MySQL, ale tym razem na
Latin2, co jest niepoprawne ( no chyba ¿e mamy bazê z takim zestawem znaków, ale to s± wyj±tki ) i powoduje efekt taki, ¿e wymusza to kodowanie, nie bacz±c na system kodowania domy¶lny
System porównañ dla po³±czenia MySQL w ca³ej bazie
SQL. Mo¿e to byæ przecie¿
UTF-8. Co nie przeszkadza, aby strona by³a w kodowaniu
ISO-8859-2, tak jak np. u mnie. Ja mam w bazie tak:
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8).
System porównañ dla po³±czenia MySQL: UTF-8 utf8_unicode_ci
Natomiast w tabelach we wszystkich polach mam "
Metoda porównywania napisów":
latin1_swedish_ci, czyli
ISO-8859-1.
Czyli nic zwi±zanego z
ISO-8859-2, a strona pracuje poprawnie w tymi zestawami porównañ i kodowania znaków. Podejrzewam ¿e pomys³odawca nastêpnej linijki kodu, ale ju¿ z
Joomla 1.0.13 ISO:
ORYGINALNY KOD z pliku "
database.php" w
Joomla 1.0.13 ISO:
Kod: |
$this->_table_prefix = $table_prefix;
@mysql_query("SET NAMES 'latin2'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
...kieruj±c siê tym, ¿e to jest
Joomla ISO, po prostu pope³ni³ b³±d, i wymusi³ na bazie przez wspomnian± wy¿ej kwerendê
SET NAMES, w tym przypadku
SET NAMES 'latin2', dla po³±czenia
Baza SQL->Twój serwer czyli - "
System porównañ dla po³±czenia MySQL", to kodowanie na
'latin2', czyli
ISO-8859-2. A ty masz w bazie np.
utf8_unicode_ci. I tym samym zrobi³ Ci "
kaszanê" w bazie
SQL. Mo¿e nie ¶wiadom skutków, które widzia³e¶ na swojej stronie. Dlatego co nale¿ny zrobiæ.
Zmodyfikowaæ powy¿szy kod w pliku "
database.php" po aktualizacji, lub jeszcze przed, starszej wersji
CMS-a za pomoc±
Joomla 1.0.13 ISO (
piszê o aktualizacji specjalnie, bo o instalacji bêdzie dalej ) na taki:
ZMODYFIKOWANY KOD w pliku "
database.php" w
Joomla 1.0.13 ISO:
Kod: |
$this->_table_prefix = $table_prefix;
//@mysql_query("SET NAMES 'latin2'", $this->_resource);
$this->_ticker = 0;
$this->_log = array();
|
...czyli zneutralizowanie zapytania do bazy
SQL, które to powoduje ca³e zamieszanie, To dzia³a
, sprawdza³em. Lepiej by³o by zrobiæ to w trybie
offline, przed zapisaniem "
Konfiguracji Globalnej Witryny". Bo je¶li dokonamy zapisu, a mamy sporo artyku³ów, to czeka nas kupa roboty z zamian±
pytajników na polskie znaki.
Najlepiej by³oby, ale tylko dla wersji instalacyjnej, nie aktualizacji w pliku "
install2.php" zmieniæ kod:
Kod: |
// Does this code actually do anything???
$configArray['DBhostname'] = $DBhostname;
$configArray['DBuserName'] = $DBuserName;
$configArray['DBpassword'] = $DBpassword;
$configArray['DBname'] = $DBname;
$configArray['DBPrefix'] = $DBPrefix;
//check SQL version
$charset = _DB_CHARSET;
$collate = _DB_COLLATE;
if(function_exists('version_compare')){
if(version_compare($database->getVersion(), '4.1.0') < 0){
echo "<script>alert('Your MySQL version is: ".$database->getVersion().". UTF-8 settings may not work properly on versions less than 4.0.');</script>";
$charset = '';
$collate = ';';
}
}
//Here we create the UTF-8 database
$sql = "CREATE DATABASE `$DBname` ".$charset.' '.$collate;
|
Na kompatybilny ze wcze¶niejszymi wersjami
Joomla, np tak:
Kod: |
// Does this code actually do anything???
$configArray['DBhostname'] = $DBhostname;
$configArray['DBuserName'] = $DBuserName;
$configArray['DBpassword'] = $DBpassword;
$configArray['DBname'] = $DBname;
$configArray['DBPrefix'] = $DBPrefix;
$sql = "CREATE DATABASE `$DBname`";
|
...ale nie wiem, czy np. ja uzyska³bym zgodê od Twórców
Joomla w Kapeluszu na takie przeróbki. Zapytam siê o to Szefa Projektu i pomys³odawcê,
Zwiastuna. A nó¿ pozwoli na tak± modyfikacje plików instalacyjnych. Wiem, ¿e ma z tymi, opisywanymi wy¿ej problemami sporo k³opotów na
Forum Joomla.pl. A jest cz³owiekiem inteligentnym, wiêc my¶lê ¿e powinno siê udaæ.
To tyle. Dla
Joomla 1.0.13 UTF sytuacja pewnie wygl±da podobne. Ale muszê to przetestowaæ. Pozdrawiam.
Jokris.