Вопрос по БД - Webmasters.ru - RSS http://webmasters.ru/forum/showthread.php?t=20096 SEO форум вебмастеров - Поисковые системы, оптимизация, раскрутка сайта, оптимизация и продвижение сайта в поисковых системах 1744723434 Elesite CMS 60 http://webmasters.ru/forum/images/wm/misc/rss.png SEO форум вебмастеров Webmasters.ru http://webmasters.ru/forum Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205028 Sat, 29 Oct 2011 06:37:07 GMT Доброго времени суток ребятки! Вопрос посвящается людям хорошо разбирающимся в базах данных: Дело вот в чем, хочу сделать несколько копий wp в одной базе данных, с разными префиксами таблиц. Сайты будут полуСДЛ, под заработок, в БД имеется таблица плагина для уникализации текста, занимает она около 20мб(назовем её,допустим, "a_un1"), как сделать чтоб остальные копии этого плагина(к примеру "sec_un1", "thi_un1") обращались, к таблице "a_un1" и брали информацию именно из неё ? Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205070 Sat, 29 Oct 2011 09:42:04 GMT ну не проверю что никто не знает как это реализовать! Вопрос по БД by assai http://webmasters.ru/forum/showpost.php?p=205085 Sat, 29 Oct 2011 10:13:47 GMT Если я не ошибаюсь, могут помочь тип таблиц в mysql - Таблицы MERGE они вроде позволяют обьединять разные таблицы, создавать синонимы таблиц, но как с ними работать не помню ( ---------- Сообщение добавлено 14:13 ---------- Предыдущее 14:10 ---------- Просто не понятно как это все выглядит... если это копии таблицы a_un1 -- sec_un1", "thi_un1" то зачем тебе к перовой обращаться? да будет конечно использовано больше памяти в mysql, но меньше мороки будет... Либо как вариант залезть в код плагина, и указать ему явную таблицу , которая тебе нужна... Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205100 Sat, 29 Oct 2011 10:40:55 GMT assai, спасибо, дело в том что "a_un1" таблица с контентом, остальные пустые, а на хостинге моем для бд не очень много места дается, таким способом решил оптимизировать, а вот идея переписать плагин весьма хороша ;) Вопрос по БД by assai http://webmasters.ru/forum/showpost.php?p=205128 Sat, 29 Oct 2011 11:57:15 GMT Phonteq, на drupal было бы проще) на основе многосайтовости... Я не настраивал еще сам, но там можно было одному движку прописать алиасы домена и будут разные сайты. Только в конфигах прописать какие таблицы какой сайт будет использовать... Там же можно указывать общие таблицы для всех сайтов... На основе этого к примеру обьединяли пользователей для сайтов или типы контента ))) Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205368 Sun, 30 Oct 2011 07:08:17 GMT assai, имел опыт с друпалом) понравился, но заморочек много с ним;) поэтому вп выбираю Вопрос по БД by Kopc http://webmasters.ru/forum/showpost.php?p=205370 Sun, 30 Oct 2011 07:13:36 GMT как сделать чтоб остальные копии этого плагина(к примеру "sec_un1", "thi_un1") обращались, к таблице "a_un1" и брали информацию именно из неё ? Делается непосредственно на PHP Поскольку это работа плагина, то переделываем запрос в плагине и всё. Больше в принципе описывать нечего, так как кода не видно а это же гадание на кофейной гуще :) Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205380 Sun, 30 Oct 2011 07:24:26 GMT Kopc, Вот фрагмент кода плагина [SPOILER="код"]// Save the posted value in the database foreach ($unik_options as $unik_opt) { update_option($unik_opt, $$unik_opt); } echo 'Опции сохранены'; } $unik_total_synonyms = $wpdb->get_var("SELECT COUNT(*) FROM $unik_syn_table"); ?> Уникализатор Настройки

Опции сохранены

'; } $unik_total_synonyms = $wpdb->get_var("SELECT COUNT(*) FROM $unik_syn_table"); ?>

Уникализатор

Настройки

> Перемешивать абзацы
> Перемешивать предложения в пределах абзаца
> Сделать выжимку (маленькую статью из большой) Уровень:
> Заменять русские буквы на эквиваленты Уровень:
> Синонимизация Глубина:

Уникализатор plugin разработан при поддержке:

Словарь Синонимайзера

Добавить словарь синонимов (большой словарь добавляйте частями)
формат: слово|синоним1,синоним2,синоним3
Всего слов в базе:

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 = "

") { $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 == "

") $paragraphs[$key] = "

"; 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); } ?>]]> Вопрос по БД by Kopc http://webmasters.ru/forum/showpost.php?p=205386 Sun, 30 Oct 2011 07:40:43 GMT Phonteq, я только один запрос к бд тут увидел, значит других вариантов быть не должно :) $sql = "SELECT syn FROM $unik_syn_table WHERE keyword='$keyword' LIMIT 1"; меняем на $sql = "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1"; либо функцию function unik_get_syn_table() { global $wpdb; return $wpdb->prefix . "unik_synonyms_ru"; } Заменяем на function unik_get_syn_table() { return "unik_synonyms_ru"; } Подойдет любой из вариантов prefix . "unik_synonyms_ru"; } Заменяем на function unik_get_syn_table() { return "unik_synonyms_ru"; } Подойдет любой из вариантов]]> Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205397 Sun, 30 Oct 2011 08:20:36 GMT 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 строка это $rand_keys = array_rand($not_empty_words, $words_count); 343 строка это foreach($rand_keys as $key => $rand_key) { и далее 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 строка $sql = "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1"; $rand_key) { и далее 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 строка $sql = "SELECT syn FROM "a_unik_synonyms_ru" WHERE keyword='$keyword' LIMIT 1";]]> Вопрос по БД by Kopc http://webmasters.ru/forum/showpost.php?p=205415 Sun, 30 Oct 2011 09:38:16 GMT Phonteq, Скобки не те поставил :) $sql = "SELECT syn FROM 'a_unik_synonyms_ru' WHERE keyword='$keyword' LIMIT 1"; Должно работать :) Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205449 Sun, 30 Oct 2011 11:28:46 GMT Kopc, все равно не получается, та же ошибка возникает, которую выше описывал Посмотрел весь код, там ещё несколько обращений $sql есть Вот весь код [SPOILER] =') ) $charset_collate = "DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci"; if($wpdb->get_var("SHOW TABLES LIKE '$unik_syn_table'") != $unik_syn_table) { $sql = "CREATE TABLE " . $unik_syn_table . " ( s_id int(11) NOT NULL auto_increment, keyword varchar(255) NOT NULL default '', syn varchar(255) NOT NULL default '', PRIMARY KEY (s_id), KEY kkey (keyword) )$charset_collate"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } } function unikalizator_unset_options () { global $wpdb, $unik_syn_table; delete_option('unik_version'); delete_option('unik_mashup_sentence'); delete_option('unik_mashup_paragraph'); delete_option('unik_pressing'); delete_option('unik_pressing_level'); delete_option('unik_ruslat'); delete_option('unik_ruslat_level'); delete_option('unik_synonymizer'); delete_option('unik_synonymizer_level'); $sql = "DROP TABLE $unik_syn_table"; $wpdb->query( $sql ); } function unikalizator_admin_menu() { add_options_page('Уникализатор', 'Уникализатор', 8, __FILE__, 'unikalizator_options_page'); } function unikalizator_options_page() { global $wpdb, $unik_syn_table; $unik_options = array( 'unik_mashup_sentence', 'unik_mashup_paragraph', 'unik_pressing', 'unik_pressing_level', 'unik_ruslat', 'unik_ruslat_level', 'unik_synonymizer', 'unik_synonymizer_level' ); $cmd = $_POST['cmd']; foreach ($unik_options as $unik_opt) { $$unik_opt = get_option($unik_opt); } if ($cmd == "del_syn") { $sql = "TRUNCATE TABLE $unik_syn_table"; $wpdb->query( $sql ); echo '

Все синонимы удалены из базы

'; } if ($cmd == "add_syn" && $_POST['synonims_dict']) { $lines = explode("\n", $_POST['synonims_dict']); foreach($lines as $line){ $line = trim($line); if (!$line) continue; list($key, $syn) = explode("|", $line); $sql = "INSERT INTO $unik_syn_table (keyword, syn) VALUES('$key','$syn')"; $wpdb->query( $sql ); } echo '

Синонимы добавлены в базу

'; } if ($cmd == "unik_save_opt") { foreach ($unik_options as $unik_opt) { $$unik_opt = $_POST[$unik_opt]; } // Save the posted value in the database foreach ($unik_options as $unik_opt) { update_option($unik_opt, $$unik_opt); } echo '

Опции сохранены

'; } $unik_total_synonyms = $wpdb->get_var("SELECT COUNT(*) FROM $unik_syn_table"); ?>

Уникализатор

Настройки

> Перемешивать абзацы
> Перемешивать предложения в пределах абзаца
> Сделать выжимку (маленькую статью из большой) Уровень:
> Заменять русские буквы на эквиваленты Уровень:
> Синонимизация Глубина:

Уникализатор plugin разработан при поддержке:

  • Кисточка - генератор сателлитов, с функцией автоматического поиска контента.
  • BRush - генератор англоязычных сайтов, со встроенными партнерскими программами, качественным тематическим контентом и уникализацией текста.

Словарь Синонимайзера

Добавить словарь синонимов (большой словарь добавляйте частями)
формат: слово|синоним1,синоним2,синоним3
Всего слов в базе:

prefix . "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 = "

") { $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 == "

") $paragraphs[$key] = "

"; 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); } ?>]]> Вопрос по БД by Kopc http://webmasters.ru/forum/showpost.php?p=205487 Sun, 30 Oct 2011 13:30:27 GMT Phonteq, Ну там опять со скобочкам проблема. Но то что копирнули новый код это хорошо. В предыдущем варианте опять что-то с синтаксисом это не страшно и правиться убиранием скобок с названия базы (я так думаю) либо заключения в ".база." Но в полном коде если ещё запросы которые взаимодействуют с этой таблицей Удаление, создание, очистка. Думаю более правильным вариантом нужно сделать что-то типа $unik_syn_table = unik_get_syn_table(); заменить на $unik_syn_table = "название таблицы"; Хотя есть подозрение что косяки с установкой и удалением плагина будут. К примеру удалив плагин в одном месте он удалиться везде... Можно решить это удалением строчки которая отвечает именно за удаление таблицы... $sql = "DROP TABLE $unik_syn_table"; Возможно не все варианты учел и будет что-то ещё. если что пишите :) Вопрос по БД by Phonteq http://webmasters.ru/forum/showpost.php?p=205559 Sun, 30 Oct 2011 15:42:03 GMT Kopc, хорошо, огромное спасибо! Дали пищи для размышлений на будущие дни ;)