Доброго времени суток ребятки!
Вопрос посвящается людям хорошо разбирающимся в базах данных:
Дело вот в чем, хочу сделать несколько копий wp в одной базе данных, с разными префиксами таблиц. Сайты будут полуСДЛ, под заработок, в БД имеется таблица плагина для уникализации текста, занимает она около 20мб(назовем её,допустим, "a_un1"), как сделать чтоб остальные копии этого плагина(к примеру "sec_un1", "thi_un1") обращались, к таблице "a_un1" и брали информацию именно из неё ?
- 29.10.2011 11:37
Нужны деньги?! Заработай их на продаже авиабилетов! - 29.10.2011 14:42
ну не проверю что никто не знает как это реализовать!
Нужны деньги?! Заработай их на продаже авиабилетов! - 29.10.2011 15:13
Если я не ошибаюсь, могут помочь тип таблиц в mysql - Таблицы MERGE они вроде позволяют обьединять разные таблицы, создавать синонимы таблиц, но как с ними работать не помню (
---------- Сообщение добавлено 14:13 ---------- Предыдущее 14:10 ----------
Просто не понятно как это все выглядит... если это копии таблицы a_un1 -- sec_un1", "thi_un1" то зачем тебе к перовой обращаться? да будет конечно использовано больше памяти в mysql, но меньше мороки будет...
Либо как вариант залезть в код плагина, и указать ему явную таблицу , которая тебе нужна...Спасибо сказали:
Phonteq(29.10.2011), - 29.10.2011 15:40
assai, спасибо, дело в том что "a_un1" таблица с контентом, остальные пустые, а на хостинге моем для бд не очень много места дается, таким способом решил оптимизировать, а вот идея переписать плагин весьма хороша
Нужны деньги?! Заработай их на продаже авиабилетов! - 29.10.2011 16:57
Phonteq, на drupal было бы проще) на основе многосайтовости... Я не настраивал еще сам, но там можно было одному движку прописать алиасы домена и будут разные сайты. Только в конфигах прописать какие таблицы какой сайт будет использовать... Там же можно указывать общие таблицы для всех сайтов... На основе этого к примеру обьединяли пользователей для сайтов или типы контента )))
- 30.10.2011 12:08
assai, имел опыт с друпалом) понравился, но заморочек много с ним поэтому вп выбираю
Нужны деньги?! Заработай их на продаже авиабилетов! - 30.10.2011 12:13
- 30.10.2011 12:24
Kopc, Вот фрагмент кода плагина
код
// Save the posted value in the database
foreach ($unik_options as $unik_opt) {
update_option($unik_opt, $$unik_opt);
}
echo '<div class="updated"><p><strong>Опции сохранены</strong></p></div>';
}
$unik_total_synonyms = $wpdb->get_var("SELECT COUNT(*) FROM $unik_syn_table");
?>
<div class="wrap">
<h2>Уникализатор</h2>
<h3>Настройки</h3>
<form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
<table class="form-table">
<tr>
<th colspan=2 scope="row">
<input name="unik_mashup_paragraph" type="checkbox" <?if($unik_mashup_paragraph)echo "checked";?>> Перемешивать абзацы
</th>
</tr>
<tr>
<th colspan=2 scope="row">
<input name="unik_mashup_sentence" type="checkbox" <?if($unik_mashup_sentence)echo "checked";?>> Перемешивать предложения в пределах абзаца
</th>
</tr>
<tr>
<th>
<input name="unik_pressing" type="checkbox" <?if($unik_pressing)echo "checked";?>> Сделать выжимку (маленькую статью из большой)
</th>
<td>
Уровень:
<select name="unik_pressing_level">
<option value=100 <?if($unik_pressing_level==100)echo "selected";?>>Больше текста
<option value=90 <?if($unik_pressing_level==90)echo "selected";?>>90
<option value=80 <?if($unik_pressing_level==80)echo "selected";?>>80
<option value=70 <?if($unik_pressing_level==70)echo "selected";?><?if (!$unik_pressing_level) echo "selected";?>>70
<option value=60 <?if($unik_pressing_level==60)echo "selected";?>>60
<option value=50 <?if($unik_pressing_level==50)echo "selected";?>>50
<option value=40 <?if($unik_pressing_level==40)echo "selected";?>>40
<option value=30 <?if($unik_pressing_level==30)echo "selected";?>>30
<option value=20 <?if($unik_pressing_level==20)echo "selected";?>>20
<option value=10 <?if($unik_pressing_level==10)echo "selected";?>>Меньше текста
</select>
</td>
</tr>
<tr>
<th>
<input name="unik_ruslat" type="checkbox" <?if($unik_ruslat)echo "checked";?>> Заменять русские буквы на эквиваленты
</th>
<td>
Уровень:
<select name="unik_ruslat_level">
<option value=100 <?if($unik_ruslat_level==100)echo "selected";?>>100% замена
<option value=20 <?if($unik_ruslat_level==20)echo "selected";?>>20%
<option value=15 <?if($unik_ruslat_level==15)echo "selected";?>>15%
<option value=10 <?if($unik_ruslat_level==10)echo "selected";?>>10%
<option value=9 <?if($unik_ruslat_level==9)echo "selected";?>>9%
<option value=8 <?if($unik_ruslat_level==8)echo "selected";?>>8%
<option value=7 <?if($unik_ruslat_level==7)echo "selected";?>>7%
<option value=5 <?if($unik_ruslat_level==5)echo "selected";?><?if (!$unik_ruslat_level) echo "selected";?>>5%
<option value=3 <?if($unik_ruslat_level==3)echo "selected";?>>3%
<option value=2 <?if($unik_ruslat_level==2)echo "selected";?>>2%
<option value=1 <?if($unik_ruslat_level==1)echo "selected";?>>1% слов
</select>
</td>
</tr>
<tr>
<th>
<input name="unik_synonymizer" type="checkbox" <?if($unik_synonymizer)echo "checked";?>> Синонимизация
</th>
<td>
Глубина:
<select name="unik_synonymizer_level">
<option value=0 <?if($unik_synonymizer_level==0)echo "selected";?>>Максимальная
<option value=1 <?if($unik_synonymizer_level==1)echo "selected";?>>1
<option value=2 <?if($unik_synonymizer_level==2)echo "selected";?>>2
<option value=3 <?if($unik_synonymizer_level==3)echo "selected";?>>3
<option value=4 <?if($unik_synonymizer_level==4)echo "selected";?>>4
<option value=5 <?if($unik_synonymizer_level==5)echo "selected";?>>5
<option value=6 <?if($unik_synonymizer_level==6)echo "selected";?>>6
<option value=7 <?if($unik_synonymizer_level==7)echo "selected";?>>7
<option value=8 <?if($unik_synonymizer_level==8)echo "selected";?>>8
<option value=9 <?if($unik_synonymizer_level==9)echo "selected";?>>9
<option value=10 <?if($unik_synonymizer_level==10)echo "selected";?>>Слабо
</select>
</td>
</tr>
</table>
<input type="hidden" name="cmd" value="unik_save_opt">
<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Save Changes') ?>" />
</p>
</form>
<h3>Уникализатор plugin разработан при поддержке:</h3>
<table class="form-table">
<tr><th>
<ul>
<li><a href="****</li>
<li><a href="*****</li>
</ul>
</th></tr></table>
<h3>Словарь Синонимайзера</h3>
<table class="form-table" width="300px">
<tr>
<td>
Добавить словарь синонимов (большой словарь добавляйте частями)<br />
<b>формат:</b> слово|синоним1,синоним2,синоним3<br />
Всего слов в базе: <b><?php echo $unik_total_synonyms; ?></b><br />
<form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
<input type="hidden" name="cmd" value="del_syn">
<input type="submit" name="Submit" value="Очистить базу словаря" />
</form>
<form method="post" action="<? echo $_SERVER['REQUEST_URI'];?>">
<textarea cols=110 rows=12 name="synonims_dict"></textarea>
</td>
</tr>
</table>
<input type="hidden" name="cmd" value="add_syn">
<p class="submit">
<input type="submit" name="Submit" value="Добавить синонимы" />
</p>
</form>
</div>
<?php
}
function unik_get_syn_table() {
global $wpdb;
return $wpdb->prefix . "unik_synonyms_ru";
}[свернуть]
Основная таблица называется "a_unik_synonyms_ru"
остальные с другим префиксом "j_unik_synonyms_ru" и т.д.Продолжение кода до конца, возможно потребуется
function unikalizator_do_action($text){
if (get_option('unik_pressing')) {
$text = unik_text_pressing($text, get_option('unik_pressing_level'));
}
if (get_option('unik_mashup_paragraph') || get_option('unik_mashup_sentence')) {
$text = unik_mashup_paragraph_sentence($text, get_option('unik_mashup_paragraph'), get_option('unik_mashup_sentence'), "\r\n");
}
if (get_option('unik_ruslat')) {
$text = unik_replace_ruslat($text, get_option('unik_ruslat_level'));
}
if (get_option('unik_synonymizer')) {
$text = unik_synonymizer_ru($text, get_option('unik_synonymizer_level'));
}
return $text;
}
function unik_mashup_paragraph_sentence($text, $mashup_paragraph = false, $mashup_sentence = false, $paragraph_symbol = "</p>") {
$paragraphs = preg_split("/".str_replace("/", "\/", $paragraph_symbol)."+?/uims", $text, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
if ($mashup_paragraph) {
srand((float) microtime() * 10000000);
shuffle($paragraphs);
}
if ($mashup_sentence) {
foreach ($paragraphs as $key => $paragraph) {
$paragraph = strip_tags($paragraph);
if ($paragraph_symbol == "</p>")
$paragraphs[$key] = "<p>";
else
$paragraphs[$key] = "";
$paragraphs[$key] .= unik_mashup_sentence($paragraph);
}
}
return join($paragraph_symbol, $paragraphs) . $paragraph_symbol;
}
function unik_mashup_sentence($text) {
$sentences = unik_split_sentence($text);
srand((float) microtime() * 10000000);
shuffle($sentences);
return join(" ", $sentences);
}
function unik_split_sentence($text) {
$sentences = preg_split("/([\.\!\?])\s/u", trim($text), -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
$sentences2 = array();
$num = 0;
foreach($sentences as $key => $sentence) {
if ($sentence == "." || $sentence == "!" || $sentence == "?") {
$sentences2[$num - 1] .= $sentence;
continue;
}
$sentences2[$num] .= trim($sentence);
$num++;
}
return $sentences2;
}
function unik_text_pressing($text, $pressing_level) {
if ($pressing_level >= 100)
return $text;
$text = strip_tags($text);
$sentences = unik_split_sentence($text);
$press = round((count($sentences)*$pressing_level)/100);
$rand_keys = array_rand($sentences, count($sentences) - $press);
if (!is_array($rand_keys))
return $text;
foreach ($rand_keys as $rand_key) {
unset($sentences[$rand_key]);
}
return join(" ", $sentences);
}
function unik_replace_ruslat($text, $level = 100) {
$words = preg_split("/(\s+)/uims", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$words_count = 0;
$not_empty_words = array();
foreach ($words as $key => $word) {
if (trim($word)) {
$not_empty_words[$key] = $word;
$words_count++;
}elseif (!preg_match('/\n/ims', $word))
unset($words[$key]);
}
if ($words_count == 0) $words_count = 1;
if ($words_count > count($not_empty_words)) $words_count = count($not_empty_words);
$replace_count = round(($words_count * $level) / 100);
$rand_keys = array_rand($not_empty_words, $words_count);
$count = 0;
foreach($rand_keys as $key => $rand_key) {
if ($rword = unik_ruslat($words[$rand_key])) {
$words[$rand_key] = $rword;
$count++;
}
if ($count >= $replace_count)
break;
}
$text = join(" ", $words);
return $text;
}
function unik_ruslat($str) {
$ruslat = array("а"=>"a","А"=>"A","е"=>"e","Е"=>"E","о"=>"o","О"=>"O","х"=>"x","Х"=>"X");
$news_str = strtr($str, $ruslat);
if ($str !== $news_str )
return $news_str;
else
return false;
}
function unik_synonymizer_ru($text, $depth = 0) {
$words = preg_split('/([a-яА-Я]+)/is', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$bwords = array();
if ($bloked_words) {
foreach ($bloked_words as $bw) {
$tmp = preg_split("/\s+/", mb_strtolower($bw, "UTF-8"));
$bwords = array_merge($bwords , $tmp);
}
}
$new_text = "";
$open_tag = false;
$last_depth = 1000;
foreach ($words as $word) {
if ($open_tag) {
$new_text .= $word;
if (unik_is_opened_tag($word)) continue;
if (unik_is_closed_tag($word)) {
$open_tag = false;
}
continue;
}
if (unik_is_opened_tag($word)) {
$open_tag = true;
$new_text .= $word;
continue;
}
if ($word == ' ') {$new_text .= $word; continue;}
if (strlen($word) < 4) {$new_text .= $word; continue;}
if (in_array(mb_strtolower($word, "UTF-8"), $bwords)) {$new_text .= $word; continue;}
if ($ignore_stop_words) {
if (in_array(mb_strtolower($word, "UTF-8"), $stop_words)) {
$new_text .= $word; continue;
}
}
if ($last_depth < $depth) {
$new_text .= $word;
$last_depth++;
continue;
}
if ($synonym = unik_get_synonym($word)) {
if (unik_my_mb_ucfirst($word) == $word) {
$synonym = unik_my_mb_ucfirst($synonym);
}
$new_text .= $synonym;
$last_depth = 0;
}else {
$new_text .= $word;
}
}
return $new_text;
}
function unik_is_opened_tag($str) {
if (strpos($str, '<') !== false)
return true;
else
return false;
}
function unik_is_closed_tag($str) {
if (strpos($str, '>') !== false)
return true;
else
return false;
}
function unik_get_synonym ($word){
global $unik_syn_table, $wpdb;
$keyword = mb_strtolower($word, "UTF-8");
$sql = "SELECT syn FROM $unik_syn_table WHERE keyword='$keyword' LIMIT 1";
$syns = $wpdb->get_var($sql);
if ($syns) {
$words = explode(',', $syns);
srand((float) microtime() * 10000000);
return $words[array_rand($words)];
} else {
return false;
}
}
function unik_my_mb_ucfirst($str, $e='UTF-8') {
if (function_exists('mb_strtoupper')) {
$fc = mb_strtoupper(mb_substr($str, 0, 1, $e), $e);
return $fc.mb_substr($str, 1, mb_strlen($str, $e), $e);
}else
return ($str);
}
?>[свернуть]Нужны деньги?! Заработай их на продаже авиабилетов! - 30.10.2011 12:40
Phonteq, я только один запрос к бд тут увидел, значит других вариантов быть не должно :)
PHP код:меняем на$sql = "SELECT syn FROM $unik_syn_table WHERE keyword='$keyword' LIMIT 1";
PHP код:либо функцию$sql = "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1";
PHP код:Заменяем наfunction unik_get_syn_table() {
global $wpdb;
return $wpdb->prefix . "unik_synonyms_ru";
}
PHP код:Подойдет любой из вариантовfunction unik_get_syn_table() {
return "unik_synonyms_ru";
}
Спасибо сказали:
Phonteq(30.10.2011), - 30.10.2011 13:20
Kopc, при первом способе не активируется плагин т.к. вызывает фатальную ошибку.
При втором способе при публикации вот такая картина.
Warning: array_rand() [function.array-rand]: Second argument has to be between 1 and the number of elements in the array in *****/plugins/***/***.php on line 340
Warning: Invalid argument supplied for foreach() in ***/plugins/***.php on line 343
Warning: Cannot modify header information - headers already sent by (output started at /****/plugins/***.php:340) in ****/wp-includes/pluggable.php on line 897[свернуть]
340 строка этоPHP код:343 строка это$rand_keys = array_rand($not_empty_words, $words_count);
PHP код:и далееforeach($rand_keys as $key => $rand_key) {
PHP код:if ($rword = unik_ruslat($words[$rand_key])) {
$words[$rand_key] = $rword;
$count++;
}
if ($count >= $replace_count)
break;
}
---------- Сообщение добавлено 11:20 ---------- Предыдущее 11:17 ----------
Либо при использовании первого метода такая ошибкаРазвернуть текст
Parse error: syntax error, unexpected T_STRING in ***/wp-content/plugins/***.php on line 435[свернуть]
435 строкаPHP код:$sql = "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1";
Нужны деньги?! Заработай их на продаже авиабилетов!
Тэги топика:
Похожие темы
Темы | Раздел | Ответов | Последний пост |
---|---|---|---|
вопрос по css | Web программирование | 4 | 21.03.2011 22:54 |
Вопрос по WP | Софт, скрипты, сервисы | 8 | 13.09.2010 18:54 |
Вопрос по RSS. | Блоги | 10 | 15.07.2010 16:29 |
Вопрос | Партнерские программы | 5 | 07.07.2010 14:53 |
Вопрос по PR ? | 40 | 14.12.2009 19:08 |