TP-Docs
HTML5 Icon HTML5 Icon HTML5 Icon
TP on Social Media

Recent

Welcome to TinyPortal. Please login or sign up.

Recent posts

#1
Block Codes / Re: Recent Topics/Posts with P...
Last post by Senkusha - May 10, 2025, 02:13:52 AM
It works!  Thank you!
#2
Block Codes / Re: Recent Topics/Posts with P...
Last post by @rjen - May 09, 2025, 10:15:25 PM
It seems to work if I remove the check. Try this

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

/* [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;

// 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'] . ': ' . $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'] . ': ' . $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 ' <a href="' . $post['subject_new'] . '" rel="nofollow" class="new_posts" style="margin:0px;">New</a>';
    echo '<br />
                        <small>' . $txt['by'] . ' ' . $post['username'] . ' | ' . $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>';
#3
Block Codes / Re: Recent Topics/Posts with P...
Last post by @rjen - May 09, 2025, 09:19:21 PM
I have not tried it. Not at a pc this weekend. It might...
#4
Block Codes / Re: Recent Topics/Posts with P...
Last post by tino - May 09, 2025, 09:15:59 PM
Quote from: @rjen on May 09, 2025, 03:04:58 PMI think so, the block code is using Simpleportal settings

If you drop the checks for SimplePortal it should work?
#5
Chit chat / Board_ID?
Last post by Senkusha - May 09, 2025, 06:46:03 PM
Is there a variable that SMF uses that I can access within TP to determine the current board that's being viewed (if any)?
#6
Block Codes / Re: Recent Topics/Posts with P...
Last post by @rjen - May 09, 2025, 03:04:58 PM
I think so, the block code is using Simpleportal settings
#7
Block Codes / Re: Recent Topics/Posts with P...
Last post by Senkusha - May 09, 2025, 02:00:27 PM
Without SimplePortal this block is useless?  So I need both TinyPortal and SimplePortal?
#8
Support / Re: Promote to Front Page
Last post by @rjen - May 01, 2025, 09:03:04 PM
I made some updates to the beta version for TinyPortal 3.0.3

Functional changes:
- new setting in the main settings to activate the Promote Topic button
- new Block type that can be used to show Promoted topics, similar to Recent topics

I am playing around with the new block, may update the layout and add some more settings.
Obviously you can use the promoted topics in your own code as you started...
#9
Support / Re: Promote to Front Page
Last post by @rjen - April 29, 2025, 10:22:02 PM
The avatar issue is most likely because my forum has custom avatars folders
#10
Support / Re: Promote to Front Page
Last post by sgm09 - April 29, 2025, 10:17:15 PM
Well that depends on each forum's use case, if they want or not to show topics based on permissions. It will render the title and author, but won't allow actual access to topic. Didn't have any issues with the avatars over here.

This website is proudly hosted on Crocweb Cloud Website Hosting.