БООООЛЬШАЯ ошибка. И очень тсранное поведение Друпала.

Главные вкладки

Аватар пользователя smile smile 3 октября 2006 в 11:35

Сделал я новый блок, у который инклюдлится пхп-шный фалик, который в свою очередь выводит последние посты с форума (VB) на морду. Сделал так:
<?php
ob_start();
include("../threads.php");
$out1 = ob_get_contents();
ob_end_clean();
echo iconv("WINDOWS-1251", "UTF-8", $out1);
?>

Нажал на "Сохранить" и увидел на морде админки такое... что ни словом сказать ни пером описать. А именно вот:

user warning: Table 'locales_source' doesn't exist query: SELECT s.lid, t.translation FROM locales_source s INNER JOIN locales_target t ON s.lid = t.lid WHERE s.source = '\nBlocks are boxes of content that may be rendered into certain regions of your web pages, for example, into sidebars. They are usually generated automatically by modules, but administrators can create blocks manually.\nOnly enabled blocks are shown. You can position blocks by specifying which area of the page they should appear in (e.g., a sidebar). Highlighted labels on this page show the regions into which blocks can be rendered. You can specify where within a region a block will appear by adjusting its weight.\nIf you want certain blocks to disable themselves temporarily during high server loads, check the \'Throttle\' box. You can configure the auto-throttle on the throttle configuration page after having enabled the throttle module.\nYou can configure the behaviour of each block (for example, specifying on which pages and for what users it will appear) by clicking the \'configure\' link for each block.\n' AND t.locale = 'ru' in /bhome/part3/02/www/drupal/includes/database.mysql.inc on line 120.

И еще строк пятнадцать такого же примерно содержания.

После всего этого имею только один вопрос: ЧТО ЭТО БЫЛО?

Комментарии

Аватар пользователя rgb rgb 3 октября 2006 в 18:33

Чего-то я не понял:

Quote:
выключаю блок с пхпшкой внутри - все ок.

Это к чему отностится? К какому коду? Который внутри threads.php?

Аватар пользователя smile smile 3 октября 2006 в 19:55

еще раз, есть блок. в нем есть php-код. в котором есть инклюд threads.php.

как только я включаю весь этот блок в друпале - вылезает ошибка. как только выключаю - все ок.

Аватар пользователя rgb rgb 4 октября 2006 в 9:56

В таком случае, я не понимаю Ваш ответ на предложение lalex-а проверить корректность запроса к БД Smile Из чего вы заключили, что запрос "нормальный"? Из того, что отключив блок, не получили никакой ошибки?

Аватар пользователя smile smile 4 октября 2006 в 11:34

Ошибки с текстами запросов относятся к переводам (как видно из первого поста). При отключении блока с инклюдом переводы благополучно забираются этими же запросами из базы без ошибок и выводятся в соотвествующих местах, из чего я делаю вывод, что с запросами все в порядке. Логично вроде. Нет?

Что характерно - с самими переводами никаких проблем тоже нет, сначала выводятся соотвествующие результаты из запроса, а потом эти варнинги (как бы повторно).

Отсюда как бы следующий вывод следует: мой инклюд или его содержимое мешает нормальной работе друпала с базой, но что особенно странно - не влияет на результаты этой работы (кроме множества варнингов)

Аватар пользователя rgb rgb 4 октября 2006 в 15:17

Quote:
При отключении блока с инклюдом переводы благополучно забираются этими же запросами из базы без ошибок и выводятся в соотвествующих местах, из чего я делаю вывод, что с запросами все в порядке. Логично вроде.

Smile Понятно. Мы с Вами о разных запросах разговор ведём. И я имел ввиду именно то, что Вы говорите ниже:

Quote:
Отсюда как бы следующий вывод следует: мой инклюд или его содержимое мешает нормальной работе друпала с базой

Именно это... Сорри, если не понятно выражался.

И ещё - я сразу не заметил, какая версия Дрюпала у Вас. К сожалению с CVS-ной помочь не смогу -нет её под рукой. Если баг проявляется и в 4.7.3, то можем продолжить обсуждение. В этом случае покажите Ваш threads.php.

Аватар пользователя Nick Nick 4 октября 2006 в 16:25

Знаете ... Мы вам не можем ничем помочь. Дело в том, что телепаты внезапно собрались и уехали в отпуск. Сказали работа нервная, устали...
.
В общем, когда они вернуться и мы узнаем код threads.php, тогда что-нибдь вам ответим...

Аватар пользователя smile smile 20 ноября 2006 в 20:33

несколько отошел от темы, но вновь натолкнулся на нее же.

в общем такие ошибки возникают, когда в подключаемом iclude файла имеются две конструкции:

mysql_connect
и
mysql_select_db

т.е. данные для инклюда берутся из базы нормально, а вот друпаловское окурежение (переводы, стили и т.д) - как бы уже до базы достучаться не может.

отчего такая фигня?

Аватар пользователя rgb rgb 21 ноября 2006 в 10:04
  1. Действительно ли Вам нужно в подключаемом файле явно коннектиться к БД? Почему не подходит текущий установленный Дрюпалом коннект?
  2. Если всё же это необходимо, то можно пробовать делать так:
    <?php
    function my_new_db_func(/*..*/) {
      db_set_active('my_new_connection');

      //
      // .. идёт работа с другим коннекшном к БД
      //

      db_set_active();
        // устанавливаем коннекшн "по-умолчанию"
        //  для остальных частей Дрюпала
    }
    ?>

    Этот вариант подойдёт Вам, в случае, если нужен отдельный коннект к той же БД. Если же требуется обращение к другой БД, то надо будет подумать... Там придётся танцевать вокруг $db_url.

Аватар пользователя smile smile 21 ноября 2006 в 10:50

Всем спасибо, разобрался. Уже открытый коннект не подходит, потому что данные друпала и подключаемого модуля лежат в РАЗНЫХ базах.

Аватар пользователя smile smile 21 ноября 2006 в 19:31

Рассказываю:
sites/default/settings.php:
Database URL format:
$db_url['default'] = 'mysql://iser:pass@mysql.baze/base-name';
$db_url['base2'] = 'mysql://user:pass@mysql.baze/base-name2';
$db_prefix = '';

Потом с скрипте:
db_set_active('base2');
...
db_set_active('default');

Надеюсь логика ясна.

Чуваку, который про телепатов говорил - превед! Большой.