The forum I work for has a module on the Front Page where it displays 5 of the most recent blog posts.
Recently, a blog poster posted 4 blog posts back-to-back, taking up the majority of the space.
I was hoping to figure out a way to display only the most recent Blog post per user. This would give the most users access to showcasing their blog posts.
I was thinking perhaps the query could be modified in the ORDER BY or LIMIT area, but I wasn't sure where. I really haven't used this type of code that much.
Any help would be very appreciated.
Thanks!
PHP Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<moduleinfo>
<module>
<title>Latest Blogs</title>
<identifier>vbblog</identifier>
<filename>vb_blogs.php</filename>
<inctype>php_file</inctype>
<templatelist>adv_portal_vb_blogs</templatelist>
<parent>0</parent>
<colspan>0</colspan>
<formcode />
<useshell>1</useshell>
<link><![CDATA[{$vbulletin->options[bburl]}/blogs/{$vbulletin->session->vars[sessionurl_q]}]]></link>
<options>0</options>
</module>
<templates>
<adv_portal_vb_blogs><![CDATA[<tr>
<td class="alt1"><span class="smallfont">
$spitblogs<br /></span>
</td>
</tr>]]></adv_portal_vb_blogs>
</templates>
<file><![CDATA[<?php
//Latest Blogs
$latestblogs = $db->query("
SELECT blogid, blog.title, blog_user.title AS blogname, comments_visible, username, dateline, userid, views, blog.state
FROM " . TABLE_PREFIX . "blog AS blog
LEFT JOIN " . TABLE_PREFIX . "blog_user AS blog_user ON blog_user.bloguserid=blog.userid
WHERE blog.state='visible'
ORDER BY dateline DESC
LIMIT 5
");
$blog_count = 0;
while ($showblogs=$db->fetch_array($latestblogs))
{
$blog_count++;
$blog_userid = $showblogs['userid'];
$blogid = $showblogs['blogid'];
$blog_title = $showblogs['title'];
$blog_views = $showblogs['views'];
$blog_username = $showblogs['username'];
$blog_dateline = vbdate($vbulletin->options['dateformat'], $showblogs['dateline']);
$blog_state = $showblogs['state'];
$spitblogs_title .= "<a href=\"{$vbulletin->options[bburl]}/blog.php?b=$blogid\">$blog_title</a>";
$spitblogs_title .= "<br /> ";
$spitblogs_views .= $blog_views;
$spitblogs_views .= "<br /> ";
$spitblogs_username .= "<a href=\"{$vbulletin->options[bburl]}/blog.php?u=$blog_userid\">$blog_username</a>";
$spitblogs_username .= "<br /> ";
$spitblogs_date .= $blog_dateline;
$spitblogs_date .= "<br /> ";
if ($blog_count < 5)
{
$blog_sep = "<br /><br /> ";
}
else
{
// vBadvanced Dynamics needs this
$blog_sep = "";
}
$spitblogs .= "<img src=\"{$stylevar[imgdir_misc]}/blog/blog_icon.gif\"> <a href=\"{$vbulletin->options[bburl]}/blog.php?b=$blogid\"><strong>$blog_title</strong></a><br />$blog_dateline by <a href=\"{$vbulletin->options[bburl]}/member.php?u=$blog_userid\">$blog_username</a><!--<br />Blog State: $blog_state--><br /><em>Viewed $blog_views times$blog_sep</em>";
}
//Latest Blogs
eval('$home["$mods[modid]"][\'content\'] = "' . fetch_template('adv_portal_vb_blogs') . '";');
?>]]></file>
</moduleinfo>
--------------- Added [DATE]1340843166[/DATE] at [TIME]1340843166[/TIME] ---------------
I think the trick is I need to embed a 2nd query inside of the current query. So it pulls the most recent entry per user, and then displays them by post date.
Any help on doing that?