News:

SMF 2.1.4 has been released! Take it for a spin! Read more.

Main Menu

Fantstic recent post block, but....

Started by Dylert, August 17, 2019, 03:51:42 PM

Previous topic - Next topic

Dylert

I have a fantastic recent posts block with columns of information. Unfortunately the block slows down my forum so I can't use it.
What can I do to fix the code? Any suggestions?

The code:

/*
The Setup is inside the tab!
Have Fun,


/***************************************************************************
*************** START THE TAB **********************************************
***************************************************************************/

$num_recent = 30; // HOW MANY RECENT TOPICS TO OUTPUT?
  $include_boards = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150); // IF ALL BOARDS null | IF SOME BOARDS array( ID1, ID2, ID3)
 
 
 
  // code, code, code and some more code bahhh!
  global $smcFunc, $scripturl, $context, $settings, $db_prefix, $user_info;
 
  if (is_array($include_boards) || (int) $include_boards === $include_boards)
{
$include_boards = is_array($include_boards) ? $include_boards : array($include_boards);
}
elseif ($include_boards != null)
{
$output_method = $include_boards;
$include_boards = array();
}

$topics_result = $smcFunc['db_query']('', '
    SELECT z.member_name as topic_member, t.id_member_started, m.poster_name, m.poster_time, m.id_msg, t.num_replies, t.num_views, t.id_member_updated, m.subject, m.body, m.id_topic, b.name, b.id_board, t.id_last_msg, u.avatar, g.online_color, ' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
   
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read,
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . '
    FROM {db_prefix}topics AS t
    INNER JOIN {db_prefix}boards AS b ON (t.id_board = b.id_board)
    INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
    INNER JOIN smf_members AS z ON (t.id_member_started = z.id_member)
    LEFT JOIN {db_prefix}members AS u ON (t.id_member_updated = u.id_member)
    LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = {int:current_member})' : '') . ' 
    WHERE m.approved=1' . (empty($include_boards) ? '' : '
AND b.id_board IN ({array_int:include_boards})') . '
    ORDER BY t.id_last_msg DESC
    LIMIT ' . $num_recent,
array(
'current_member' => $user_info['id'],
'include_boards' => empty($include_boards) ? '' : $include_boards,
)   
    );
$topics = array();
while ($row_topics = $smcFunc['db_fetch_assoc']($topics_result))
{
    $topics[] = array(
       'topic' => $row_topics['id_topic'],
       'poster' => '<a style="color: ' . ';" href="' . $scripturl . '?board=' . $row_topics['id_member_updated'] . '">' . $row_topics['poster_name'] . '</a>',
       'link' => '<a title="In ' . $row_topics['name'] .'" href="' . $scripturl . '?topic=' . $row_topics['id_topic'] . '.msg' . $row_topics['id_last_msg'] . ';topicseen#new">' . $row_topics['subject'] . '</a>',
       'href' => $scripturl . '?topic=' . $row_topics['id_topic'] . '.msg' . $row_topics['id_last_msg'] . ';topicseen#new',
  'time' => timeformat($row_topics['poster_time']),
  'new' => !empty($row_topics['is_read']),
  'views_replies' => $row_topics['num_views'] . '/' . $row_topics['num_replies'],

        'name' =>  '<a style="color: ' . ';" href="' . $scripturl . '?board=' . $row_topics['id_board'] . '">' . $row_topics['name'] . '</a>',
 
      'topic_member' => '<a style="color: ' . ';" href="' . $scripturl . '?action=profile;u=' . $row_topics['id_member_started'] . '">' . $row_topics['topic_member']. '</a>',
    );
}
$smcFunc['db_free_result']($topics_result);
echo '

<table id="table_box"
border="0" width="100%" cellspacing="1" cellpadding="2" class="bordercolor">
<tr class="titlebg">
                  <td valign="blueh">Emne</td>
  <td valign="middle">Av</td>
  <td valign="middle">Trådstarter</td>
  <td valign="middle">Lest/svar</td>
  <td valign="middle">Forum</td>
  <td valign="middle">Tid</td>
 
  <td valign="middle"></td>
</tr>';

foreach ($topics as $topic)
{
echo '
<tr>

<td class="windowbg" valign="middle">', str_replace('Sv:' , '' , $topic['link']);


// new log! What a headache!
if (!$topic['new'] && $context['user']['is_logged'])
echo '
<a href="', $scripturl, '?topic=', $topic['topic'], '.from', $topic['time'], '#new"><img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="new" border="0" /></a>';

echo '
</td>
<td class="windowbg2" valign="middle">', $topic['poster'], '</td>
<td class="windowbg2" valign="middle">', $topic['topic_member'], '</td>
<td class="windowbg2" valign="middle">', $topic['views_replies'], '</td>
<td class="windowbg2" valign="middle">', $topic['name'], '</td>
<td class="windowbg2" valign="middle">', $topic['time'], '</td>

';

if ($settings['images_url'] != $settings['theme_url'] . '/images' || file_exists($settings['theme_dir'] . '/images/icons/last_post.gif'))
echo '
</a>';
}

echo '
</td>
</tr>
</table>
</div>';
/***************************************************************************
*************** END THE TAB ************************************************
***************************************************************************/






?>

vbgamer45

Are you do all boards?
If so change
$num_recent = 30;   
$include_boards = null;
Community Suite for SMF - Take your forum to the next level built for SMF, Gallery,Store,Classifieds,Downloads,more!

SMFHacks.com -  Paid Modifications for SMF

Mods:
EzPortal - Portal System for SMF
SMF Gallery Pro
SMF Store SMF Classifieds Ad Seller Pro

Dylert

Thanks a lot! It seems faster now. Anyway I want to exclude one board. How can I do that? The boards is number 110.

Diego Andrés

Also you could add some cache to the query (1 minute or something) if the forum is not extremely active to make it even faster.

For excluding boards you can use the same you were using for including them in the first post.


$exclude_boards = array(1,3,etc);


AND b.id_board NOT IN ({array_int:exclude_boards})

array(
'current_member' => $user_info['id'],
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,

SMF Tricks - Free & Premium Responsive Themes for SMF.

aryansindy

Ok its nice,
how to add member or poster avatar to it??
Thanks.

moorlord

I want to keep only topic and remove posts please help :)

Advertisement: