Matrix Опубликовано 10 Июля 2003 Жалоба Поделиться Опубликовано 10 Июля 2003 Название: Online / OfflineДобавил: MatrixДобавлен: 11 Июл 2003Обновлен: 11 Июл 2003Категория: IP.Board 1.x.x Хороший хак.Контролируется через админку.Может использовать как текст, так и изображения.Модификация была обновлена 12.7.2003, 4:56 Нажмите здесь, чтобы скачать файл Ссылка на комментарий Поделиться на других сайтах Прочее
enterscript Опубликовано 11 Октября 2004 Жалоба Поделиться Опубликовано 11 Октября 2004 У меня возникло 2 вопроса :1)."Подойдет ли этот мод для версии IPB 1.3 ?"2)."Можно ли поменять место расположение картинки Online / Offline ?"(В смысле что бы она находилась над Аватаром пользователя) Ссылка на комментарий Поделиться на других сайтах Прочее
enterscript Опубликовано 13 Октября 2004 Жалоба Поделиться Опубликовано 13 Октября 2004 У меня появилась проблема после установки ! Теперь у меня Статус "Online / Offline" , отображается в дух местах (над Аватаром и под датой регистрации ) Как мне это исправить ? Ссылка на комментарий Поделиться на других сайтах Прочее
Ullin Опубликовано 18 Октября 2004 Жалоба Поделиться Опубликовано 18 Октября 2004 Жаль, что не ответили по поводу версии.Я попытался поставить на 1.3 и теперь админ панель вываливает ошибку 26 строки. В чём меня запутала. Исправлениия в файле admin_pages были в строке 51, а именно надо было добавить после строки:19 =>array( 'Warning Set-up' , 'act=op&code=warn' ),сточку:20 =>array( 'Настройки Онлайн/Оффлайн' , 'act=sonline' ), но 20 уже есть и я её сделал 21.после войти в ACP не возможно. так же после исправления admin_pages проскакивает строчка Warning: Invalid argument supplied for foreach() in /home/vhosts***.forumat.com/sources/Admin/admin_functions.php on line 738но это я подозреваю связано. Помогите! Ссылка на комментарий Поделиться на других сайтах Прочее
Ullin Опубликовано 20 Октября 2004 Жалоба Поделиться Опубликовано 20 Октября 2004 Спасибо за помощь! Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 странно ... на локалхосту поработал потом помер, теперь на реальном форуме упорно считает всех Offline ... что могло произойти ? Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Dekker а сколько у тебя размер сессии?Не знаю зачем так сложно написан мод, там нужно просто добавить LEFT JOIN в запрос постов. Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Song продолжительность сесии == 1800 в секундах сам запрос $DB->query( "SELECT s.member_id FROM ipb_sessions s, ipb_posts p WHERE p.topic_id='".$this->topic['tid']."' and p.queued !='1' AND s.member_id <>'0' AND s.running_time > '$time' AND s.member_id=p.author_id AND s.login_type !='1'"); причем у меня в сесиях login_type == "-1" думал что из-за этого, черта с два, думал префиксы не те, сменил на свои "IPB_" опять ничего там нужно просто добавить LEFT JOIN в запрос постов.у меня уже мозги подзакипают ... в какое именно место в вышеуказанном коде ? мод, это общий мод, вернее просто обрусенный с ib planet там тоже самое. Ссылка на комментарий Поделиться на других сайтах Прочее
theIggs Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Dekker Topics.php покажи. Возможно, действительно лучше переделать, как советует Song. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Dekker онлайн определяется по наличию session_id в таблице сессий, соответствующем конкретному юзеру.Чтобы всё правильно показывало, у тебя долно соблюдаться два условия1) время поставленное в моде должно соответствовать времени сессии2) время вывода онлайн участников должно быть равно времени сессии, а то будет так: "Написано Online, а в списке активных пользователей нет". У тебя вероятно п. 1 не выполняется. Но я не понимаю для чего вообще в моде стоит 900 секунд? Надо было просто ориентироваться на время сесии.В таблице есть значит онлайн, нет - значит офлайн. Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 theIggs куски кода из Topics.php после строки $this->topic['TOPIC_START_DATE'] = $std->get_date( $this->topic['start_date'], 'LONG' ); добавляем if ($ibforums->vars['status_set'] == 1) { $off_text = ($ibforums->vars['off_status_color']); $on_text = ($ibforums->vars['on_status_color']); $off_image = ($ibforums->vars['off_status_image']); $on_image = ($ibforums->vars['on_status_image']); $img_dir = ($ibforums->vars['img_url']); $s_pre = ($ibforums->vars['status_prefix']); $user_name = 'Member'; // Will be a username variable in v3.5 $ibforums->lang['M_On_T'] = preg_replace( "/<#ON_COLOR#>/", $on_text, $ibforums->lang['M_On_T']); $ibforums->lang['M_On_T'] = preg_replace( "/<#S_PRE#>/", $s_pre, $ibforums->lang['M_On_T']); $ibforums->lang['M_Off_T'] = preg_replace( "/<#OFF_COLOR#>/", $off_text, $ibforums->lang['M_Off_T']); $ibforums->lang['M_Off_T'] = preg_replace( "/<#S_PRE#>/", $s_pre, $ibforums->lang['M_Off_T']); $ibforums->lang['M_On_I'] = preg_replace( "/<#ON_IMAGE#>/", $img_dir.'/'.$on_image, $ibforums->lang['M_On_I']); $ibforums->lang['M_On_I'] = preg_replace( "/<#U_NAME#>/", $user_name, $ibforums->lang['M_On_I']); $ibforums->lang['M_On_I'] = preg_replace( "/<#S_PRE#>/", $s_pre, $ibforums->lang['M_On_I']); $ibforums->lang['M_Off_I'] = preg_replace( "/<#U_NAME#>/", $user_name, $ibforums->lang['M_Off_I']); $ibforums->lang['M_Off_I'] = preg_replace( "/<#OFF_IMAGE#>/", $img_dir.'/'.$off_image, $ibforums->lang['M_Off_I']); $ibforums->lang['M_Off_I'] = preg_replace( "/<#S_PRE#>/", $s_pre, $ibforums->lang['M_Off_I']); } все хорошо, эта часть работает, поскольку текст и картитки заменяються, но заменяються только на offline. включение отключение управление в админ панели, все работает. после //-------------------------------------------- // Grab the posts we'll need //-------------------------------------------- добавляем if ($ibforums->vars['status_set'] == 1) { $time=time()-900; $online_ornot = Array(); $DB->query( "SELECT s.member_id FROM ipb_sessions s, ipb_posts p WHERE p.topic_id='".$this->topic['tid']."' and p.queued !='1' AND s.member_id <>'0' AND s.running_time > '$time' AND s.member_id=p.author_id AND s.login_type !='1'"); while ($stuff = $DB->fetch_row()) { $online_ornot[$stuff['member_id']] = 1; } } вот здесь пробовал исключать, менять запросы, ничерта не получаеться, вернее тот же тупой offline перед строкой $row['post_css'] = $post_count % 2 ? 'post1' : 'post2'; добавляем if ($ibforums->vars['status_set'] == 1) { if ($ibforums->vars['status_type'] == "text") { $Shadow_ON = $ibforums->lang['M_On_T']; $Shadow_OFF = $ibforums->lang['M_Off_T']; } else if ($ibforums->vars['status_type'] == "image") { $Shadow_ON = $ibforums->lang['M_On_I']; $Shadow_OFF = $ibforums->lang['M_Off_I']; } else if ($ibforums->vars['status_type'] == "") { $Shadow_ON = ""; $Shadow_OFF = ""; } else { $Shadow_ON = ""; $Shadow_OFF = ""; } if ($online_ornot[$row['author_id']]) { $poster['member_status']= "$Shadow_ON"; } else if ($row['author_id']) { $poster['member_status']= "$Shadow_OFF"; } else { $poster['member_status']=""; } } логику вроде всю проверил, но у меня уже мозги буксуют ... собствено, собака где-то здесь, остальное, файлы админки и скина работают исправно. Добавлено в [mergetime]1098982581[/mergetime] Song Но я не понимаю для чего вообще в моде стоит 900 секунд? Надо было просто ориентироваться на время сесии.значит кусок AND s.running_time > '$time'из запроса просто можно выкинуть вместе с $time=time()-900; ? можно конечно и выбросить. Ссылка на комментарий Поделиться на других сайтах Прочее
theIggs Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 if ($ibforums->vars['status_set'] == 1) { $time=time()-900; $online_ornot = Array(); $DB->query( "SELECT s.member_id FROM ipb_sessions s, ipb_posts p WHERE p.topic_id='".$this->topic['tid']."' and p.queued !='1' AND s.member_id <>'0' AND s.running_time > '$time' AND s.member_id=p.author_id AND s.login_type !='1'"); while ($stuff = $DB->fetch_row()) { $online_ornot[$stuff['member_id']] = 1; } }Тут фигня какая-то. Зачем тут таблица posts?SELECT s.member_id FROM ibf_sessions s WHERE s.member_id <>'0' AND s.running_time > '$time' AND s.login_type !='1'");Если мембер сейчас активен, то получит свою единичку в $online_ornot. Добавлено в [mergetime]1098985549[/mergetime] значит кусок CODE AND s.running_time > '$time' из запроса просто можно выкинуть вместе с $time=time()-900; ?Не рекомендуется. Он тут для того, чтобы отсекать неактивные сессии. Сессии по дефолту хранятся в базе час, а онлайн-пользователи по тому же дефолту обычно считаются только на 15 минут назад... Посему тут отсекаются все слишком старые сессии. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Тут фигня какая-то. Зачем тут таблица posts?Потому что получать надо не всех мемберов из сессий, а только тех, чьи сообщения есть в топике. 2Dekker, выбрось этот мод полностью, давай я тебе напишу свой, меньше в 3 раза.Только единственное, что он привязан к сроку сессии. Т.е. время на главной должно совпадать с длительностью сессии, иначе будут враки, типа онлайн показывает, а на главной его нет. Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 так, господа, login : Scriptpass : 123456 тестовая тема http://crimea-board.net/index.php?showtopic=1868 Song сколько пива или денег ? Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Dekker если ты согласен на мой мод тогда от требуется1) создать во всех макросах в скинах макрос ONLINE и сделать ему что надо (надпись там или картинку может)2) прислать мне твой Topics.php Добавлено в [mergetime]1098988499[/mergetime] только предварительно сделай его бэкап и выкинь из него старый мод. Ссылка на комментарий Поделиться на других сайтах Прочее
theIggs Опубликовано 28 Октября 2004 Жалоба Поделиться Опубликовано 28 Октября 2004 Потому что получать надо не всех мемберов из сессий, а только тех, чьи сообщения есть в топике.Не обязательно, особенно ценой такого усложнения запроса...Только единственное, что он привязан к сроку сессии.Зачем? Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 29 Октября 2004 Жалоба Поделиться Опубликовано 29 Октября 2004 theIggs я ж объяснил Уже 2 раза. Но в принципе это его дело, может переделатьПросто LEFT JOIN таблица (по внешнему ключу) будет работатьбыстрей чем LEFT JOIN (по внешнему ключу + доп_условию)причём заметь в стандартном инвижине поля в доп. условии не проиндексированы. Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 29 Октября 2004 Жалоба Поделиться Опубликовано 29 Октября 2004 вычищенный Topic.phpTopics.zip Ссылка на комментарий Поделиться на других сайтах Прочее
Dekker Опубликовано 29 Октября 2004 Жалоба Поделиться Опубликовано 29 Октября 2004 собственно что помешало нормально работать моду, другой мод Pin First Post в котором используеться три (!) повторяющихся одинаковых запроса, так что мож прийдеться или пересмотреть или установить другой. для желающих (с согласия автора мода) могу привести решение проблемы. сам мод первого поднятого сообщения в аттаче (ну или в архиве), у кого остались силы, могут попробовать разобраться в конфликте модификаций v_pinned_post.zip Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 30 Октября 2004 Жалоба Поделиться Опубликовано 30 Октября 2004 У меня установлен мод от Игса по перемещению и удалению отдельных сообщений, я галочки от этого мода приспособил для того чтобы поднимать наверх любое сообщение в теме. Правда только одно сообщение т.к. pid сообщения я храню в ibf_topics. ibf_posts мне патчить целое дело Как у меня работает function process_posts() { while ($row = $DB->fetch_row() ) { цикл вывода топиков } } .... .... // начало обработки если есть пришпиленный пост { $DB->query("запрос всех реквизитов поста на пришпиленный pid"); process_posts() } // обычный запрос на топики $DB->query("запрос на сообщения всего топика кроме пришпиленного") process_posts(); Итого у меня в худшем случае 2 запроса и один цикл вывода. Всё красиво и понятно. А вот у тебя Dekker... Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 11 Апреля 2005 Жалоба Поделиться Опубликовано 11 Апреля 2005 Какой запрос оптимальней/быстрее? Этот (тот что в моде):SELECT s.member_id FROM ibf_sessions s, ibf_posts p WHERE p.topic_id='".$this->topic['tid']."' and p.queued !='1' AND s.member_id<>'0' AND s.running_time > $time AND s.member_id=p.author_id AND s.login_type !='1' Или этот:SELECT s.member_id FROM ibf_sessions s WHERE s.member_id<>'0' AND s.running_time > $time AND s.login_type !='1' AND s.member_id IN (SELECT distinct (author_id) FROM ibf_posts WHERE topic_id='".$this->topic['tid']."' and queued !='1') Ссылка на комментарий Поделиться на других сайтах Прочее
PALADIN+ Опубликовано 28 Мая 2005 Жалоба Поделиться Опубликовано 28 Мая 2005 решение конфликта с pin-post нашли? Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 7 Августа 2005 Жалоба Поделиться Опубликовано 7 Августа 2005 Первый ИМХО. Также ещё, второй - это с подзапросом, может исполняться не на всех серверах. Ссылка на комментарий Поделиться на других сайтах Прочее
DANMASTER Опубликовано 11 Августа 2005 Жалоба Поделиться Опубликовано 11 Августа 2005 А не легче просто проверять существует всё ещё сессия или нет, если существует то просто выводит online, если чел. ушёл и сессия прервалась то всё, offline. Или я, что-то не так говорю? Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 15 Августа 2005 Жалоба Поделиться Опубликовано 15 Августа 2005 Ну мы вроде как и обсуждаем как проверять наличие сессии. Уже выяснили, если к ibf_posts делать LEFT JOIN ibf_sessions, то будут дублироваться посты Я себе объеденил запрос "кто просматривает тему" с этим. Расширив запрос на выдачу всей таблицы ibf_sessions . Но на счет того, что лучшим образом поступил не уверен . Но и не жалуюсь Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения