Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался) / 16 сообщений из 16, страница 1 из 1
05.04.2006, 11:02:37
    #33645498
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
Поставил joomla но сайт многоязычный поэтому еще и компонент Joomfish.
Есть таблица где текстовое поле в кодировке cp-1251, указываю после конекта
mysql_query("set NAMES='cp1251'");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251'");

это в классе database, который работает с БД в джумле.
Во фрон энде выводится все коректно.
А в бэкэнде в админке при редактировании и просмотре переводов в компоненте joomfish выводит знаками вопроса.
Посмотрел, там есть
class mlDatabase extends database
но он не переопределяет нигде кодировку. Задал в скрипте админки я еще указал кодировку. Просмотру и редактированию полегчало. Вижу русский язык.
Но сохраняет почему-то знаками вопроса.

Где еще рытся не представляю, русский вариант там сохраняется в таблице в поле специальном. Я проследил переменную с переводом вплоть до запроса. Она не меняет кодировку.
Кодировка на странице стоит windows-1251
...
Рейтинг: 0 / 0
05.04.2006, 11:55:06
    #33645705
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
На сколько я знаю достаточно конструкции SET NAMES cp1251 для того, что бы настроить кодировку и колейшен, т.е. конструкции
Код: plaintext
1.
2.
3.
mysql_query ("set character_set_client='cp1251'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251'");
не нужны. В люом случае проверить это можно так
Код: plaintext
1.
2.
SET NAMES cp1251;
SHOW VARIABLES;
Далее, насчет того, что криво сохраняется в базе. Что говорит
Код: plaintext
1.
2.
SHOW CREATE TABLE `имя таблицы`
и
SHOW VARIABLES

Думаю, что если никто из псетителей нашего форума не даст рац предложение, то есть смысл топик перенести в раздел MySQL. Подождем.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
05.04.2006, 12:32:54
    #33645882
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
дело в том что тут пока непонятно как она вообще сохраняет.
Вот как все произходит

файл admin.joomfish.php строка 227

код для сохраниения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
switch ($this->task) {

  case "save":

		saveTranslation( $joomFishManager, $language_id, $catid, $contentid, $mbfc_id );

		showTranslationOverview( $joomFishManager, $select_language_id, $catid );

		break;


функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
function saveTranslation( $joomFishManager, $language_id, $catid, $id, $mbfc_id ) {

	global $database, $mainframe;

	$actContentObject=null;	

	if( isset($catid) && $catid!="" ) {

		$contentElement = $joomFishManager->getContentElement( $catid );

		$actContentObject = new ContentObject( $language_id, $contentElement );

		$actContentObject->bind( $_POST );

		$actContentObject->store();

	}

}

function showTranslationOverview( $joomFishManager, $language_id, $catid ) {

	global $database, $mainframe, $option;

		mysql_query("set NAMES='cp1251'"); 
        mysql_query("set character_set_client='cp1251'"); 
		mysql_query("set character_set_results='cp1251'"); 
		mysql_query("set collation_connection='cp1251'");

	$limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit',  10  );

	$limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart',  0  );

	$search = $mainframe->getUserStateFromRequest( "search{$option}", 'search', '' );

	$search = $database->getEscaped( trim( strtolower( $search ) ) );



	// Build up the rows for the table

	$rows=null;

	$total= 0 ;

	if( isset($catid) && $catid!="" ) {

		$contentElement = $joomFishManager->getContentElement( $catid );

		$tranFilters = getTranslationFilters($catid,$contentElement);

		$database->setQuery( $contentElement->createContentSQL( $language_id, null, $limitstart, $limit,$tranFilters ) );

		$rows = $database->loadObjectList();

		if ($database->getErrorNum()) {

			echo $database->stderr();

			return false;

		}

		

		$database->setQuery( $contentElement->countContentSQL($language_id) );

		$result = $database->loadObjectList();

		echo $database->getErrorMsg();

		$total = count( $result );

		

		// Manipulation of result based on further information

		for( $i= 0 ; $i<count($rows); $i++ ) {

			$contentObject = new ContentObject( $language_id, $contentElement );

			$contentObject->readFromRow( $rows[$i] );

			$rows[$i] = $contentObject;

		}



		$filterHTML=array();

		foreach ($tranFilters as $tranFilter){

			$afilterHTML=$tranFilter->_createFilterHTML();

			if (isset($afilterHTML)) $filterHTML[] = $afilterHTML;

		}



	}

потом смотрю
еще два скрипта database.php это главный класс работы с БД джумлы
и второй mldatabase.class.php это тот который наследуется из него уже джумфише (компоненте)

Еще есть скрипт joomfish.class.php с набором классов для работы компонента. тоесть он как библиотека своего рода, все файлы я приатачил, может я там пропустил какой механизм.

Там есть класс ContentObject joomfish.class.php 674
у него есть метод формирования контента bind() 754
и метод непосредственно сохранения store() 999
Но как он работает я так не разобрался.
Всмысле непосредственная вставка.
...
Рейтинг: 0 / 0
05.04.2006, 13:19:00
    #33646073
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
в saveTranslation - проверьте кодировки клиента? Вызовите SHOW VARIABLES.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
05.04.2006, 21:40:38
    #33647573
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
4m@t!cв saveTranslation - проверьте кодировки клиента? Вызовите SHOW VARIABLES.
----------------------------------------
Артисты не приехали, приехали цыгане

Код: plaintext
1.
<pre>UPDATE etgc_jf_content SET `language_id`='3',`reference_id`='55',`reference_table`='menu',`reference_field`='name',`value`='Главная',`original_value`='8cf04a9734132302f96da8e113e80ce5',`modified`='2006-04-05 13:36:16',`modified_by`='62',`published`='1' WHERE id='41'</pre>

вот что выдало. тоесть поле value`='Главная' олучило в нужном виде. А какого лешего в БД сохранило не в том что нужно.

в БД поле value в кодировке хранится cp1251_general_ci ...это всмысле сравнение
...
Рейтинг: 0 / 0
05.04.2006, 21:56:32
    #33647593
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
ай сорри не то вставил, вот что мне выдало
вот та функция

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function saveTranslation( $joomFishManager, $language_id, $catid, $id, $mbfc_id ) {

	global $database, $mainframe;

	$actContentObject=null;	

	if( isset($catid) && $catid!="" ) {

		$contentElement = $joomFishManager->getContentElement( $catid );

		$actContentObject = new ContentObject( $language_id, $contentElement );

		$actContentObject->bind( $_POST );

		$actContentObject->store();

	}
$database->setQuery("SHOW VARIABLES");
$rows = $database->loadObjectList();
foreach ($rows as $row){
  print_r($row);
  echo "<br>";
}
exit();
}

вот результат

stdClass Object ( [Variable_name] => back_log [Value] => 50 )
stdClass Object ( [Variable_name] => basedir [Value] => / )
stdClass Object ( [Variable_name] => binlog_cache_size [Value] => 32768 )
stdClass Object ( [Variable_name] => bulk_insert_buffer_size [Value] => 8388608 )
stdClass Object ( [Variable_name] => character_set_client [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_connection [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_database [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_results [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_server [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_system [Value] => utf8 )
stdClass Object ( [Variable_name] => character_sets_dir [Value] => /usr/share/mysql/charsets/ )
stdClass Object ( [Variable_name] => collation_connection [Value] => latin1_swedish_ci )
stdClass Object ( [Variable_name] => collation_database [Value] => latin1_swedish_ci )
stdClass Object ( [Variable_name] => collation_server [Value] => latin1_swedish_ci )
stdClass Object ( [Variable_name] => concurrent_insert [Value] => ON )
stdClass Object ( [Variable_name] => connect_timeout [Value] => 10 )
stdClass Object ( [Variable_name] => datadir [Value] => /var/lib/mysql/ )
stdClass Object ( [Variable_name] => date_format [Value] => %Y-%m-%d )
stdClass Object ( [Variable_name] => datetime_format [Value] => %Y-%m-%d %H:%i:%s )
stdClass Object ( [Variable_name] => default_week_format [Value] => 0 )
stdClass Object ( [Variable_name] => delay_key_write [Value] => ON )
stdClass Object ( [Variable_name] => delayed_insert_limit [Value] => 100 )
stdClass Object ( [Variable_name] => delayed_insert_timeout [Value] => 300 )
stdClass Object ( [Variable_name] => delayed_queue_size [Value] => 1000 )
stdClass Object ( [Variable_name] => expire_logs_days [Value] => 0 )
stdClass Object ( [Variable_name] => flush [Value] => OFF )
stdClass Object ( [Variable_name] => flush_time [Value] => 0 )
stdClass Object ( [Variable_name] => ft_boolean_syntax [Value] => + -><()~*:""&| )
stdClass Object ( [Variable_name] => ft_max_word_len [Value] => 84 )
stdClass Object ( [Variable_name] => ft_min_word_len [Value] => 4 )
stdClass Object ( [Variable_name] => ft_query_expansion_limit [Value] => 20 )
stdClass Object ( [Variable_name] => ft_stopword_file [Value] => (built-in) )
stdClass Object ( [Variable_name] => group_concat_max_len [Value] => 1024 )
stdClass Object ( [Variable_name] => have_archive [Value] => NO )
stdClass Object ( [Variable_name] => have_bdb [Value] => NO )
stdClass Object ( [Variable_name] => have_blackhole_engine [Value] => NO )
stdClass Object ( [Variable_name] => have_compress [Value] => YES )
stdClass Object ( [Variable_name] => have_crypt [Value] => YES )
stdClass Object ( [Variable_name] => have_csv [Value] => NO )
stdClass Object ( [Variable_name] => have_example_engine [Value] => NO )
stdClass Object ( [Variable_name] => have_geometry [Value] => YES )
stdClass Object ( [Variable_name] => have_innodb [Value] => DISABLED )
stdClass Object ( [Variable_name] => have_isam [Value] => NO )
stdClass Object ( [Variable_name] => have_ndbcluster [Value] => NO )
stdClass Object ( [Variable_name] => have_openssl [Value] => NO )
stdClass Object ( [Variable_name] => have_query_cache [Value] => YES )
stdClass Object ( [Variable_name] => have_raid [Value] => NO )
stdClass Object ( [Variable_name] => have_rtree_keys [Value] => YES )
stdClass Object ( [Variable_name] => have_symlink [Value] => YES )
stdClass Object ( [Variable_name] => init_connect [Value] => )
stdClass Object ( [Variable_name] => init_file [Value] => )
stdClass Object ( [Variable_name] => init_slave [Value] => )
stdClass Object ( [Variable_name] => innodb_additional_mem_pool_size [Value] => 1048576 )
stdClass Object ( [Variable_name] => innodb_autoextend_increment [Value] => 8 )
stdClass Object ( [Variable_name] => innodb_buffer_pool_awe_mem_mb [Value] => 0 )
stdClass Object ( [Variable_name] => innodb_buffer_pool_size [Value] => 8388608 )
stdClass Object ( [Variable_name] => innodb_data_file_path [Value] => )
stdClass Object ( [Variable_name] => innodb_data_home_dir [Value] => )
stdClass Object ( [Variable_name] => innodb_fast_shutdown [Value] => ON )
stdClass Object ( [Variable_name] => innodb_file_io_threads [Value] => 4 )
stdClass Object ( [Variable_name] => innodb_file_per_table [Value] => OFF )
stdClass Object ( [Variable_name] => innodb_flush_log_at_trx_commit [Value] => 1 )
stdClass Object ( [Variable_name] => innodb_flush_method [Value] => )
stdClass Object ( [Variable_name] => innodb_force_recovery [Value] => 0 )
stdClass Object ( [Variable_name] => innodb_lock_wait_timeout [Value] => 50 )
stdClass Object ( [Variable_name] => innodb_locks_unsafe_for_binlog [Value] => OFF )
stdClass Object ( [Variable_name] => innodb_log_arch_dir [Value] => )
stdClass Object ( [Variable_name] => innodb_log_archive [Value] => OFF )
stdClass Object ( [Variable_name] => innodb_log_buffer_size [Value] => 1048576 )
stdClass Object ( [Variable_name] => innodb_log_file_size [Value] => 5242880 )
stdClass Object ( [Variable_name] => innodb_log_files_in_group [Value] => 2 )
stdClass Object ( [Variable_name] => innodb_log_group_home_dir [Value] => )
stdClass Object ( [Variable_name] => innodb_max_dirty_pages_pct [Value] => 90 )
stdClass Object ( [Variable_name] => innodb_max_purge_lag [Value] => 0 )
stdClass Object ( [Variable_name] => innodb_mirrored_log_groups [Value] => 1 )
stdClass Object ( [Variable_name] => innodb_open_files [Value] => 300 )
stdClass Object ( [Variable_name] => innodb_table_locks [Value] => ON )
stdClass Object ( [Variable_name] => innodb_thread_concurrency [Value] => 8 )
stdClass Object ( [Variable_name] => interactive_timeout [Value] => 100 )
stdClass Object ( [Variable_name] => join_buffer_size [Value] => 1044480 )
stdClass Object ( [Variable_name] => key_buffer_size [Value] => 16777216 )
stdClass Object ( [Variable_name] => key_cache_age_threshold [Value] => 300 )
stdClass Object ( [Variable_name] => key_cache_block_size [Value] => 1024 )
stdClass Object ( [Variable_name] => key_cache_division_limit [Value] => 100 )
stdClass Object ( [Variable_name] => language [Value] => /usr/share/mysql/english/ )
stdClass Object ( [Variable_name] => large_files_support [Value] => ON )
stdClass Object ( [Variable_name] => license [Value] => GPL )
stdClass Object ( [Variable_name] => local_infile [Value] => ON )
stdClass Object ( [Variable_name] => locked_in_memory [Value] => OFF )
stdClass Object ( [Variable_name] => log [Value] => OFF )
stdClass Object ( [Variable_name] => log_bin [Value] => OFF )
stdClass Object ( [Variable_name] => log_error [Value] => )
stdClass Object ( [Variable_name] => log_slave_updates [Value] => OFF )
stdClass Object ( [Variable_name] => log_slow_queries [Value] => OFF )
stdClass Object ( [Variable_name] => log_update [Value] => OFF )
stdClass Object ( [Variable_name] => log_warnings [Value] => 1 )
stdClass Object ( [Variable_name] => long_query_time [Value] => 10 )
stdClass Object ( [Variable_name] => low_priority_updates [Value] => OFF )
stdClass Object ( [Variable_name] => lower_case_file_system [Value] => OFF )
stdClass Object ( [Variable_name] => lower_case_table_names [Value] => 0 )
stdClass Object ( [Variable_name] => max_allowed_packet [Value] => 5241856 )
stdClass Object ( [Variable_name] => max_binlog_cache_size [Value] => 4294967295 )
stdClass Object ( [Variable_name] => max_binlog_size [Value] => 1073741824 )
stdClass Object ( [Variable_name] => max_connect_errors [Value] => 10 )
stdClass Object ( [Variable_name] => max_connections [Value] => 500 )
stdClass Object ( [Variable_name] => max_delayed_threads [Value] => 20 )
stdClass Object ( [Variable_name] => max_error_count [Value] => 64 )
stdClass Object ( [Variable_name] => max_heap_table_size [Value] => 16777216 )
stdClass Object ( [Variable_name] => max_insert_delayed_threads [Value] => 20 )
stdClass Object ( [Variable_name] => max_join_size [Value] => 4294967295 )
stdClass Object ( [Variable_name] => max_length_for_sort_data [Value] => 1024 )
stdClass Object ( [Variable_name] => max_relay_log_size [Value] => 0 )
stdClass Object ( [Variable_name] => max_seeks_for_key [Value] => 4294967295 )
stdClass Object ( [Variable_name] => max_sort_length [Value] => 1024 )
stdClass Object ( [Variable_name] => max_tmp_tables [Value] => 32 )
stdClass Object ( [Variable_name] => max_user_connections [Value] => 0 )
stdClass Object ( [Variable_name] => max_write_lock_count [Value] => 4294967295 )
stdClass Object ( [Variable_name] => myisam_data_pointer_size [Value] => 4 )
stdClass Object ( [Variable_name] => myisam_max_extra_sort_file_size [Value] => 2147483648 )
stdClass Object ( [Variable_name] => myisam_max_sort_file_size [Value] => 2147483647 )
stdClass Object ( [Variable_name] => myisam_recover_options [Value] => OFF )
stdClass Object ( [Variable_name] => myisam_repair_threads [Value] => 1 )
stdClass Object ( [Variable_name] => myisam_sort_buffer_size [Value] => 67108864 )
stdClass Object ( [Variable_name] => myisam_stats_method [Value] => nulls_unequal )
stdClass Object ( [Variable_name] => net_buffer_length [Value] => 16384 )
stdClass Object ( [Variable_name] => net_read_timeout [Value] => 30 )
stdClass Object ( [Variable_name] => net_retry_count [Value] => 10 )
stdClass Object ( [Variable_name] => net_write_timeout [Value] => 60 )
stdClass Object ( [Variable_name] => new [Value] => OFF )
stdClass Object ( [Variable_name] => old_passwords [Value] => OFF )
stdClass Object ( [Variable_name] => open_files_limit [Value] => 2566 )
stdClass Object ( [Variable_name] => pid_file [Value] => /var/lib/mysql/fast.securenet-server.net.pid )
stdClass Object ( [Variable_name] => port [Value] => 3306 )
stdClass Object ( [Variable_name] => preload_buffer_size [Value] => 32768 )
stdClass Object ( [Variable_name] => protocol_version [Value] => 10 )
stdClass Object ( [Variable_name] => query_alloc_block_size [Value] => 8192 )
stdClass Object ( [Variable_name] => query_cache_limit [Value] => 1048576 )
stdClass Object ( [Variable_name] => query_cache_min_res_unit [Value] => 4096 )
stdClass Object ( [Variable_name] => query_cache_size [Value] => 33554432 )
stdClass Object ( [Variable_name] => query_cache_type [Value] => ON )
stdClass Object ( [Variable_name] => query_cache_wlock_invalidate [Value] => OFF )
stdClass Object ( [Variable_name] => query_prealloc_size [Value] => 8192 )
stdClass Object ( [Variable_name] => range_alloc_block_size [Value] => 2048 )
stdClass Object ( [Variable_name] => read_buffer_size [Value] => 1044480 )
stdClass Object ( [Variable_name] => read_only [Value] => OFF )
stdClass Object ( [Variable_name] => read_rnd_buffer_size [Value] => 262144 )
stdClass Object ( [Variable_name] => relay_log_purge [Value] => ON )
stdClass Object ( [Variable_name] => relay_log_space_limit [Value] => 0 )
stdClass Object ( [Variable_name] => rpl_recovery_rank [Value] => 0 )
stdClass Object ( [Variable_name] => secure_auth [Value] => OFF )
stdClass Object ( [Variable_name] => server_id [Value] => 0 )
stdClass Object ( [Variable_name] => skip_external_locking [Value] => ON )
stdClass Object ( [Variable_name] => skip_networking [Value] => OFF )
stdClass Object ( [Variable_name] => skip_show_database [Value] => OFF )
stdClass Object ( [Variable_name] => slave_net_timeout [Value] => 3600 )
stdClass Object ( [Variable_name] => slave_transaction_retries [Value] => 0 )
stdClass Object ( [Variable_name] => slow_launch_time [Value] => 2 )
stdClass Object ( [Variable_name] => socket [Value] => /var/lib/mysql/mysql.sock )
stdClass Object ( [Variable_name] => sort_buffer_size [Value] => 2097144 )
stdClass Object ( [Variable_name] => sql_mode [Value] => )
stdClass Object ( [Variable_name] => sql_notes [Value] => OFF )
stdClass Object ( [Variable_name] => sql_warnings [Value] => OFF )
stdClass Object ( [Variable_name] => storage_engine [Value] => MyISAM )
stdClass Object ( [Variable_name] => sync_binlog [Value] => 0 )
stdClass Object ( [Variable_name] => sync_frm [Value] => ON )
stdClass Object ( [Variable_name] => sync_replication [Value] => 0 )
stdClass Object ( [Variable_name] => sync_replication_slave_id [Value] => 0 )
stdClass Object ( [Variable_name] => sync_replication_timeout [Value] => 0 )
stdClass Object ( [Variable_name] => system_time_zone [Value] => EDT )
stdClass Object ( [Variable_name] => table_cache [Value] => 1028 )
stdClass Object ( [Variable_name] => table_type [Value] => MyISAM )
stdClass Object ( [Variable_name] => thread_cache_size [Value] => 128 )
stdClass Object ( [Variable_name] => thread_stack [Value] => 126976 )
stdClass Object ( [Variable_name] => time_format [Value] => %H:%i:%s )
stdClass Object ( [Variable_name] => time_zone [Value] => SYSTEM )
stdClass Object ( [Variable_name] => tmp_table_size [Value] => 33554432 )
stdClass Object ( [Variable_name] => tmpdir [Value] => )
stdClass Object ( [Variable_name] => transaction_alloc_block_size [Value] => 8192 )
stdClass Object ( [Variable_name] => transaction_prealloc_size [Value] => 4096 )
stdClass Object ( [Variable_name] => tx_isolation [Value] => REPEATABLE-READ )
stdClass Object ( [Variable_name] => version [Value] => 4.1.18-standard )
stdClass Object ( [Variable_name] => version_comment [Value] => MySQL Community Edition - Standard (GPL) )
stdClass Object ( [Variable_name] => version_compile_machine [Value] => i686 )
stdClass Object ( [Variable_name] => version_compile_os [Value] => pc-linux-gnu )
stdClass Object ( [Variable_name] => wait_timeout [Value] => 5 )
...
Рейтинг: 0 / 0
05.04.2006, 23:37:43
    #33647675
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
еще прикол

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
class mlDatabase extends database {

	/** @var array list of multi lingual tables */
	var $_mlTableList=null;
 	/** @var Internal variable to hold array of unique tablenames and mapping data*/
	var $_refTables=null; 
  
	
	/** Constructor
	*/
	function mlDatabase( $host='localhost', $user, $pass, $db, $table_prefix='jos_', $driver='' ) {
		$this->database( $host, $user, $pass, $db, $table_prefix, $driver );
		
		mysql_query("set NAMES='cp1251'"); 
        mysql_query("set character_set_client='cp1251'"); 
		mysql_query("set character_set_results='cp1251'"); 
		mysql_query("set collation_connection='cp1251'");
		
		$query = "select distinct reference_table from #__jf_content";
		$this->setQuery( $query );
		$this->_mlTableList = $this->loadResultArray();
		if( !$this->_mlTableList ){
			echo $this->getErrorMsg();
		}
	}

вот так работает нормально, тоесть на экране русский

а вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	function mlDatabase( $host='localhost', $user, $pass, $db, $table_prefix='jos_', $driver='' ) {
		$this->database( $host, $user, $pass, $db, $table_prefix, $driver );
		
		mysql_query("set NAMES='cp1251'"); 

		
		$query = "select distinct reference_table from #__jf_content";
		$this->setQuery( $query );
		$this->_mlTableList = $this->loadResultArray();
		if( !$this->_mlTableList ){
			echo $this->getErrorMsg();
		}
	}
или вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	function mlDatabase( $host='localhost', $user, $pass, $db, $table_prefix='jos_', $driver='' ) {
		$this->database( $host, $user, $pass, $db, $table_prefix, $driver );
		
		$this->setQuery("set NAMES='cp1251'"); 
                 $this->setQuery("set character_set_client='cp1251'"); 
		$this->setQuery("set character_set_results='cp1251'"); 
		$this->setQuery("set collation_connection='cp1251'");
		
		$query = "select distinct reference_table from #__jf_content";
		$this->setQuery( $query );
		$this->_mlTableList = $this->loadResultArray();
		if( !$this->_mlTableList ){
			echo $this->getErrorMsg();
		}
	}

не работает, выдает знаки вопроса, это во фронэнде

ничего не понимаю
...
Рейтинг: 0 / 0
06.04.2006, 10:21:28
    #33648119
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
авторstdClass Object ( [Variable_name] => character_set_connection [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_database [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_results [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_server [Value] => latin1 )
stdClass Object ( [Variable_name] => character_set_system [Value] => utf8 )
stdClass Object ( [Variable_name] => character_sets_dir [Value] => /usr/share/mysql/charsets/ )
stdClass Object ( [Variable_name] => collation_connection [Value] => latin1_swedish_ci )
stdClass Object ( [Variable_name] => collation_database [Value] => latin1_swedish_ci )
stdClass Object ( [Variable_name] => collation_server [Value] => latin1_swedish_ci )
Ну так и смотрите сами - кодировка у вас latin1 вместо cp1251. Какая реальная кодировка у таблицы, в которую рпоисходит вставка? Если это cp1251, то перед вставкой вызывайте
Код: plaintext
SET NAMES cp1251
и только после этого делайте вставку.

Насчет последнего поста.
$this->setQuery - что делает эта функция? Опять же какая кодировка при получении результатов запроса???

Кодировка соединения latin1 обязательна для сервера?
Версия MySQL?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
06.04.2006, 10:33:55
    #33648161
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
MySql v 4.1.18

Таблица куда вставляются данные

CREATE TABLE `jom_jf_content` (
`id` int(10) unsigned NOT NULL auto_increment,
`language_id` int(11) NOT NULL default '0',
`reference_id` int(11) NOT NULL default '0',
`reference_table` varchar(100) NOT NULL default '',
`reference_field` varchar(100) NOT NULL default '',
`value` text NOT NULL,
`original_value` varchar(255) default NULL,
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`modified_by` int(11) unsigned NOT NULL default '0',
`published` tinyint(1) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

тоесть кодировка тут CHARSET=cp1251;



Дело в том что я не понял механизма где вставляется. По идее сохранение произходит вот тут
Joomfish.class.php стр 999
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	function store() {
		$elementTable =& $this->_contentElement->getTable();
		for( $i= 0 ; $i<count($elementTable->Fields); $i++ ) {
			$field =& $elementTable->Fields[$i];
			$fieldContent =& $field->translationContent;
			
			if( $field->Translate ) {
				if( isset($fieldContent->reference_id) ) {
					if ( isset($fieldContent->value) && $fieldContent->value!='' ) {
						$fieldContent->store();
					} else {
						$fieldContent->delete();
					}
				}
			}
		}
	}

Но где сам запрос????
...
Рейтинг: 0 / 0
06.04.2006, 10:50:37
    #33648231
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
Еще раз
1. Кодировка соединения latin1 обязательна для сервера?
2. Версия MySQL?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
06.04.2006, 11:04:05
    #33648282
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
4m@t!cЕще раз
1. Кодировка соединения latin1 обязательна для сервера?
2. Версия MySQL?
----------------------------------------
Артисты не приехали, приехали цыгане
Кодировка соединения latin1 обязательна для сервера? - как это узнать?
Версия MySQL? - я же написал вверху в начале прошлого сообщения. 4.1.18
...
Рейтинг: 0 / 0
06.04.2006, 11:18:12
    #33648355
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
>Кодировка соединения latin1 обязательна для сервера? - как это узнать?
Это не узнавать надо, а решать. Если у вас все данные в cp1251, то зачем вам кодировка latin1?
Если cp1251 - это нужная вам кодировка для всгео сервера, то есть смысл настроить сервер СУБД например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[client]
...
...
#Кодировка по умолчанию
default-character-set=cp1251
...
...

[server]
...
...
#Кодировка по умолчанию
default-character-set=cp1251
# Параметр заставляет сервер игнорировать кодировку, пришедшую от клиента.
#Т.е. кодировка клиента забывается и устанавливается кодировка сервера.
skip-character-set-client-handshake
...
...
При такой конфигурации вам не нужно будет каждый раз вызывать SET NAMES и думать, что за кодировку просит сервер.

>Версия MySQL? - я же написал вверху в начале прошлого сообщения. 4.1.18
Извинте, не заметил.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
06.04.2006, 11:25:02
    #33648403
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
я не знаю, наверное хостер на такое не решится, что-то менять в конфиге, не только я пользую этот сервер.
...
Рейтинг: 0 / 0
06.04.2006, 11:42:04
    #33648486
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
Поборол

всем спасибо.
Отдельное 4m@t!c за терпение
...
Рейтинг: 0 / 0
06.04.2006, 11:56:19
    #33648550
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
Напишите, как побороли?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
06.04.2006, 13:17:59
    #33648838
viv
viv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
	function query() {
		global $mosConfig_debug;
		if ($this->_debug) {
			$this->_ticker++;
	  		$this->_log[] = $this->_sql;
		}
		if ($this->_limit >  0  || $this->_offset >  0 ) {
			$this->_sql .= "\nLIMIT $this->_offset, $this->_limit";
		}
		$this->_errorNum =  0 ;
		$this->_errorMsg = '';
		mysql_query("set NAMES='cp1251'"); 
        mysql_query ("set character_set_client='cp1251'"); 
		mysql_query ("set character_set_results='cp1251'"); 
		mysql_query ("set collation_connection='cp1251'");
		$this->_cursor = mysql_query( $this->_sql, $this->_resource );
		if (!$this->_cursor) {
			$this->_errorNum = mysql_errno( $this->_resource );
			$this->_errorMsg = mysql_error( $this->_resource )." SQL=$this->_sql";
			if ($this->_debug) {
				trigger_error( mysql_error( $this->_resource ), E_USER_NOTICE );
				//echo "<pre>" . $this->_sql . "</pre>\n";
				if (function_exists( 'debug_backtrace' )) {
					foreach( debug_backtrace() as $back) {
						if (@$back['file']) {
							echo '<br />'.$back['file'].':'.$back['line'];
						}
					}
				}
			}
			return false;
		}
		return $this->_cursor;
	}
это метод в классе работы с БД, на него я так понял все ссылается, явно или как либо по другому.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP+MySQL) Joomla + Jomfish + кодировка (может кто пользовался) / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]