Customization > Blocks and Modifications

[Block] Recent Topics/Posts with Post Preview!

<< < (39/39)

Ian M:

--- Quote from: andy on November 10, 2016, 06:03:45 AM ---I am using this block and its working fine so your problem is related to something else.

--- End quote ---

I think the problem may be I'm using the original code from a quite a while back and hadn't realised there'd been so many tweaks to it !!

It's been installed for almost a year, and it's only this week when guest access has been allowed onto the forum that the problem has come to light.The only changes that were made to the code were to the array board id's which work fine.

However, having installed the latest code in a hidden block it's working no problem.

I guess I shouldn't be up until 2am looking for something that's blatantly obvious in the morning !!

owenenene:

--- Quote from: GeorG on August 11, 2016, 08:51:32 AM ---1. Icon "NEW" disappears when the message has been read
2. Guests are shown author nick

RU:
1. Иконка "NEW" исчезает когда сообщение прочитано
2. Гостям показывается ник автора


--- Code: ---<?php

/*
Block: Recent posts with post preview
Author: Blue @ Simple Portal.net
Version: 1.8
*/

/* [SETUP WHAT YOU WANT HERE] */

$topics_posts = 1; // TOPICS - 1 | MESSAGES - 2
$limit = 5; // How many recent posts do you want to output?
$number = 70; // How many characters do you want to output?
$exclude_boards = null; // IF null guests can see all boards | IF you want to hide some boards use: array( ID1, ID2, ID3) where ID is the board's ID
$htmlspecialcharacters = false; // Do you need to show html special characters like Greek characters?

// Scroll Enable? Height and Speed?
$scrolling = 0;       // ENABLE - 1 | DISABLE - 2
$speed = 3;           // SLOW - 1 | MEDIUM - 10 | FAST - 20
$height = "150px";
$scrollbar = 0;       // ENABLE - 1 | DISABLE - 2

// Do you want to translate it to your own language? :P
$text['sportal_false'] = 'Simple Portal not found';

/* [STOP!] - THIS IS THE END OF SETUP */

//Only code from now on ;)
global $smcFunc, $scripturl, $sourcedir, $modSettings, $user_info, $settings, $context, $txt;

// Lets see if you are using Simple Portal. If not...well...go get them :D
if (!file_exists($sourcedir . '/PortalBlocks.php'))
{
echo $text['sportal_false'];
return;
}

// Let's grab some database results
if ($topics_posts == 1) {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_time, m.id_msg, t.id_member_updated, m.subject, m.body, m.id_topic, b.name, t.id_last_msg, IFNULL(u.real_name, m.poster_name) AS poster_name, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read,
IFNULL(lb.id_msg, -1) + 1 AS new_from') . '
   FROM {db_prefix}topics AS t
   LEFT JOIN {db_prefix}boards AS b ON (t.id_board = b.id_board)
   LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
   LEFT JOIN {db_prefix}members AS u ON (t.id_member_updated = u.id_member)' . ($user_info['is_guest'] ? '' : '
   LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_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 = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '     
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY t.id_last_msg DESC
   LIMIT ' . $limit, 
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
'current_member' => $user_info['id'],
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member_updated']);
      loadMemberContext($row_posts['id_member_updated']);

   $posts[] = array(
  'id' => $row_posts['id_member_updated'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member_updated'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $txt['board'] . ':&nbsp;' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_last_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => $row_posts['avatar'] == '' ? $memberContext[$row_posts['id_member_updated']]['avatar']['href'] : (stristr($row_posts['avatar'], 'http://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'], 
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read']),
      'subject_new' => $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new'
   );
}
$smcFunc['db_free_result']($posts_result);

} else {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_time, m.id_msg, m.id_member, m.subject, m.body, m.id_topic, b.name, b.id_board, IFNULL(u.real_name, m.poster_name) AS poster_name, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read,
IFNULL(lb.id_msg, -1) + 1 AS new_from') . '
   FROM {db_prefix}messages AS m
   LEFT JOIN {db_prefix}boards AS b ON (m.id_board = b.id_board)
   LEFT JOIN {db_prefix}members AS u ON (m.id_member = u.id_member)' . ($user_info['is_guest'] ? '' : '
   LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_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 = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '   
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY m.id_msg DESC
   LIMIT ' . $limit, 
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
'current_member' => $user_info['id'],
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member']);
      loadMemberContext($row_posts['id_member']);

   $posts[] = array(
  'id' => $row_posts['id_member'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $txt['board'] . ':&nbsp;' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => $row_posts['avatar'] == '' ? $memberContext[$row_posts['id_member']]['avatar']['href'] : (stristr($row_posts['avatar'], 'http://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'],  
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read']),
      'subject_new' => $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new'
   );
}
$smcFunc['db_free_result']($posts_result);

}

//Finally the Output

//Scrolling xD
if ($scrolling == 1)
echo '<div style="overflow: hidden;"><marquee height=' . $height . ' behavior="scroll" direction="up" scrollamount="' . $speed . '" onmouseover="this.stop()" onmouseout="this.start()">';

if ($scrollbar == 1)
echo '<div style="height:' . $height . '; overflow-y: scroll; overflow-x: hidden;">';

foreach ($posts as $post) {

// Lets fix the BBCode bug and Strip the Text
$content1 = str_replace("[", "<", $post['body']);
$content2 = str_replace("]", ">", $content1); 
$content3 = strip_tags($content2);
$preview = substr ($content3,0,$number);

echo'<table>
<tr>
<td style="width: 40px;">
<img src="' . $post['avatar'] .'" alt="" width="40px" height="40px" />
</td>
<td>
' . $post['subject'];

if (!$post['new'] && $context['user']['is_logged'])
echo '&nbsp;<a href=' . $post['subject_new'] . '><img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="new" border="0" /></a>';

echo '<br />
<small>' . $txt['by'] . '&nbsp;' . $post['username'] . '&nbsp;|&nbsp;' . $post['time'] .'</small>
</td>
</tr>
</table>';

if ($htmlspecialcharacters) {
echo htmlspecialchars($preview, ENT_NOQUOTES, "UTF-8") . '...';
} else {
echo $preview . '...';
}

echo '<hr />';
}
        
//Scrolling xD
if ($scrollbar == 1)
echo '</div>'; 

if ($scrolling == 1)
echo '</marquee></div>';
?>
--- End code ---

--- End quote ---

Anyone having a problem with the original and getting unidentified poster_name errors, then use the code in the above quote, works flawlessly :)

♦ Ninja ZX-10RR ♦:
After the 2.0.13 update I was able to edit the opening post again, and updated the code to the one provided by GeorG. Thanks!
(Will add info later, in a hurry right now)

EDIT: updated.

owenenene:
Found a little bug.

The topic / message settings does not work, whatever the setting is, it displays the messages.

$topics_posts = 1;      // TOPICS - 1 | MESSAGES - 2

From my understanding, the "1" should display recent topics created, and the "2" should display all messages (eg. topic replies, topic first posts, etc.). But 1 and 2 just display all and any posts on the forum.

Hey, I'm after this same mod but one which only shows recent topics, and the first message of that topic. Not the recent replies of that topic. Make sense? :s

Edit: i tried the "ORDER BY t.id_topic DESC", it works but it displays the most recent posts name instead of the topic authors name :(

Navigation

[0] Message Index

[*] Previous page

Go to full version