View Full Version : Miscellaneous Hacks - Import Unread News from a Forum

24 Jun 2006, 02:31
This is a port of the hack for vBulletin 3.5. Upgrading the hack after upgrading the forum should not be necessary.

This hack will allow you to specify one or more forum IDs in your Admin CP as "news forums". Every time a thread is created in these forums, all users will see an "Unread news" notification at the top of every page of the forum until they view the unread news thread. If many news threads are unread, they will all be shown in the notification and removed one by one as each thread is viewed.

This hack both serves to make sure all users are aware of posted news and to give users who return after a long absence a quick rundown of what has been going on in the forums since they last were there.

As of version 2.0, it is possible to specify:

- Time cutoff: all news older than x days will count as read
- Only check for read status on latest x threads: only the latest x news will be shown if unread; all older news will always be treated as read
- Maximum number of news to display at one time: if a user has more unread news (after the time cutoff and latest x filter) than the number specfied, only that number will actually be displayed on the page
- Whether to make users see news created before they joined as unread
- Whether to show the date and time when each news thread was made or just the date

Please note that you must have Paul_M's Display who has read a thread hack installed for this to function correctly! You don't need to actually have the people who have read the thread shown for anybody at all (heck, if you're completely uninterested in what that hack does, you don't even need to make the template edit for it), but as long as it's installed, this hack will work.

Version 3.0 adds the ability to have more than one news forum and to set a PHP condition for each forum which must be met in order for news from that forum to be imported.


Simply download the product attached to this post and import it via the Admin CP Product Manager. Then make one template edit: add


to the bottom of the header template.


If using PHP version 4.x (or if you are getting an error message that looks something like Fatal error: Call to undefined function: array_combine() in /public_html/global.php(359) : eval()'d code on line 139), you additionally need to find this line in the Import News plugin on the hook global_start:

$newsarray = array_combine($newsids, $newsinfo);

Replace it with

$newsarray = array();
foreach ($newsids AS $key => $id)
$newsarray["$id"] = $newsinfo["$key"];

If using PHP 5 or later (which is the case if you don't get that error message), you will not need to make this edit.


Afterwards, go to your vBulletin options, find the News Import System setting group, specify your news forum(s), set the other settings if you want, and turn the system on.

Don't forget to click Install if it's working for you. Enjoy!

Version 3.0: Added ability to have multiple news forums and use conditionals.
Version 2.23: Important bugfix from version 2.22
Version 2.22: Bugfixes
Version 2.21: Cutting off on the user's join date has been made an optional feature specified in the admin CP, and some unnecessary code has been removed. Also added alternative templates for no particular reason.
Version 2.2: Fixed uncached template, added "More..." link that links to the news forum when unread news are cut off by "Maximum number of news to display at one time" option, and all news created before the user registered will now count as read for that user. (Imagine registering and having twenty "unread news" notifications you have to plough through...)
Version 2.01: Added template edit information (I'm an official idiot for forgetting that) and fixed table prefixes.
Version 2.0: Added functionality (see above)


EXTRA: Alternative templates

If you don't like the way the current unread news box looks, I've got some more standard-looking templates you can use instead if you want. This also allows you to collapse the unread news, which might be useful. Just replace the templates, see how it looks, and revert the templates again if you liked the other look better.

Alternative custom_unreadnews template:

<if condition="$show['unreadnews']">
<br />
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<td class="tcat"><a href="#top" style="float:$stylevar[right]" onclick="return toggle_collapse('unreadnews')"><img id="collapseimg_unreadnews" src="$stylevar[imgdir_button]/collapse_tcat$vbcollapse[collapseimg_unreadnews].gif" alt="" border="0" /></a> Unread News</td>
<tbody id="collapseobj_unreadnews" style="$vbcollapse[collapseobj_unreadnews]">
<if condition="$show['importnewscutoff']">
<td class="alt1"><a href="forumdisplay.php?$session[sessionurl]f={$vbulletin->options['importnewsforum']}" class="smallfont">More...</a></td>

Alternative custom_newsbit template:

<td class="alt1">$timestamp: <strong><a href="showthread.php?$session[sessionurl]t=$id">$info[title]</a></strong></td>

24 Jun 2006, 03:02
looks great ... will be tested soon on my board

24 Jun 2006, 08:12

Will this display the message for all unread threads in a forum? (i.e...when a new member registers...this would force him to read all the rules...)

24 Jun 2006, 11:32
Yes, if you set it like that in the Admin CP - in fact I think the default settings will do that. If that is not happening by default, just make sure that "Cut off all news created before user's join date?" is set to no and that both the "Time cutoff for news" and "Only check latest X topics" fields are set to 0. Then all unread news since the beginning will be shown for all users.

Unless I misunderstood what you were asking about.

24 Jun 2006, 15:21
Wow I've been waiting for this...

04 Aug 2006, 22:24
shit hot idea mate... but i get this error

Invalid SQL:

SELECT threadid
FROM +++++ad
WHERE userid = 1 AND threadid IN (155929,155814,155188,155185,151089,150188);

MySQL Error : Table 'xxxxx.+++++ad' doesn't exist
Error Number : 1146
Date : Friday, August 4th 2006 @ 10:26:58 PM
Script : xxxx
Referrer : xxxxx
IP Address : xxxx
Username : MentaL
Classname : xxxx

Mr. Brian
05 Aug 2006, 09:46
Don't seem to be working though. :speechless:

Hmm.. Nothing shown up on the forumhome page :/

Mr. Brian
05 Aug 2006, 16:24
Nevermind, ignore my post. That isn't an issue anymore. :)

07 Aug 2006, 16:30
shit hot idea mate... but i get this error

Invalid SQL:

SELECT threadid
FROM +++++ad
WHERE userid = 1 AND threadid IN (155929,155814,155188,155185,151089,150188);

MySQL Error : Table 'xxxxx.+++++ad' doesn't exist
Error Number : 1146
Date : Friday, August 4th 2006 @ 10:26:58 PM
Script : xxxx
Referrer : xxxxx
IP Address : xxxx
Username : MentaL
Classname : xxxx

I hate the same problem.

Eagle Creek
12 Aug 2006, 20:00

I have a few questions:

1. At what forums are that screenshot made? Cause I like the background (you can PB me if you want).
2. Example:
My news forum gets about 5-10 posts every day. Of course when a member isn't at my forums for three days, I don't want to show them 30 posts. So I make a limit of 5 posts.
My question is: when they have read those 5 posts (after 3 days of absense), will the other 25 posts show (per 5) again and again untill they have read them all?
3. How does it work for guests?
4. Is the default vBfunction "mark posts as read" affecting this hack? Cause you stay I need Paul's hack (I already have that one installed).


14 Aug 2006, 23:50
mentalrz and BiReL41r, I highly suspect you don't have Paul_M's "Display who has read a thread" hack (linked to in the first post) installed - it's required for this to work. (I know I should have entered it as a product dependency, but there was a problem with that option in the Admin CP in beta 3 and I haven't gotten around to fixing it in the product yet.)

Eagle Creek:

1. It's on my forums, but admittedly I modified the quick style switcher to modify the style that's set in the database instead of a cookie, so it doesn't work for guests, and that's not the default style, so you can't really see it there. =/
2. It depends on what setting you change to five. What you want to set is "Only check latest X topics", not "Maximum unread news displayed at one time".
3. For guests, nothing is displayed at all.
4. Not that I'm aware of, no, unless Paul worked it into his hack.

15 Aug 2006, 00:27
Nope, I already have it installed.

15 Aug 2006, 00:43
Well, that is odd, because the error clearly states that the table "+++++ad" does not exist, and Paul_M's hack definitely does create that table...

Eagle Creek
15 Aug 2006, 03:14
Thanks for the anwsers! Very clear to me!

07 Sep 2006, 20:49
hey i installed it but when i write a message in the news board that i choosed i get this databas error:

Database error in vBulletin 3.6.0:

Invalid SQL:

SELECT threadid
FROM forum_+++++ad
WHERE userid = 1 AND threadid IN (5);

MySQL Error : Table 'JompaMP_Forum.forum_+++++ad' doesn't exist
Error Number : 1146
Date : Thursday, September 7th 2006 @ 09:46:15 PM
Script : http://drazonia.com/index.php
Referrer : http://drazonia.com/showthread.php?p=6
IP Address :
Username : JompaMP
Classname : vb_database

08 Sep 2006, 10:10
Did you install Paul_M's hack first?

08 Sep 2006, 11:01
no i don´t have that installed should i install it? if i should were do i find it?

09 Sep 2006, 12:15
It's linked to in the first post in highlighted text and is required for this hack to function, as clearly stated. Watch out for stuff like that when you install hacks.

09 Sep 2006, 13:50
tack jag såg inte riktigt det men nu funkar det.

15 Nov 2006, 20:34
I want that this hack just takes the threads that are stucked. Does anybody know how to do this?

07 Mar 2007, 18:22
Is there any chance to make an option appear in the User CP to let them chose whether they want to see the news section or not ?

edit: Downloading it I found the conditions.txt ;)

07 Apr 2007, 21:24

In my server logs i am getting this error

[Sat Apr 7 21:22:07 2007] [error] PHP Parse error: syntax error, unexpected '{' in /usr/home/myhomedire/domains/bashys-place.com/public_html/forums/global.php(356) : eval()'d code(562) : eval()'d code on line 1 I have done the php4x edit that got rid of the other error, but i still got this error, can you advise please?

Also product version is 2.23 and not 3.0 in the list?