Voilà, comme promis, je viens vous poser le code en question pour faire une liste des X derniers messages publiés sur le forum avec choix du nombre (x) et respect des autorisation de lecture.
Le code est commenté pour ceux qui souhaitent apporter des modifications
- Code: Tout sélectionner
$nombre="0"; //on initialise la variable qui permet de modifier le nombre de messages
// dans la requête qui suit, on va récupérer le réglage personnel de l'utilisateur, cela suppose que l'on a préalablement créé un champ personnalisé appellé pf_lastx, sans oublier de spécifier une valeur par défaut
$sqla = 'SELECT user_id, pf_lastx
FROM ' . PROFILE_FIELDS_DATA_TABLE . '
WHERE user_id=' . $user->data['user_id'] .'';
$resa = $db->sql_query($sqla);
while ($row = $db->sql_fetchrow($resa))
{
$nombre = $row['pf_lastx'];
}
// cette routine permet de ne pas afficher les x derniers messages pour les utilisateurs qui ne sont pas enregistrés ou qui ont réglé le nombre sur 0 (ce n'est pas la peine d'afficher des entête de tableau vide).
// La commande d'afficher ou non se fait par le biais d'un IF dans le template sur la variable TST dans laquelle est stockée $test
if (($nombre=="0") || ($nombre==NULL))
{
$test="qquechose";
$nombre="0";
}
//ce qui suit sert pour un interfaçage si jamais l'on souhaite transmettre un forum_id via un formulaire, par exemple pour afficher un forum en particulier à partir d'une autre page
$forum_id = request_var('forum_id', 0);
$where = ($forum_id) ? " WHERE t.forum_id = $forum_id AND f.forum_id = t.forum_id" : ' WHERE f.forum_id = t.forum_id';
// routine principale d'origine du tuto, modifiée pour n'afficher que les forums autorisés en lecture à l'utilisateur
$sql = 'SELECT t.forum_id, t.topic_id, t.topic_time, t.topic_title, t.topic_views, t.topic_replies, t.topic_poster, t.topic_first_poster_name, t.topic_first_poster_colour, t.topic_last_post_id, t.topic_last_poster_id, t.topic_last_poster_name, t.topic_last_poster_colour, t.topic_last_post_time, f.forum_name, f.forum_id
FROM ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f $where
AND " . $db->sql_in_set('f.forum_id', array_keys($auth->acl_getf('f_read', true))) . "
ORDER BY t.topic_time DESC";
// les résultats de la routine listés en fonction du nombre définit par l'utilisateur
$result = $db->sql_query_limit($sql, $nombre);
// on template les valeurs fixe
$template->set_filenames(array('bodylastx' => 'lastxposts.html'));
$template->assign_vars(array(
'LAST_POST_IMG' => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
'TST' => $test
));
// la boucle qui crée le tableau et template les valeurs variables
while($row = $db->sql_fetchrow($result))
{
$topic_id = $row['topic_id'];
$forum_name = $row['forum_name'];
$view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . '&t=' . $topic_id);
$view_forum_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id));
$template->assign_block_vars('topicrow', array(
'FIRST_POST_TIME' => $user->format_date($row['topic_time']),
'LAST_POST_AUTHOR'=> get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
'LAST_POST_TIME' => $user->format_date($row['topic_last_post_time']),
'REPLIES' => $row['topic_replies'],
'TOPIC_AUTHOR' => get_username_string('full', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
'TOPIC_TITLE' => censor_text($row['topic_title']),
'FORUM_NAME' => $row['forum_name'],
'U_LAST_POST' => $view_topic_url . '&p=' . $row['topic_last_post_id'] . '#p' . $row['topic_last_post_id'],
'U_VIEW_TOPIC' => $view_topic_url,
'U_VIEW_FORUM' => $view_forum_url,
'VIEWS' => $row['topic_views']
));
}
et le fichier template lastxposts.html qui est sur une base subsilver2 mais que vous pouvez adapter si cela vous intéresse.
- Code: Tout sélectionner
<!-- IF not TST -->
<div align="center">
<table class="tablebg" width="100%" align="center" border="1" cellspacing="0">
<tr>
<th colspan="6" style="border: 0em">Les {NOMBRE} derniers messages du forum</th>
</tr>
<tr>
<td class="cat" border="0">{L_TOPICS}</td>
<td class="cat" border="0">{L_FORUM}</td>
<td class="cat" border="0">{L_REPLIES}</td>
<td class="cat" border="0">{L_POST_BY_AUTHOR}</td>
<td class="cat" border="0">{L_VIEWS}</td>
<td class="cat" border="0">{L_LAST_POST}</td>
</tr>
<!-- BEGIN topicrow -->
<tr>
<td class="" style="border: 0em" align="left"><a href="{topicrow.U_LAST_POST}" class="topictitle">{topicrow.TOPIC_TITLE}</a></td>
<td class="" style="border: 0em" align="left"><a href="{topicrow.U_VIEW_FORUM}" class="forumtitle">{topicrow.FORUM_NAME}</a></td>
<td class="" style="border: 0em">{topicrow.REPLIES}</td>
<td class="" style="border: 0em">{topicrow.LAST_POST_AUTHOR}</td>
<td class="" style="border: 0em">{topicrow.VIEWS}</td>
<td class="" style="border: 0em">{topicrow.LAST_POST_TIME}
</td>
</tr>
<!-- END topicrow -->
</table>
</div>
<!-- ENDIF -->
<!-- les variables suivantes ne sont pas utilisées dans ce template -->
<!--{L_POSTED_ON_DATE}{L_POST_BY_AUTHOR}{topicrow.TOPIC_AUTHOR}{L_POSTED_ON_DATE}{topicrow.FIRST_POST_TIME}{topicrow.U_VIEW_TOPIC}<a href="{topicrow.U_LAST_POST}">{LAST_POST_IMG}</a>-->
Libre a vous de présenter ça différemment, c'est pour cela que j'ai laissé en commentaire à la fin celles qui ne m'intéressaient pas d'afficher mais que vous pouvez reprendre et utiliser.
Merci a ceux qui ont contribués a la création de ce petit "mod", s'il en est un, en particulier à silver35 et spitfire pat et en espérant que ça puisse servir à d'autres. Libre à vous d'en faire ce que bon vous semble.
Pour ma part je me sert de cela pour afficher les x derniers messages du forum sur la page d'accueil du site ainsi que sur l'index du forum. J'ai déjà cette fonction depuis plus de dix ans sur le forum phpbb2, elle plait beaucoup puisque lorsque j'ai annoncé sa disparition j'ai eu énormément de retours des users comme quoi ils étaient déçus.