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