Author |
Topic |
|
nyquist
Starting Member
Italy
6 Posts |
Posted - 04 May 2004 : 18:01:09
|
Mark Topics Read by nyquist date: 5th may, 2004
WARNING THIS IS AN ALPHA RELEASE
Features:
This MOD marks as read all topic viewed by a user untill he logs out. While a member browse the board the viewed topics (those marked with yellow folders) changes each time he views a new topic. The technique used to understand if a Topic has been viewed is based on the value of the field LASTHEREDATE of the member and elements of a new table. The installation is quite simple and can be done with a dbs file and by modifying 4 files.
Performances:
This mod requires one database access each time a topic is viewed (to store a new record in the new table TOPIC_VIEWED). It also requires only 1 more database access each time a forum page is opened to read all topics viewed by the user. Finally it requires one more database access when a member logs out to delete all member's entries in the TOPIC_VIEWED table. IMO the only real drawback of this mod is that if a member doesn't log out then his entries in the new table grows indefinitely. For this reason i'm thinking about implementing the mod using cookies instead of a database table.
Installation:
First we have to create the table. This step can be done with a dbs file. Write the following code in a text file: ------------------------copy--------------------- Mark Posts Read by Nyquist [CREATE] TOPIC_VIEWED
TV_MEMBER#int## TV_TOPIC#int## [End] -----------------------end copy---------------------
save the file as dbs_markpostread.asp, upload it to your forum directory, login as admin and choose 'MOD setup'. In the list choose Mark Posts Read by Nyquist
Once the database is created it can be easily deleted with the following dbs code:
------------------------copy--------------------- Uninstall Mark Posts Read by Nyquist [DROP] TOPIC_VIEWED [End] -----------------------end copy--------------------- Now we have to change 4 files:
topic.asp:
around line 97 find:
if strSignatures = "1" and strDSignatures = "1" then
if ViewSig(MemberID) <> "0" then
CanShowSignature = 1
end if
end if
directly after add this:
'## Mark topic read code
if MemberID <> -1 then
strSqlTopViewed = "INSERT INTO " & strActivePrefix & "TOPIC_VIEWED (TV_MEMBER, TV_TOPIC)"
strSqlTopViewed = strSqlTopViewed & " VALUES ("
strSqlTopViewed = strSqlTopViewed & cLng(MemberID) & ", "
strSqlTopViewed = strSqlTopViewed & Topic_ID & ")"
my_Conn.Execute (strSqlTopViewed),,adCmdText + adExecuteNoRecords
end if
'## End Mark topic read code
inc_func_common.asp:
around line 991 find
sub ClearCookies()
directly under that add:
'##mark topic read by nyquist
'update last access date-time:
strMyForumTimeAdjust = DateAdd("h", strTimeAdjust , Now())
strMyUserName = Request.Cookies(strUniqueID & "User")("Name")
UpdateLastHereDate DateToStr(strMyForumTimeAdjust),strMyUserName
'delete entries of Member from table TOPIC_VIEWED:
MyMemberID = cLng(getMemberID(strMyUserName))
MyStrSql = "DELETE FROM " & strTablePrefix & "TOPIC_VIEWED"
MyStrSql = MyStrSql & " WHERE TV_MEMBER = " & MyMemberID
my_conn.Execute (MyStrSql),,adCmdText + adExecuteNoRecords
'##mark topic read by nyquist end
forum.asp:
around line 439 find:
if iTopicCount = "" then
Response.Write " <tr>" & vbNewLine & _
" <td colspan=""7"" bgcolor=""" & strForumCellColor & """><font face=""" & strDefaultFontFace & """ size=""" & strDefaultFontSize & """ color=""" & strForumFontColor & """><b>No Topics Found</b></font></td>" & vbNewLine & _
" </tr>" & vbNewLine
else
directly after that add:
'##mark topic read by nyquist
strSqlTV = "SELECT TV_TOPIC FROM " & strMemberTablePrefix
strSqlTV = strSqlTV & "TOPIC_VIEWED WHERE TV_MEMBER = "
strSqlTV = strSqlTV & cLng(MemberID)
set TVrs = Server.CreateObject("ADODB.Recordset")
TVrs.cachesize = strPageSize
TVrs.open strSqlTV, my_Conn, adOpenStatic
if not TVrs.EOF then
elencoTV = TVrs.GetRows
nroTV = UBound(arrTopicData, 2)
else
nroTV = 0
end if
TVrs.Close
set TVrs = nothing
'##end mark post read
around line 487 find
Topic_ID = arrTopicData(tTOPIC_ID, iTopic)
directly after that add:
'##mark topic read by nyquist
TVcount = 0
if nroTV > 0 then
for Each singoloTV in elencoTV
if cLng(Topic_ID) = cLng(singoloTV) then
TVcount = 1
exit for
end if
next
end if
'##mark topic read by nyquist end
around line 525 find
if Topic_Sticky and strStickyTopic = "1" then
if Topic_LastPost > Session(strCookieURL & "last_here_date") then
change the second line to to
'##mark topic read by nyquist line changed
if Topic_LastPost > Session(strCookieURL & "last_here_date") and TVcount <> 1 then
'##mark topic read by nyquist line changed end
around line 560 find
if ArchiveView = "true" then
Response.Write getCurrentIcon(strIconFolderArchived,"Archived Topic","hspace=""0""")
elseif Topic_LastPost > Session(strCookieURL & "last_here_date") then
change the last line to :
'##mark topic read by nyquist line modified
elseif Topic_LastPost > Session(strCookieURL & "last_here_date") and TVcount <> 1 then
'##mark topic read by nyquist line modified end
inc_func_chknew.asp:
around line 72 find
Function ChkIsNew2(dt)
if Topic_Replies = "" then Topic_Replies = rs("T_REPLIES")
if dt > Session(strCookieURL & "last_here_date") then
change last line to:
'##mark topic read by nyquist line modified
if dt > Session(strCookieURL & "last_here_date") and TVcount <> 1 then
'##mark topic read by nyquist line modified end
here you go, that's it |
|
PeeWee.Inc
Senior Member
United Kingdom
1893 Posts |
Posted - 04 May 2004 : 18:07:39
|
al-la PHPBB
I'll try it out in the morning. Something i've wanted for ages.
When all the bugs are sorted (if there are any) and it's outta ALPHA, this should be added to the base code, as this is one thing PHPBB has over Snitz. |
De Priofundus Calmo Ad Te Damine |
|
|
OneWayMule
Dev. Team Member & Support Moderator
Austria
4969 Posts |
|
PeeWee.Inc
Senior Member
United Kingdom
1893 Posts |
Posted - 04 May 2004 : 18:22:54
|
You could do it with the cookies.
However, i think i would keep it as it is, but add some code so that the table is cleared every 30 days or something. |
De Priofundus Calmo Ad Te Damine |
|
|
ajhvdb
Junior Member
Netherlands
392 Posts |
Posted - 05 May 2004 : 15:26:20
|
I just finished the same mod http://forum.snitz.com/forum/topic.asp?TOPIC_ID=51723 2 months ago. I used the "who read topic" Mod and added the clearing of the whoread table. In a small community this kind of mod does work without any performance problems. |
|
|
OneWayMule
Dev. Team Member & Support Moderator
Austria
4969 Posts |
|
nyquist
Starting Member
Italy
6 Posts |
Posted - 05 May 2004 : 17:03:37
|
quote: Originally posted by ajhvdb
I just finished the same mod http://forum.snitz.com/forum/topic.asp?TOPIC_ID=51723 2 months ago. I used the "who read topic" Mod and added the clearing of the whoread table. In a small community this kind of mod does work without any performance problems.
i must have have missed that one too looking at your mod i've seen you've also add a feature to recognize new replies to a 'yet read' topic, interesting
the only think i don't agree to is the need of performances loss. Maybe the ADMIN should choose wether to use cookies or database tables. I'll be working on this ASAP, unfortunately i don't have much time till the next week. |
|
|
ajhvdb
Junior Member
Netherlands
392 Posts |
Posted - 06 May 2004 : 03:52:18
|
Note that with cookies you are limited to 4 Kb. Also when a topic is opened a counter is updated "total read topic". This is standard snitz and if you delete that peace of code there won't be any performance loss.
Can you see the irony. You are looking for a Mod to prevent missing topics to read, but you can't find it because...
|
Edited by - ajhvdb on 06 May 2004 03:59:18 |
|
|
|
Topic |
|