PDA

View Full Version : Enhanced syndication script (external2.php)


Ahmad
04-15-2004, 10:00 PM
Hi,

This is my first public hack. I hope I'm not breaking any rules! :rolleyes:

This is an enhanced version of external.php that gives you two little useful features:

1. Control the number of threads you want to get (up to 50 threads, or even more).
2. Change the order of threads from the date of the thread to the date of the last post.

This will allow you to make an external list of your latest XX posts using JavaScript, XML, or RSS.

Installation
1. Make a copy of the file external.php in the same directory and call it external2.php.

2. Open external2.php in your favorite text editor.

3. Look for these lines:

if ($forumchoice != '')
{
// query last 15 threads from visible / chosen forums


Add these lines above them:

// see if there is a count preference
if ($_REQUEST['limit'])
{
$limit = intval($_REQUEST['limit']);
if ($limit > 50)
{
$limit = 50;
}
}
else
{
$limit = 15;
}

// see if there is an ordering preference
if ($_REQUEST['orderby'] == 'lastpost') {
$orderby = 'thread.lastpost DESC';
}
else
{
$orderby = 'thread.dateline DESC';
}


Then find these two lines:

ORDER BY thread.dateline DESC
LIMIT 15


And replace them with:

ORDER BY $orderby
LIMIT $limit


Usage
Just like you would use external.php, but with the following extra parameters:

1. limit: this controls the number of threads you want to be displayed. You cannot go beyond 50 here. If not set to anything, it will return 15 threads.

2. orderby: if set to 'lastpost', it will give you the last XX number of threads based on the last post to the thread. If set to anything else (or not set at all), it will give you the last XX number of threads based on their start date (this order doesn't change when someone replies to a thread).

If you ignore both extra parameters limit and orderby, the script will act just like the normal external.php. So, you can use it in place of external.php, instead of as an second (external2.php) script.

I hope you will find it useful.

???`S?LV?R???`
04-16-2004, 09:27 PM
nice enhancement

poetic
04-16-2004, 10:33 PM
any demo's??

MrNase
04-17-2004, 06:20 AM
Nice, now that feature can be used better :)

But please make a *.txt file for the instructions and attach it :)

Ahmad
04-17-2004, 07:47 AM
any demo's??
Sure. Here is the code for an HTML file that will get 25 threads by their dates of last post and display them in a marquee:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4 . 01Transitional//EN">

<html dir="rtl">
<head>
<title>marquee</title>
<style>
body {
font-family: tahoma;
font-size:10 pt;
font-weight: bold;
color: #6C3809;
}
a {
text-decoration: none;
color: #6C3809;
}
a:active {
color: #9A611A;
}
a:hover {
color: #CAA577;
}
</style>
</head>

<body>
<script src="http://www.multaqana.org/vb/external2.php?type=JS&limit=25&orderby=lastpost"></script>

<marquee direction="right" scrolldelay="100">

<script>
URL = "http://www.multaqana.org/vb/";

i =0 ;
for (t in threads) {
document.write('<a href="', URL, 'showthread.php?t=', threads[t].threadid, '" target="_blank">', threads[t].title, '</a>&nbsp;&nbsp;&nbsp;::&nbsp;&nbsp;&nbsp;');
}
</script>
</marquee>

</body>
</html>


Notes:
1. This file is designed for right-to-left languages. If you want it for a left-to-right language, then you will have to change the "dir" attribute in the "html" tag to "ltr" and the "direction" attribute in the "marquee" tag to "left".

2. This file was not checked for best browser compatability and standards compliance.

3. The file is static (server-wise). It doesn't have to be a ".php" file. The "magic" happens by the interaction between the client-side javascript code and the external2.php content provider.

4. You will also need to change the "src" attribute of the first "script" tage, and the URL variable in the second script to point to your own forum.

5. The best way of making use of this script is to insert it in your forum as an iframe. This way, you will always have the threads with the latest posts displayed on all pages.

Ahmad
04-17-2004, 07:50 AM
Nice, now that feature can be used better :)

But please make a *.txt file for the instructions and attach it :)
I've just did :)

Ahmad
04-17-2004, 07:53 AM
nice enhancement
I'm glad you liked it :)

TCB
09-06-2004, 03:36 PM
Is this thread looking for the last x posts (in the database), everytime someone visits the site? Or does it has an interval (to save some serverload)?

TCB
09-10-2004, 01:51 PM
Is this thread looking for the last x posts (in the database), everytime someone visits the site? Or does it has an interval (to save some serverload)?

I meant: does external.php work with something like cachefiles, or does it generates the lists realtime?

Ahmad
09-18-2004, 05:34 AM
No, actually, there is no caching, but it can be added.

TCB
09-18-2004, 09:39 AM
No, actually, there is no caching, but it can be added.

So everytime this external2.php is included on a page, the list gets completely renewed at each visit, from each visitor? Doesn't that cost an immense amount of servercapacity?

Wouldn't it be better when it gets cached for about a few minutes?

eblivion
09-26-2004, 05:11 AM
Sure. Here is the code for an HTML file that will get 25 threads by their dates of last post and display them in a marquee:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4 . 01Transitional//EN">

<html dir="rtl">
<head>
<title>marquee</title>
<style>
body {
font-family: tahoma;
font-size:10 pt;
font-weight: bold;
color: #6C3809;
}
a {
text-decoration: none;
color: #6C3809;
}
a:active {
color: #9A611A;
}
a:hover {
color: #CAA577;
}
</style>
</head>

<body>
<script src="http://www.multaqana.org/vb/external2.php?type=JS&limit=25&orderby=lastpost"></script>

<marquee direction="right" scrolldelay="100">

<script>
URL = "http://www.multaqana.org/vb/";

i =0 ;
for (t in threads) {
document.write('<a href="', URL, 'showthread.php?t=', threads[t].threadid, '" target="_blank">', threads[t].title, '</a>&nbsp;&nbsp;&nbsp;::&nbsp;&nbsp;&nbsp;');
}
</script>
</marquee>

</body>
</html>


Notes:
1. This file is designed for right-to-left languages. If you want it for a left-to-right language, then you will have to change the "dir" attribute in the "html" tag to "ltr" and the "direction" attribute in the "marquee" tag to "left".

2. This file was not checked for best browser compatability and standards compliance.

3. The file is static (server-wise). It doesn't have to be a ".php" file. The "magic" happens by the interaction between the client-side javascript code and the external2.php content provider.

4. You will also need to change the "src" attribute of the first "script" tage, and the URL variable in the second script to point to your own forum.

5. The best way of making use of this script is to insert it in your forum as an iframe. This way, you will always have the threads with the latest posts displayed on all pages.
I installed this mod and changed it a bit to include a link to the last poster's post and their profile. The poster link correctly goes to the last's poster's profile, but the username displayed is the thread starter instead of the last poster.

Does anyone know what I need to replace threads[t].poster with to get the name of the last poster instead of the original? Below is my code:


<script src="/forum/external2.php?type=JS&limit=5&orderby=lastpost"></script>
<script type="text/javascript">
<!--
i =0 ;
for (t in threads) {
var titleAsString = new String(threads[t].title);
if (titleAsString.length > 20)
{
var newTitle = titleAsString.substring(0,20);
newTitle = newTitle + "...";
}
else
{
var newTitle = titleAsString;
}
document.writeln("<div class=smallfont><img src=/images/dot_o.gif width=5 height=5 border=0>&nbsp;<a class=smallfont href=\"/forum/showthread.php?t="+threads[t].threadid + "&goto=lastpost\">"+newTitle+"</a><br>&nbsp;&nbsp;" + threads[t].threaddate + " : " + threads[t].threadtime + "<br />&nbsp;&nbsp;by: <a href=\"/forum/member.php?find=lastposter&t="+threads[t].threadid+"\">"+threads[t].poster+"</a><br /><br /></div>");
}
//-->
</script>