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

Recent

Welcome to TinyPortal. Please login or sign up.

December 11, 2024, 03:35:47 AM

Login with username, password and session length
Members
Stats
  • Total Posts: 195,443
  • Total Topics: 21,252
  • Online today: 88
  • Online ever: 6,457 (November 30, 2024, 02:40:09 PM)
Users Online
  • Users: 0
  • Guests: 49
  • Total: 49

Current Topics in an article

Started by rrolle, February 08, 2024, 02:49:00 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

rrolle

I created a block containing the latest posts.
The type of block is "Current Topics".
I would like to present the latest contributions in an article. Is this possible?

SMF 2.1.4
PHP 8.2.15
TinyPortal

@rjen

You can create a php article and put you block code in it...
Running Latest TP on SMF2.1 at: www.fjr-club.nl

rrolle

Thanks. I don't know it well. RockLee, who previously helped me, is no longer available.
In which file can I find the code for the "Current Topics" type?

@rjen

What?

You stated you have a block with code.

Please explain more clearly what you are trying to do? I am confused now
Running Latest TP on SMF2.1 at: www.fjr-club.nl

rrolle

The code is not included in the block, but reference is made to the "Current Topics" block type. See Appendix.
The code is therefore not directly in the block, but in another place.
If I know where the code is, I can try to incorporate it into an article.

You cannot view this attachment.

rrolle

There is no code in the block itself, I only selected the "Current Topics" type at the time.
It would be enough for me if I knew in which file the code for "Current Topics" is located.

@rjen

I'll give you some details later today. On my phone now
Running Latest TP on SMF2.1 at: www.fjr-club.nl

@rjen

Quote from: rrolle on February 10, 2024, 09:04:01 AMThere is no code in the block itself, I only selected the "Current Topics" type at the time.
It would be enough for me if I knew in which file the code for "Current Topics" is located.

TPsubs.template.php

// blocktype 12: Recent Topics
function TPortal_recentbox()
{
global $scripturl, $context, $settings, $txt, $modSettings, $user_info;

// if no guest access to forum, then no recent topics
if(empty($modSettings['allow_guestAccess']) && $user_info['is_guest']) {
echo '' .$txt['tp-noguest_access'] .'';
return;
}
else {
// set variable
if(is_numeric($context['TPortal']['minmessagetopics']))
$context['min_message_topics'] = $context['TPortal']['minmessagetopics'];
else
$context['min_message_topics'] = 350;
// is it a number?
if(is_numeric($context['TPortal']['recentlength']))
$recentlength = $context['TPortal']['recentlength'];
else
$recentlength = '25';
// exclude boards
if (isset($context['TPortal']['recentboards']) && $context['TPortal']['boardmode'] == 0)
$exclude_boards = $context['TPortal']['recentboards'];
else {
// leave out the recycle board, if any
if(isset($modSettings['recycle_board']) && $modSettings['recycle_enable'] = 1 )
$bb = array($modSettings['recycle_board']);
$exclude_boards = $bb;
}

// include boards
if (isset($context['TPortal']['recentboards']) && !$context['TPortal']['boardmode'] == 0)
$include_boards = $context['TPortal']['recentboards'];
else
$include_boards = null;

$what = ssi_recentTopics($num_recent = $context['TPortal']['recentboxnum'] , $exclude_boards,  $include_boards, $output_method = 'array');
if($context['TPortal']['useavatar'] == 0)
{
// Output the topics
echo '
<ul class="tp_recenttopics" style="' , isset($context['TPortal']['recentboxscroll']) && $context['TPortal']['recentboxscroll'] == 1 ? 'overflow: auto; height: 20ex;' : '' , 'margin: 0; padding: 0;">';
$coun = 1;
foreach($what as $wi => $w)
{
$tpshortsubject = $w['subject'];
$w['readmore'] = '';
if(TPUtil::shortenString($tpshortsubject, $recentlength)) {
$w['readmore'] = '...';
}
echo '
<li' , $coun<count($what) ? '' : ' style="border: none; margin-bottom: 0;padding-bottom: 0;"'  , '>';
if ($w['is_new'])
echo '
<a href="' . $scripturl . '?topic=' . $w['topic'] . '.msg' . $w['new_from'] . ';topicseen#new" rel="nofollow" class="new_posts" style="margin:0px;">' . $txt['new'] . '</a> ';
echo '
<a href="' . $w['href'] . '" title="' . $w['subject'] . '">'. $tpshortsubject .''. $w['readmore'] .'</a>
', $txt['by'], ' <b>', $w['poster']['link'],'</b>
<br><span class="smalltext">['.$w['time'].']</span>
</li>';
$coun++;
}
echo '
</ul>';
}
else
{
$member_ids = array();
foreach($what as $wi => $w)
{
$member_ids[] = $w['poster']['id'];
}

if(!empty($member_ids))
$avatars = progetAvatars($member_ids);
else
$avatars = array();

// Output the topics
$coun = 1;
echo '
<ul class="tp_recenttopics" style="' , isset($context['TPortal']['recentboxscroll']) && $context['TPortal']['recentboxscroll']==1 ? 'overflow: auto; height: 20ex;' : '' , 'margin: 0; padding: 0;">';

foreach($what as $wi => $w)
{
$tpshortsubject = $w['subject'];
$w['readmore'] = '';
if(TPUtil::shortenString($tpshortsubject, $recentlength)) {
$w['readmore'] = '...';
}
echo '
<li' , $coun<count($what) ? '' : ' style="border: none; margin-bottom: 0;padding-bottom: 0;"'  , '>';
if ($w['is_new'])
echo '
<a href="' . $scripturl . '?topic=' . $w['topic'] . '.msg' . $w['new_from'] . ';topicseen#new" rel="nofollow" class="new_posts" style="margin:0px;">' . $txt['new'] . '</a> ';
echo '
<span class="tp_avatar"><a href="' . $scripturl. '?action=profile;u=' . $w['poster']['id'] . '">' , empty($avatars[$w['poster']['id']]) ? '<img class="avatar" src="' . $settings['tp_images_url'] . '/TPguest.png" alt="" />' : $avatars[$w['poster']['id']] , '</a></span><a href="'.$w['href'].'" title="' . $w['subject'] . '">'. $tpshortsubject .''. $w['readmore'] .'</a>
', $txt['by'], ' <b>', $w['poster']['link'],'</b>
<br><span class="smalltext">['.$w['time'].']</span>
</li>';
$coun++;
}
echo '
</ul>';
}
}
}
Running Latest TP on SMF2.1 at: www.fjr-club.nl

Arminus

Calling

TPortal_recentbox();
in a PHP article results in an error:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 10
File: <base>/SSI.php
Line: 652

Using the recent article box as block renders without problems, so it's apparently not enough to just call the block's function from an article?

Looks like ssi_recentTopics is being called with some uninitialized vars here...?

If I call the PHP script in a devenv like so

require_once("C:/xampp/htdocs/SSI.php");

require_once("C:/xampp/htdocs/Themes/default/TPsubs.template.php");
require_once("C:/xampp/htdocs/Themes/default/languages/TPortal.german_informal.php");

TPortal_recentbox();

I get this


Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 669

Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 669

Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 674

Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 674

Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 694

Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 694

tino

Did you initialise all the variables used inside that function? TinyPortal passes most of its information around in the $context['TPortal'] global. This is historic but quite embedded in the logic, the functions we supply were never intended to just be called. If you look in TPortal.php and TPBlocks.php you can see where they are initialised.

Arminus

Quote from: tino on February 11, 2024, 10:53:17 AMthe functions we supply were never intended to just be called.
I can see that, but that was suggested by rjen above and I figured that since we are calling this from within a TP Article, the context might be implicitly there - but I really don't have any understanding on how the bits and pieces play together there.

At any rate, seems that setting these 3 vars is sufficient:
$context['TPortal']['recentboxnum'] = 5;
$context['TPortal']['recentlength'] = 25;
$context['TPortal']['useavatar'] = 0;

So we're fine here for now.

@rjen

For the record: I did not suggest anything. OP asked where to find the code. That's what I answered
Running Latest TP on SMF2.1 at: www.fjr-club.nl

tino

Quote from: Arminus on February 11, 2024, 03:10:00 PM
Quote from: tino on February 11, 2024, 10:53:17 AMthe functions we supply were never intended to just be called.
I can see that, but that was suggested by rjen above and I figured that since we are calling this from within a TP Article, the context might be implicitly there - but I really don't have any understanding on how the bits and pieces play together there.

At any rate, seems that setting these 3 vars is sufficient:
$context['TPortal']['recentboxnum'] = 5;
$context['TPortal']['recentlength'] = 25;
$context['TPortal']['useavatar'] = 0;

So we're fine here for now.

That should work, but you might have unintended results if you have other blocks on the same page.

It was never built to be shown in an article box. The safer option is to copy the logic across and amend as needed.