Textpattern. Плагин MLP увеличивает объем базы данных в два раза

В «оригинальном» движке данные статей хранятся в таблице textpattern. Плагин мультиязычности MLP добавляет для каждого языка сайта таблицу с именем l10n_txp_код_языка. Эти таблицы идентичны по структуре таблице textpattern и содержат статьи на «своем» языке.

Т. е. если у меня используются украинский и русский языки, то в базе данных будут дополнительно две таблицы l10n_txp_uk_ua и l10n_txp_ru_ru. В l10n_txp_ru_ru будут статьи на русском, а в l10n_txp_uk_ua – на украинском. А это означает, что объем БД будет завышен почти в два раза за счет дублирования информации!

К счастью в MySQL имеется механизм представлений (Views) с помощью которого мы сможем устранить это недоразумение.

Удаляем таблицы и создаем представления:

DROP TABLE l10n_txp_ru_ru;
CREATE VIEW l10n_txp_ru_ru AS SELECT * FROM textpattern WHERE l10n_lang='ru-ru';
DROP TABLE l10n_txp_uk_ua;
CREATE VIEW l10n_txp_uk_ua AS SELECT * FROM textpattern WHERE l10n_lang='uk-ua';

Теперь внесем правки в код плагина. В файле textpattern/lib/l10n_admin_classes.php необходимо изменить три функции. В функции _clone_rendition закомментировать:

	//	$insert[] = '`ID`='.doSlash( $rendition_id );
 	//	$insert_sql = join( ', ' , $insert );
 	//	$table_name = _l10n_make_textpattern_name( array( 'long'=>$target_lang ) );
 	//	safe_insert( $table_name , $insert_sql );

В функции delete_article закомментировать сл. строки:

	//	foreach( $renditions as $rendition )
 	//		{
 	//		$lang = $rendition[L10N_COL_LANG];
 	//		$rendition_table = _l10n_make_textpattern_name( array( 'long'=>$lang ) );
 	//		safe_delete( $rendition_table , L10N_COL_GROUP."=$article" );
 	//		}

В функции delete_rendition закомментировать и добавить строку, вот так:

 	//	$rendition_table = _l10n_make_textpattern_name( array( 'long'=>$lang ) );
 	//	$rendition_deleted = safe_delete( $rendition_table , "`ID`=$rendition" );
 		$rendition_deleted = true;

На этом все. Небольшой хак, который позволит уменьшить объем базы, но не оптимизирует запросы. Например, при изменении статьи, по-прежнему будет выполняться UPDATE таблиц textpattern и языковой l10n_txp_код_языка.

UPD. Я доработал код плагина. И теперь он корректно отрабатывает процессы настройки/очистки плагина, апгрейда при выходе новой версии и не создает «лишних» запросов к представлениям. Код доступен здесь github.com/dshovchko/MLP/tree/v4.6.0.tables2views


Комментарии

Оставить комментарий

Ответ на Textpattern. Плагин MLP увеличивает объем базы данных в два раза