News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

Request: "Recent Topics" instead of "Recent Posts" mod/script

Started by Mick., January 21, 2008, 12:30:09 PM

Previous topic - Next topic

Mick.

I never liked the idea of seeing multiple posts of the same topic in the Info Center. When selecting 5 or 10 to be shown.

Can anyone write a mod or a code replacement to show only "Recent Topics" instead of "Recent Posts"?

Thanx,Mick.

dxyy

I agree with you, I'd prefer to have recent topics rather than recent posts...

Anyway, I haven't had a chance to fully look at this as yet, but maybe you can have a look at this post: http://www.simplemachines.org/community/index.php?topic=211718.0

Mick.

I tried that but is not my liking as i dont want to add a "myrecent" link anywhere in the forum.

Thats exactly what i want but to be shown in the "Info Center".

Mick.

It would be great if somehow this can be applied in the boardindex.php?

to show "recent topics" instead of "recent replies".

global $context, $settings, $scripturl, $txt, $db_prefix, $ID_MEMBER, $user_info, $modSettings;


if (empty($settings['number_recent_posts']))

$number_recent_posts = 15;

else

$number_recent_posts = $settings['number_recent_posts'];

        if( isset($_GET['type']) )

$list_type = $_GET['type'];

else

$list_type = 'last';

        if( isset($_GET['count']) )

$list_count = $_GET['count'];

else

{

$list_count = $number_recent_posts;

if ($list_type == 'hours')

$list_count = 24;

}


if ($list_type == 'hours')

{

$list_from = strtotime($list_count.' hours ago');

$where_clause = 'ml.posterTime >= ' . $list_from;

$limit_clause = ' ';



}

elseif ($list_type == 'unreplied')

{

$where_clause = 't.numReplies = 0';

if ($list_count == 0)

{

$limit_clause = ' ';



}

else

{

$limit_clause = 'LIMIT ' . $list_count;



}

}

else

{

$where_clause = 't.ID_LAST_MSG >= ' . ($modSettings['maxMsgID'] - 90 * min($list_count, 5));

$limit_clause = 'LIMIT ' . $list_count;



}


$stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless');

$icon_sources = array();

foreach ($stable_icons as $icon)

$icon_sources[$icon] = 'images_url';


$request = db_query("

SELECT

ms.subject AS firstSubject, ms.posterTime AS firstPosterTime, ms.ID_TOPIC, t.ID_BOARD, b.name AS bname,

t.numReplies, t.numViews, ms.ID_MEMBER AS ID_FIRST_MEMBER, ml.ID_MEMBER AS ID_LAST_MEMBER,

ml.posterTime AS lastPosterTime, IFNULL(mems.realName, ms.posterName) AS firstPosterName,

IFNULL(meml.realName, ml.posterName) AS lastPosterName, ml.subject AS lastSubject,

ml.icon AS lastIcon, ms.icon AS firstIcon, t.ID_POLL, t.isSticky, t.locked, ml.modifiedTime AS lastModifiedTime,

LEFT(ml.body, 384) AS lastBody, LEFT(ms.body, 384) AS firstBody,

ml.smileysEnabled AS lastSmileys, ms.smileysEnabled AS firstSmileys, t.ID_FIRST_MSG, t.ID_LAST_MSG,"

. ($user_info['is_guest'] ? '1 AS isRead, 0 AS new_from' : '

IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, 0)) >= ml.ID_MSG_MODIFIED AS isRead,

IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1 AS new_from') . "

FROM ({$db_prefix}messages AS ms, {$db_prefix}messages AS ml, {$db_prefix}topics AS t, {$db_prefix}boards AS b)

LEFT JOIN {$db_prefix}members AS mems ON (mems.ID_MEMBER = ms.ID_MEMBER)

LEFT JOIN {$db_prefix}members AS meml ON (meml.ID_MEMBER = ml.ID_MEMBER)

LEFT JOIN {$db_prefix}log_topics AS lt ON (lt.ID_TOPIC = t.ID_TOPIC AND lt.ID_MEMBER = $ID_MEMBER)

LEFT JOIN {$db_prefix}log_mark_read AS lmr ON (lmr.ID_BOARD = t.ID_BOARD AND lmr.ID_MEMBER = $ID_MEMBER)

    WHERE " . $where_clause . "

    AND t.ID_TOPIC = ms.ID_TOPIC

AND b.ID_BOARD = t.ID_BOARD

AND $user_info[query_see_board]

AND ms.ID_MSG = t.ID_FIRST_MSG

AND ml.ID_MSG = t.ID_LAST_MSG

ORDER BY t.ID_LAST_MSG DESC " . $limit_clause, __FILE__, __LINE__);



$topics = array();

$topic_ids = array();

while ($row = mysql_fetch_assoc($request))

{

if ($row['ID_POLL'] > 0 && $modSettings['pollMode'] == '0')

continue;


$topic_ids[] = $row['ID_TOPIC'];


// Clip the strings first because censoring is slow :/. (for some reason?)

$row['firstBody'] = strip_tags(strtr(parse_bbc($row['firstBody'], $row['firstSmileys'], $row['ID_FIRST_MSG']), array('<br />' => '
')));

if (strlen($row['firstBody']) > 128)

$row['firstBody'] = substr($row['firstBody'], 0, 128) . '...';

$row['lastBody'] = strip_tags(strtr(parse_bbc($row['lastBody'], $row['lastSmileys'], $row['ID_LAST_MSG']), array('<br />' => '
')));

if (strlen($row['lastBody']) > 128)

$row['lastBody'] = substr($row['lastBody'], 0, 128) . '...';


$row['lastSubject'] = $row['firstSubject'];

$row['lastBody'] = $row['firstBody'];


// Decide how many pages the topic should have.

$topic_length = $row['numReplies'] + 1;

if ($topic_length > $modSettings['defaultMaxMessages'])

{

$tmppages = array();

$tmpa = 1;

for ($tmpb = 0; $tmpb < $topic_length; $tmpb += $modSettings['defaultMaxMessages'])

{

$tmppages[] = '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.' . $tmpb . ';topicseen">' . $tmpa . '</a>';

$tmpa++;

}

// Show links to all the pages?

if (count($tmppages) <= 5)

$pages = ', « ' . implode(' ', $tmppages);

// Or skip a few?

else

$pages = ', « ' . $tmppages[0] . ' ' . $tmppages[1] . ' ... ' . $tmppages[count($tmppages) - 2] . ' ' . $tmppages[count($tmppages) - 1];


if (!empty($modSettings['enableAllMessages']) && $topic_length < $modSettings['enableAllMessages'])

$pages .= '  <a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0;all">' . $txt[190] . '</a>';

$pages .= ' , »';

}

else

$pages = '';


// We need to check the topic icons exist... you can never be too sure!

if (empty($modSettings['messageIconChecks_disable']))

{

// First icon first... as you'd expect.

if (!isset($icon_sources[$row['firstIcon']]))

$icon_sources[$row['firstIcon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['firstIcon'] . '.gif') ? 'images_url' : 'default_images_url';

// Last icon... last... duh.

if (!isset($icon_sources[$row['lastIcon']]))

$icon_sources[$row['lastIcon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['lastIcon'] . '.gif') ? 'images_url' : 'default_images_url';

}


// And build the array.

$topics[$row['ID_TOPIC']] = array(

'id' => $row['ID_TOPIC'],

'first_post' => array(

'id' => $row['ID_FIRST_MSG'],

'member' => array(

'name' => $row['firstPosterName'],

'id' => $row['ID_FIRST_MEMBER'],

'href' => $scripturl . '?action=profile;u=' . $row['ID_FIRST_MEMBER'],

'link' => !empty($row['ID_FIRST_MEMBER']) ? '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_FIRST_MEMBER'] . '" title="' . $txt[92] . ' ' . $row['firstPosterName'] . '">' . $row['firstPosterName'] . '</a>' : $row['firstPosterName']

),

'time' => timeformat($row['firstPosterTime']),

'timestamp' => forum_time(true, $row['firstPosterTime']),

'subject' => $row['firstSubject'],

'preview' => $row['firstBody'],

'icon' => $row['firstIcon'],

'icon_url' => $settings[$icon_sources[$row['firstIcon']]] . '/post/' . $row['firstIcon'] . '.gif',

'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0;topicseen',

'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.0;topicseen">' . $row['firstSubject'] . '</a>'

),

'last_post' => array(

'id' => $row['ID_LAST_MSG'],

'member' => array(

'name' => $row['lastPosterName'],

'id' => $row['ID_LAST_MEMBER'],

'href' => $scripturl . '?action=profile;u=' . $row['ID_LAST_MEMBER'],

'link' => !empty($row['ID_LAST_MEMBER']) ? '<a href="' . $scripturl . '?action=profile;u=' . $row['ID_LAST_MEMBER'] . '">' . $row['lastPosterName'] . '</a>' : $row['lastPosterName']

),

'time' => timeformat($row['lastPosterTime']),

'timestamp' => forum_time(true, $row['lastPosterTime']),

'subject' => $row['lastSubject'],

'preview' => $row['lastBody'],

'icon' => $row['lastIcon'],

'icon_url' => $settings[$icon_sources[$row['lastIcon']]] . '/post/' . $row['lastIcon'] . '.gif',

'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['ID_LAST_MSG']) . ';topicseen#msg' . $row['ID_LAST_MSG'],

'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['ID_LAST_MSG']) . ';topicseen#msg' . $row['ID_LAST_MSG'] . '">' . $row['lastSubject'] . '</a>'

),

'new' => $row['isRead'],

'new_from' => $row['new_from'],

'new_href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['new_from'] . ';topicseen#new',

'href' => $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['new_from']) . ';topicseen' . ($row['numReplies'] == 0 ? '' : 'new'),

'link' => '<a href="' . $scripturl . '?topic=' . $row['ID_TOPIC'] . ($row['numReplies'] == 0 ? '.0' : '.msg' . $row['new_from']) . ';topicseen#msg' . $row['new_from'] . '">' . $row['firstSubject'] . '</a>',

'is_sticky' => !empty($modSettings['enableStickyTopics']) && !empty($row['isSticky']),

'is_locked' => !empty($row['locked']),

'is_poll' => $modSettings['pollMode'] == '1' && $row['ID_POLL'] > 0,

'is_hot' => $row['numReplies'] >= $modSettings['hotTopicPosts'],

'is_very_hot' => $row['numReplies'] >= $modSettings['hotTopicVeryPosts'],

'is_posted_in' => false,

'icon' => $row['firstIcon'],

'icon_url' => $settings[$icon_sources[$row['firstIcon']]] . '/post/' . $row['firstIcon'] . '.gif',

'subject' => $row['firstSubject'],

'pages' => $pages,

'replies' => $row['numReplies'],

'views' => $row['numViews'],

'board' => array(

'id' => $row['ID_BOARD'],

'name' => $row['bname'],

'href' => $scripturl . '?board=' . $row['ID_BOARD'] . '.0',

'link' => '<a href="' . $scripturl . '?board=' . $row['ID_BOARD'] . '.0">' . $row['bname'] . '</a>'

)

);


determineTopicClass($topics[$row['ID_TOPIC']]);

}

mysql_free_result($request);


if (!empty($modSettings['enableParticipation']) && !empty($topic_ids))

{

$result = db_query("

SELECT ID_TOPIC

FROM {$db_prefix}messages

WHERE ID_TOPIC IN (" . implode(', ', $topic_ids) . ")

AND ID_MEMBER = $ID_MEMBER", __FILE__, __LINE__);

while ($row = mysql_fetch_assoc($result))

{

if (empty($topics[$row['ID_TOPIC']]['is_posted_in']))

{

$topics[$row['ID_TOPIC']]['is_posted_in'] = true;

$topics[$row['ID_TOPIC']]['class'] = 'my_' . $topics[$row['ID_TOPIC']]['class'];

}

}

mysql_free_result($result);

}

if (!empty($topics))
    {
    echo '
        <div class="tborder" ', $context['browser']['needs_size_fix'] && !$context['browser']['is_ie6'] ? 'style="width: 100%;"' : '', '>
            <table border="0" width="100%" cellspacing="1" cellpadding="1" class="bordercolor">
                 

<tr class="titlebg">

<td width="5%"> </td>

<td>', $txt[70], '

</td><td width="14%">', $txt[109], '

</td><td width="4%" align="center">', $txt[110], '

</td><td width="4%" align="center">', $txt[301], '

</td><td width="24%">', $txt[111], '

</td>

</tr>';


foreach ($topics as $topic)

{

// Do we want to seperate the sticky and lock status out?

if (!empty($settings['seperate_sticky_lock']) && strpos($topic['class'], 'sticky') !== false)

$topic['class'] = substr($topic['class'], 0, strrpos($topic['class'], '_sticky'));

if (!empty($settings['seperate_sticky_lock']) && strpos($topic['class'], 'locked') !== false)

$topic['class'] = substr($topic['class'], 0, strrpos($topic['class'], '_locked'));


echo '

<tr>

<td class="windowbg2" align="center" width="5%">

<img src="' . $topic['last_post']['icon_url'] . '" alt="" align="middle" />

</td><td class="windowbg' , $topic['is_sticky'] && !empty($settings['seperate_sticky_lock']) ? '3' : '' , '" width="48%" valign="middle">' , $topic['is_locked'] && !empty($settings['seperate_sticky_lock']) ? '

<img src="' . $settings['images_url'] . '/icons/quick_lock.gif" align="right" alt="" style="margin: 0;" />' : '' , $topic['is_sticky'] && !empty($settings['seperate_sticky_lock']) ? '

<img src="' . $settings['images_url'] . '/icons/show_sticky.gif" align="right" alt="" style="margin: 0;" />' : '';

if ($topic['new'] == 0)

{

echo '<b>',  $topic['first_post']['link'], '</b>';

echo '<a href="', $topic['new_href'], '"> <img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="', $txt[302], '" /></a>';

}

else

{

echo $topic['first_post']['link'];

}

echo '

<span class="smalltext">', $topic['pages'], ' ', $txt['smf88'], ' ', $topic['board']['link'], '</span></td>


<td class="windowbg" valign="middle" width="12%">

', $topic['first_post']['member']['link'], '</td>

<td class="windowbg2" valign="middle" width="4%" align="center">

', $topic['replies'], '</td>

<td class="windowbg" valign="middle" width="4%" align="center">

', $topic['views'], '</td>

<td class="windowbg2" valign="middle" width="20%">



<div align=right><span class="smalltext">

', $topic['last_post']['time'], '<br />
<a href="', $topic['last_post']['href'], '"><img src="', $settings['images_url'], '/icons/last_post.gif" alt="', $txt[111], '" title="', $txt[111], '" style="float: right;" /></a>

', $txt[525], ' ', $topic['last_post']['member']['link'], '






</span></div>

</td>

</tr>';

}

    echo '</table></div>';

    }

Mick.


Advertisement: