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

Recent

Welcome to TinyPortal. Please login or sign up.

April 27, 2024, 10:24:00 PM

Login with username, password and session length
Members
  • Total Members: 3,885
  • Latest: Growner
Stats
  • Total Posts: 195,173
  • Total Topics: 21,219
  • Online today: 93
  • Online ever: 3,540 (September 03, 2022, 01:38:54 AM)
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.