Код создаёт блок с пятью последними сообщениями форума 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;
}
}
Написанное актуально для
Drupal 6.x
Комментарии
И все-таки это проще сделать на стороне движка форума, а в блок Друпала включать только подключение скрипта.
не разумно подгружать ядро форума, только для того чтобы сделать запрос к бд
А для 7-ки так правильно? http://prof-labs.ru/blog/drupal/163
Можно же просто без параметра переключиться на базу по умолчанию
https://api.drupal.org/api/drupal/includes!database!database.inc/functi…
Актуально для любой версии друпала.
не факт, что до запроса была активна дефолтная
После вашего коммента въехал в суть вопроса...)))
Я имел ввиду что записи равнозначны
И понял, что ваша запись более правильна, так как переключается назад на нужную базу,
$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
Алексей, спасибо! )
Добавить комментарий