Как убрать кто в online?

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

Аватар пользователя moonman moonman 30 ноября 2006 в 14:40

Как убрать кто в online?
Интересует именно убирание запросов к базе данных (которых от него не мало).
Т.е. как убрать не как блок, а именно вообще его убрать нафиг, потому что если я убираю его как блок - то обращение к БД всё равно продолжается....
Как убрать???

Комментарии

Аватар пользователя axel axel 1 декабря 2006 в 2:32

Просто странный вопрос был. Имхо ты что-то перепутал.
Вот эти запросы в тексте блока who's online:
<?php
$guests = db_fetch_object(db_query('SELECT COUNT(sid) AS count FROM {sessions} WHERE timestamp >= %d AND uid = 0', time() - $time_period));
$users = db_query('SELECT uid, name, access FROM {users} WHERE access >= %d AND uid != 0 ORDER BY access DESC', time() - $time_period);
?>
если выключить блок, то этот код отрабатываться не будет. Если же всё равно видишь запросы к таблице users или sessions, то это для каких-то других целей, не для данного блока.

--
Администратор сайта «Drupal — Россия»
на вопросы по Drupal отвечаю только на форумах, не пишите в почту и приватом!

Аватар пользователя Dan Dan 1 декабря 2006 в 14:08

Если не ошибаюсь, про блоки тема уже обсуждалась. Высказывалась мысль, что блоки обрабатываются **до** анализа их состояния (вкл/откл). Поэтому отключение блока не вызовет отключение его обработки. Поправьте если не прав.

Аватар пользователя dyp@drupal.org dyp@drupal.org 1 декабря 2006 в 18:09

По-моему немного немного не так. Включенные блоки грузятся не зависимо от того показываются они на странице или нет.

Аватар пользователя dyp@drupal.org dyp@drupal.org 1 декабря 2006 в 22:00

Значит что если блок показывается только на главной, или только в блогах то грузиться будет на всех страницах.
Так же например если у вы переделали главную страницу, например убрали с нее все тизеры (т.е. на главной нет никаких постов), то все равно будут грузиться n записей с пометкой "помещено на главную страницу". n - устанавливается в настройках

Аватар пользователя coyotle coyotle 2 декабря 2006 в 11:58

Вот только что проверил в 5.0-beta2
Создал модуль с выводом блока

function test_block_block($op = 'list', $delta = 0, $edit = array()) {
 if ($op == 'list') {
     $blocks[0]['info'] = t('Test block');
     return $blocks;
  }
  else if ($op == 'view') {
    echo "test"; //<- выводим сообщение сразу в поток
    $block = array();
    global $node;
    global $nid;
    $block['subject'] = t('Test block');
    $block['content'] = "This is test =)";
    return $block;
   }
}

1. Включил блок, он появился, помимо этого в самом начале страницы вывелся test...
2. В настройках блока сделал чтобы блок был виден только на главной странице. Перешел на главную: виден и текст и блок, перешел в админку, блок не виден, текст тоже...
3. Выключил блок. Ни блок? ни текст нигде не отображается.
Можно было бы предположить, что данный хук выполняется всегда, ф-я возвращает что-то, а друпал решает показывать это или нет в зависимости от видимости блока. Но на echo - которая выводит текст прямо в поток вывода это не распространяется. Вывод - нифига код не выполняется если блок на данной странице не отображается... Хотя может в 4.7 все по другому, но сомневаюсь.

Аватар пользователя dyp@drupal.org dyp@drupal.org 3 декабря 2006 в 2:12

Он и не будет отображаться.
Давно смотрел, но суть в том, что друпал сначала пробегает по базе собирает всю инфу а потом в самом конце делает вывод. Проверять нужно модулем devel, смотреть список запросов.
Предпоследний запрос system_region_list - это он спрашивает какие регионы задействованы в шабллоне. При том что вся выборка уже сделана. Это значит что если вы в теме определенного раздела отключить регион, например в форуме вместо 2 колонок будет одна, то на выборку из базы это никак не отразится, читай будут загружены блоки из обоих колонок.
Тут еще писал http://drupal.ru/node/2270