Перейти к контенту

[1.x.x]Отметка топиков прочитанным, прочитан / не прочитан


theIggs

Рекомендуемые сообщения

Название: Отметка топиков прочитанным, прочитан / не прочитан

Добавил: theIggs

Добавлен: 18 Авг 2004

Обновлен: 03 Мар 2005

Категория: IP.Board 1.x.x

 

Вы, конечно, замечали, что стоит ненадолго закрыть окошко браузера,

как при следующем входе на форум все темы уже отмечены как прочитанные,

хотя вы даже не успели их прочесть. То же самое происходит, если нажать ссылку "Выход", а потом войти снова.

Данная модификация исправляет это

маленькое недоразумение.

Теперь темы будут считаться непрочитанными до тех пор, пока вы их

действительно не прочтёте, либо же до истечения заданного интервала

(который каждый пользователь может установить в своём Профиле).

 

© 2004 Vanish ( http://www.ibresource.ru/ )

 

Читайте тему поддержки, там важная информация!

 

Нажмите здесь, чтобы скачать файл

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 124
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

После установки данной модификации на "IPB 1.3 русский модифицированный" и пропатченный до 1.3.1 перестала работать функция "Отметить все сообщения прочитанными".

 

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

Ссылка на комментарий
Поделиться на других сайтах

После установки данной модификации на "IPB 1.3 русский модифицированный" и пропатченный до 1.3.1 перестала работать функция "Отметить все сообщения прочитанными".

Надо подумать над доработкой... ;)

 

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

Вопрос можно? А нафига заходить в форум-то, если ты там ничего читать не собираешься? Имхо, так оно правильней всего.

А по твоему как должно быть? Зашёл в форум, заинтересовался парой тем, прочёл их. Больше ничего интересного для тебя в форуме нет - а форум горит непрочитанным. :D ?

Ссылка на комментарий
Поделиться на других сайтах

theIggs

при всем уважении к тебе, имхо, const прав в формулировках....

часто в раздел заходишь по "последнему непрочитанному"... но ведь это не значит, что из темы ты прыгнешь на галвную раздела, а не главную всего форума...

а потом уже и не поймешь - читал-не читал...

 

то есть в данном случае, имхо, можно как считать как с PM'ом... зашел, но все новые не прочитал.

правильно - в шапке горит "0 НОВЫХ писем". Новых на самом деле нет, но НЕПРОЧИТАННЫЕ есть...

 

тогда наверное лучше сразу в макросах править.... чтоб не путать никого формулировками

Ссылка на комментарий
Поделиться на других сайтах

Да никаких возражений нет, предлагайте свои алгоритмы определения прочтения форума. :D
Ссылка на комментарий
Поделиться на других сайтах

Все на самом деле просто: человек заходит на форум - видит непрочитанные форумы, заходит в них, видит кучу ответов/новых сообщений, читать ему влом, поэтому он закрывает форум и идеть спать с надеждой почитать их завтра, а на завтра он видит, что тот или иной форум уже отмечен прочитанным и не заходит в него...

 

ИМХО надо сделать так, чтобы о тех пор пока в форуме остаются непрочитанные сообщения, сам форум, его иконка горела непрочитанной...

 

И неплохо бы было починить функцию прочтения, о которой я говорил.

Добавлено в [mergetime]1092925884[/mergetime]

theIggs

А по твоему как должно быть? Зашёл в форум, заинтересовался парой тем, прочёл их. Больше ничего интересного для тебя в форуме нет - а форум горит непрочитанным.  ?

 

Для этого есть - "Отметить форум прочитанным" и "Отметить все сообщения прочитанными"

Ссылка на комментарий
Поделиться на других сайтах

поэтому он закрывает форум и идеть спать с надеждой почитать их завтра, а на завтра он видит, что тот или иной форум уже отмечен прочитанным и не заходит в него...

брееед, сообщения то остаются помеченными как непрочитанные.

К выделенному. Раз с надеждой, то наверное запомнит где он почитать должен =)))

Ссылка на комментарий
Поделиться на других сайтах

Сделать это можно, но по опыту говорю, что возрастёт нагрузка на мускул. Хотя конечно как реализовать.
Ссылка на комментарий
Поделиться на других сайтах

Хотя конечно как реализовать.

простейший способ, через классовую переменную new_post, если она меньше 1 то отмечать форум как прочитанный.

Ссылка на комментарий
Поделиться на других сайтах

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

так что может и говорить не о чем - разработчики имели в виду одно, а мы тут обсуждаем совсем другое :)

 

то бишь этот мод просто исправляет недоразумение в том, что внутри форумов называется "непрочитанными темами"...

 

а переделать "есть новые сообщения в форуме" в "есть непрочитанные..." - это предмет совсем другой модификации...

 

уфф... что-то я загнался... :D

 

Добавлено в [mergetime]1092936265[/mergetime]

извините за совсем тупой вопрос...

 

в чистом functions.php у 1.2.Final нет строки "m.sub_end,"

 

она как там появляется? после шага 0. что ли? :)

 

Добавлено в [mergetime]1092936700[/mergetime]

собственно, единственный запрос где есть работа с "m.энисинг," в этом скрипте у 1.2.final - вот этот:

 

$DB->query("SELECT moderator.mid as is_mod, moderator.allow_warn, m.id, m.name, m.mgroup, m.password, m.email, m.restrict_post, m.view_sigs, m.view_avs, m.view_pop, m.view_img, m.auto_track,
                              m.mod_posts, m.language, m.skin, m.new_msg, m.show_popup, m.msg_total, m.time_offset, m.posts, m.joined, m.last_post,
                                          m.last_visit, m.last_activity, m.dst_in_use, m.view_prefs, m.org_perm_id, m.temp_ban, g.*
                                          FROM ibf_members m
                                            LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup)
                                            LEFT JOIN ibf_moderators moderator ON (moderator.member_id=m.id OR moderator.group_id=m.mgroup )
                                          WHERE m.id=$member_id");

 

 

куда тут все это дело можно втиснуть?

Ссылка на комментарий
Поделиться на других сайтах

собственно, единственный запрос где есть работа с "m.энисинг," в этом скрипте у 1.2.final - вот этот:

Да, это оно. Под 1.2 я не тестировал.

Вставляй после m.email,

Ссылка на комментарий
Поделиться на других сайтах

мдя....

 

и запроса

DB->query("SELECT t.tid FROM ibf_topics t
    	WHERE t.approved=1 AND t.forum_id IN($forums) AND t.last_post > '".$ibforums->member['last_visit']."'");

 

в Search.php у 1.2 тоже нету...

есть один почти такой, но дальше код идет совершенно другой.

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

 

     //------------------------------------------------
                // Get the topic ID's to serialize and store into
                // the database
                //------------------------------------------------
                
                $DB->query("SELECT topic_id FROM ibf_posts WHERE queued <> 1 AND forum_id IN($forums) AND post_date > '".$ibforums->member['last_visit']."'");
        
                $max_hits = $DB->get_num_rows();
                
                $posts  = "";
                
                while ($row = $DB->fetch_row() )
                {
                        $posts .= $row['topic_id'].",";
                }
        
                $DB->free_result();

 

 

оффтоп: theIggs, пошто такого клевого красненького зверушку убил? :D

Ссылка на комментарий
Поделиться на других сайтах

мдя... что-то я дествительно тормознул... там выбор из другой таблицы...

а там где из нужной, в которой есть поле last_post, дальше в коде вместо $posts - $topics...

Ссылка на комментарий
Поделиться на других сайтах

А чё-то не понял прикол?! Я поставил себе на форум этот мод. И теперь у меня все темы горят как непрочитанные :D Мне чё теперь надо их всех прочитать чтоли, чтоб они перестали светиться как "Непрочитанные"???
Ссылка на комментарий
Поделиться на других сайтах

Extazy

внизу страницы есть "Отметить форум как непрочитанный".

Ссылка на комментарий
Поделиться на других сайтах

Модификация обновлена, добавлено исправление функции "Пометить прочитанным..."

==============================================================
9. Добавление от 23.08.2004 - исправление функции 
   "Пометить все прочитанным".
==============================================================
Открыть файл sources/Login.php
==============================================================
Найти ДВАЖДЫ:
==============================================================

 $DB->query("UPDATE ibf_members SET last_visit='".time()."', last_activity='".time()."' WHERE id='".$ibforums->member['id']."'");

==============================================================
Заменить на:
==============================================================

 $DB->query("UPDATE ibf_members SET board_read='".time()."' WHERE id='".$ibforums->member['id']."'");

==============================================================
Найти:
==============================================================

        if ( $ibforums->input['i'] == 1 )
        {	

==============================================================
Заменить на:
==============================================================

 if (!$forums_read = unserialize($ibforums->member['forums_read'])) $forums_read = array();
 
 /* if ( $ibforums->input['i'] == 1 )
 {

==============================================================
Найти:
==============================================================

         while ( $r = $DB->fetch_row() )
         {
        	 $ibforums->forum_read[ $r['id'] ] = time();
         }
        }
        
        //--------------------------------------	
        // Reset cookie (yum)
        //--------------------------------------
        
        $ibforums->forum_read[ $ibforums->input['f'] ] = time();
	 
 $std->hdl_forum_read_cookie('set');

==============================================================
Заменить на:
==============================================================

	 while ( $r = $DB->fetch_row() )
	 {
   $forums_read[ $r['id'] ] = time();
   $fid .= ','.$r['id'];
	 }
 }*/
 
 //--------------------------------------
 // Reset cookie (yum)
 //--------------------------------------
 
 $forums_read[$ibforums->input['f']] = time();
 
 $forums_read = serialize($forums_read);
 
 if (isset($ibforums->forum_read[$ibforums->input['f']]))
 {
	 $DB->query("UPDATE ibf_log_forums SET logTime='".time()."' WHERE fid='".$ibforums->input['f']."' AND mid='".$ibforums->member['id']."'");
 }
 else
 {
	 $DB->query("INSERT INTO ibf_log_forums VALUES('".$ibforums->member['id']."', '".$ibforums->input['f']."','".time()."')");
 }
 
 $DB->query("UPDATE ibf_members SET forums_read = '".$forums_read."' WHERE id = '".$ibforums->member['id']."'");

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

подскажите плз кто-нибудь... как все это заточить под 1.2?

возвращаясь к прежним постам...

 

в Search.php у 1.2. нет такого:

$DB->query("SELECT t.tid FROM ibf_topics t
WHERE t.approved=1 AND t.forum_id IN($forums) AND t.last_post > '".$ibforums->member['last_visit']."'");

 

на тех же примерно строчках находится вот что:

 

$DB->query("SELECT topic_id FROM ibf_posts 
WHERE queued <> 1 AND forum_id IN($forums) AND post_date > '".$ibforums->member['last_visit']."'");

 

вроде бы выполняет те же функции.

 

но в таблице ibf_posts нет поля last_post, а выбор из такового нужно добавить при установке.

 

как обойти?

просто заменить старый запрос на новый, к ibf_topics ?

Ссылка на комментарий
Поделиться на других сайтах

Так, вроде все поставилось.

Спасибо за нужную модификацию!

 

На всякий случай - вдруг кто будет под 1.2 ставить - отличия уже выше обсудили, их два -

 

1. В functions.php нет

m.sub_end,

 

2. В Search.php ищем немного другой запрос (см. чуть выше) и заменяем все как в инструкции. Вроде функциональность не страдает от этого.

 

ну и еще мелочь... если префикс таблиц не ibf_, то запросы из шага 0 соответственно должны выглядить несколько иначе...

Ссылка на комментарий
Поделиться на других сайтах

но в таблице ibf_posts нет поля last_post,

это как это?

Это одно из основных полей таблицы!!

Ссылка на комментарий
Поделиться на других сайтах

Song,

слюшай, мамой клянусь, нету, да? :D

но локальном, чистом, специально перепроверил...

 

ibf_posts:

pid - собсно номер поста

append_edit - наверное, есть ли надпись "Отредактировано"

edit_time - время едитировки

author_id - автор

author_name - его имя

use_sig - есть ли подпись

use_emo - юзать ли смайлы

ip_address - ясно

post_date - время

icon_id - иконка у поста

post - собственно текст

queued - требует ли подтверждения

topic_id - где торчит

forum_id - в каком форуме

attach_id - не знаю, но явно не ласт-пост ;))

attach_hits - скока людей смотрели аттач

attach_type - mime

attach_file - наверное, адрес к файлу?

post_title - х.з. - наверное, если тему начинаешь..

new_topic - ну собственно - первый ли это пост в теме

edit_name - кто перепахивал этот пост...

 

да и нафиг там ластпост?

кабы такое поле было, проблемы бы не было с редиректом на него с главной страницы :))) но это уже оффтоп :)

Ссылка на комментарий
Поделиться на других сайтах

last_post - важное поле в ibf_topics и ibf_forums, а в posts-то оно зачем? :D
Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.