Simple Machines Community Forum

Customizing SMF => SMF Coding Discussion => Aiheen aloitti: n0TTT_ - helmikuu 16, 2014, 04:21:36 AP

Otsikko: Possible to change the ssi.php?
Kirjoitti: n0TTT_ - helmikuu 16, 2014, 04:21:36 AP
Needed to change the way the SSI introduces the recent topics, but whenever I change the form (html/css) it gives me error and the page (outside of smf) appears blank..
Code I have right now:

Koodi (php) [Valitse]

function ssi_recentTopics($num_recent = 8, $exclude_boards = null, $include_boards = null, $output_method = 'echo')
{
global $context, $settings, $scripturl, $txt, $db_prefix, $user_info;
global $modSettings, $smcFunc;

if ($exclude_boards === null && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0)
$exclude_boards = array($modSettings['recycle_board']);
else
$exclude_boards = empty($exclude_boards) ? array() : (is_array($exclude_boards) ? $exclude_boards : array($exclude_boards));

// Only some boards?.
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();
}

$stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless');
$icon_sources = array();
foreach ($stable_icons as $icon)
$icon_sources[$icon] = 'images_url';

// Find all the posts in distinct topics.  Newer ones will have higher IDs.
$request = $smcFunc['db_query']('substring', '
SELECT
m.poster_time, ms.subject, m.id_topic, m.id_member, m.id_msg, b.id_board, b.name AS board_name, t.num_replies, t.num_views,
IFNULL(mem.real_name, m.poster_name) AS poster_name, ' . ($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') . ', SUBSTRING(m.body, 1, 384) AS body, m.smileys_enabled, m.icon
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
INNER JOIN {db_prefix}messages AS ms ON (ms.id_msg = t.id_first_msg)
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . (!$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 t.id_last_msg >= {int:min_message_id}
' . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . '
' . (empty($include_boards) ? '' : '
AND b.id_board IN ({array_int:include_boards})') . '
AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? '
AND t.approved = {int:is_approved}
AND m.approved = {int:is_approved}' : '') . '
ORDER BY t.id_last_msg DESC
LIMIT ' . $num_recent,
array(
'current_member' => $user_info['id'],
'include_boards' => empty($include_boards) ? '' : $include_boards,
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
'min_message_id' => $modSettings['maxMsgID'] - 35 * min($num_recent, 5),
'is_approved' => 1,
)
);
$posts = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$row['body'] = strip_tags(strtr(parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']), array('<br />' => '&#10;')));
if ($smcFunc['strlen']($row['body']) > 128)
$row['body'] = $smcFunc['substr']($row['body'], 0, 128) . '...';

// Censor the subject.
censorText($row['subject']);
censorText($row['body']);

if (empty($modSettings['messageIconChecks_disable']) && !isset($icon_sources[$row['icon']]))
$icon_sources[$row['icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? 'images_url' : 'default_images_url';

// Build the array.
$posts[] = array(
'board' => array(
'id' => $row['id_board'],
'name' => $row['board_name'],
'href' => $scripturl . '?board=' . $row['id_board'] . '.0',
'link' => '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['board_name'] . '</a>'
),
'topic' => $row['id_topic'],
'poster' => array(
'id' => $row['id_member'],
'name' => $row['poster_name'],
'href' => empty($row['id_member']) ? '' : $scripturl . '?action=profile;u=' . $row['id_member'],
'link' => empty($row['id_member']) ? $row['poster_name'] : '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['poster_name'] . '</a>'
),
'subject' => $row['subject'],
'replies' => $row['num_replies'],
'views' => $row['num_views'],
'short_subject' => shorten_subject($row['subject'], 25),
'preview' => $row['body'],
'time' => timeformat($row['poster_time']),
'timestamp' => forum_time(true, $row['poster_time']),
'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . ';topicseen#new',
'link' => '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#new" rel="nofollow">' . $row['subject'] . '</a>',
// Retained for compatibility - is technically incorrect!
'new' => !empty($row['is_read']),
'is_new' => empty($row['is_read']),
'new_from' => $row['new_from'],
'icon' => '<img src="' . $settings[$icon_sources[$row['icon']]] . '/post/' . $row['icon'] . '.gif" align="middle" alt="' . $row['icon'] . '" />',
);
}
$smcFunc['db_free_result']($request);

// Just return it.
if ($output_method != 'echo' || empty($posts))
return $posts;

echo '
<ul>';
foreach ($posts as $post)
echo '
<li>[', $post['board']['link'], '] <a href="', $post['href'], '">', $post['subject'], '</a> [', $post['time'], '] </li>';
echo '
</ul>';
}


Cumpzz
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: n0TTT_ - helmikuu 17, 2014, 01:48:21 IP
Someone?
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: IchBin™ - helmikuu 17, 2014, 02:55:59 IP
When you get a blank page, what does it say in your servers error_log?
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: Kindred - helmikuu 17, 2014, 08:00:09 IP
And why are you changing the ssi code itself?
You do know that you can output the contents of the ssi call as an array and format it any way you want during readout instead of trying to change the function itself?
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: n0TTT_ - helmikuu 21, 2014, 10:36:11 AP
Lainaus käyttäjältä: Kindred - helmikuu 17, 2014, 08:00:09 IP
And why are you changing the ssi code itself?
You do know that you can output the contents of the ssi call as an array and format it any way you want during readout instead of trying to change the function itself?
Wie das?
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: Biology Forums - helmikuu 21, 2014, 10:39:59 AP
What kindred said is true. Don't change the raw code. I would give you an example if I was in front of my computer on how you can do it the right, and more elegant way...
Otsikko: Re: Possible to change the ssi.php?
Kirjoitti: IchBin™ - helmikuu 21, 2014, 02:11:47 IP
Lainaus käyttäjältä: n0TTT_ - helmikuu 21, 2014, 10:36:11 AP
Lainaus käyttäjältä: Kindred - helmikuu 17, 2014, 08:00:09 IP
And why are you changing the ssi code itself?
You do know that you can output the contents of the ssi call as an array and format it any way you want during readout instead of trying to change the function itself?
Wie das?

$topics = ssi_recentTopics(8, null, null, 'array');

Then just iterate over the $topics array, and customize it with the list that you are trying to use.

foreach ($topics as $topic) {
    echo $topic['link'];
}