Drupal → Как сделать запрос к другой базе данных
Код создаёт блок с пятью последними сообщениями форума IPB, база которого называется ipb_base
:
/** * Implements hook_block() */ function mymodule_block($op = 'list', $delta = 0, $edit = array()) { if ($op == 'list') { $blocks[0]['info'] = 'Последние сообщения на форуме'; return $blocks; } if ($op == 'view') { global $db_url; // параметры новой бд $ipb_db_url = 'mysqli://root:qwerty@localhost/ipb_base'; if (is_array($db_url)) { $db_url += array('ipb' => $ipb_db_url); } else { $db_url = array('default' => $db_url, 'ipb' => $ipb_db_url); } // подключаемся к новой бд $prev_db = db_set_active('ipb'); // делаем запрос $posts = db_query_range("SELECT author_name, post FROM `posts` ORDER BY pid DESC", 0, 5); // подключаемся к предыдущей бд db_set_active($prev_db); $items = array(); while ($post = db_fetch_object($posts)) { $items[] = $post->author_name . ': ' . $post->post; } $block['subject'] = 'Последние сообщения на форуме'; $block['content'] = theme('item_list', $items); return $block; } }
Комментарии
И все-таки это проще сделать на стороне движка форума, а в блок Друпала включать только подключение скрипта.
не разумно подгружать ядро форума, только для того чтобы сделать запрос к бд
А для 7-ки так правильно? http://prof-labs.ru/blog/drupal/163
https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_set_active/7
Актуально для любой версии друпала.
не факт, что до запроса была активна дефолтная
После вашего коммента въехал в суть вопроса...)))
Я имел ввиду что записи равнозначны
$prev_db - Ключ ранее активной базы данных.
Очень редко этим пользуюсь.
Опять использую это для "перекачки" данных со старого сайта на новый. И опять проблема после получения данных с донора и возврате на дефолтную базу нового Drupal все ещё думает что он та старом и пытается использовать его архитектуру.
К примеру при попытке создать сущность, которая есть только на новом сайте, drupal делает вид, что не знает о чем идёт речь.
Может есть какая функция "сброса кеша". Чтобы drupal снова пересканировал базу и "вспомнил" сущности и конфиги нового сайта.
Сам же и отвечу. Для Drupal 7
xandeadx, это подключение работает для любой базы или только drupal? у меня есть сторонняя база с отзывами, надо из нее забрать каменты.
В семерке делаю так
получаю ошибку
PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'del_appozitiv.variable' doesn't exist: SELECT 1 AS expression FROM {variable} variable WHERE ( (name = :db_condition_placeholder_0) ); Array ( [:db_condition_placeholder_0] => cron_last ) in variable_set() (line 991 of includes/bootstrap.inc).
как правильно?
Попробуйте.
http://xandeadx.ru/blog/drupal/152#comment-13733
Алексей, спасибо! )
Оставить комментарий