Jump to content

Afficher les derniers topics d'une catégorie,


Recommended Posts

Salut à tous!

Est-ce que qqun connait un script qui permet d'afficher sur par exemple la page d'accueil de son site, les derniers topic d'une catégorie du forum PHPBB (par exemple une catégorie "news", pour mon cas... comme "programmation" sur ce forum) ?

Je m'explique, je suis en train de créer moi-même un "module" de news en RSS 2.0, mais en attendant j'aimerais que moi et mes newsers puissent publier des news en attendant que je finisse le module... à la façon des forums gratuits de chez http://www.forumactif.com

Car sur le web je n'ai trouvé que des scripts pour afficher les 10 ou 15 derniers topics mais du forum ENTIER...

C'est assez urgent, merci d'avance... :transpi:

Link to comment
Share on other sites

  • 4 weeks later...

J'ai bien peur qu'il ne te faille le réalisel r toi-même...

Etudie la structure des tables de ton forum pour en déduire la requête qui va te permettre cela, avec quelques connaissances en SQL ca doit pas être bien compliqué...

Il doit y avoir une table qui contient tous les articles avec un champ qui contient un code de sous-forum ou de catégorie.

Tu indiques dans ta clause WHERE le code du sous forum, tu tries les résultats par date de parution par ordre décroissant et tu utilises la clause LIMIT afin de n'avoir qu'un certain nombre de résultats...

J'ai pas trop le temps pour le moment mais ce week end je pourrai jeter un oeil la dessus, ca me parait pas insurmontable...

Link to comment
Share on other sites

Salut!

Voici un petit script qui te permettra d'afficher les 5 derniers topics d'un forum donné, que tu auras choisi avec la liste déroulante qui contient les noms de tous les forums.

Je considère que le topic le plus récent est celui ou l'id du dernier post est le plus grand (les id de posts sont auto-incrémentés donc le plus récent a l'id le + élevé). Dans l'absolu, cela n'est pas vrai puisque si l'on édite un post, l'id du post édité ne change pas mais le post sera plus récent que les posts postés entre le moment ou l'on a soumis le post et celui ou l'on aura édité le post, bien que ceux-ci aient des id de post plus élevés). C'est un choix personnel, libre à toi de le modifier.

Je met en ligne sur mon espace free un forum avec quelques messages test, libre à toi d'ajouter des posts et de vérifier que cela fonctionne. L'adresse est http://eratisator.free.fr/forum.

Le script est accessible sur http://eratisator.free.fr/test.php.

Et voici le code du script...

<?php


// Sélection de l'ensemble des forums et création d'une liste déroulante avec bouton de validation
$sql = 'SELECT forum_name, forum_id FROM phpbb_forums ORDER BY 1 ASC';
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('phpbb', $link);
$result = mysql_query($sql, $link);
mysql_close($link);

echo '<form method="post" action="http://localhost/test.php">';
echo '<select name="liste">';
while($row = mysql_fetch_assoc($result)) {
echo '<option value="' . $row['forum_id'] . '">' . $row['forum_name'] . '</option>';
}
echo '</select>';
echo '<br>';
echo '<input type="submit" value="Afficher">';
echo '</form>';

if($_POST['liste']) {

// Affichage des 5 derniers posts du forum sélectionné
$sql = 'SELECT topic_title, topic_id FROM phpbb_topics WHERE forum_id = ' . $_POST['liste'] . ' ORDER BY topic_last_post_id DESC LIMIT 0,5';

$link = mysql_connect('localhost', 'root', '');
mysql_select_db('phpbb', $link);
$result = mysql_query($sql, $link);
mysql_close($link);

echo '<table>';
while($row = mysql_fetch_assoc($result)) {
	echo '<tr><td><a href="http://localhost/viewtopic.php?t=' . $row['topic_id'] . '">' . $row['topic_title'] . '</a></td></tr>';
}
echo '</table>';
}


?>

N'hésite pas à me faire part de tes remarques ou questions supplémentaires...

En esperant que ceci t'aie aidé...

Bonne continuation.

Mathieu

Link to comment
Share on other sites

Bon je te modif un peu un script, sinon, si tu veux faire propre, télécharge le EZportal sur phpbb.com, tu as l'option de block avec la liste des derniers topics. Biensur celle-ci fonctionne avec les droits ...

J'ai pas test ma modif mais elle doit correcte... A l'origine, c'est un block du portal EZportal...

Tu peux voir ce script sur le forum www.esaip.com ou www.cb-frag.com

Bon développement ;)

#
#-----[ OPEN ]-------------------------------------------------------
#
index.php ou ta page d'index du forum ...

Ajoute au début :


// Number of Recent Topics (not Forum ID)
$CFG['number_recent_topics'] = '10';

// Exceptional Forums for Recent Topics, eg. '2,4,10' (note: my Recent Topics script has its own permission checking, so you can leave this variable blank)
$CFG['exceptional_forums'] = '';

//
// Recent Topics
//
$sql = "SELECT * FROM ". FORUMS_TABLE . " ORDER BY forum_id";
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
}
$forum_data = array();
while( $row = $db->sql_fetchrow($result) )
{
$forum_data[] = $row;
}

$is_auth_ary = array();
$is_auth_ary = auth(AUTH_ALL, AUTH_LIST_ALL, $userdata, $forum_data);

if( $CFG['exceptional_forums'] == '' )
{
$except_forum_id = '\'start\'';
}
else
{
$except_forum_id = $CFG['exceptional_forums'];
}

for ($i = 0; $i < count($forum_data); $i++)
{
if ((!$is_auth_ary[$forum_data[$i]['forum_id']]['auth_read']) or (!$is_auth_ary[$forum_data[$i]['forum_id']]['auth_view']))
{
	if ($except_forum_id == '\'start\'')
	{
		$except_forum_id = $forum_data[$i]['forum_id'];
	}
	else
	{
		$except_forum_id .= ',' . $forum_data[$i]['forum_id'];
	}
}
}
$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
	FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . USERS_TABLE . " AS u
	WHERE t.forum_id NOT IN (" . $except_forum_id . ")
		AND t.topic_status <> 2
		AND p.post_id = t.topic_last_post_id
		AND p.poster_id = u.user_id
	ORDER BY p.post_id DESC
	LIMIT " . $CFG['number_recent_topics'];
if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query recent topics information', '', __LINE__, __FILE__, $sql);
}
$number_recent_topics = $db->sql_numrows($result);
$recent_topic_row = array();
while ($row = $db->sql_fetchrow($result))
{
$recent_topic_row[] = $row;
}
for ($i = 0; $i < $number_recent_topics; $i++)
{
$template->assign_block_vars('recent_topic_row', array(
	'U_TITLE' => append_sid("viewtopic.$phpEx?" . POST_POST_URL . '=' . $recent_topic_row[$i]['post_id']) . '#' .$recent_topic_row[$i]['post_id'],
	'L_TITLE' => $recent_topic_row[$i]['topic_title'],
	'U_POSTER' => append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $recent_topic_row[$i]['user_id']),
	'S_POSTER' => $recent_topic_row[$i]['username'],
	'S_POSTTIME' => create_date($board_config['default_dateformat'], $recent_topic_row[$i]['post_time'], $board_config['board_timezone'])
	)
);
}
//
// END - Recent Topics
//
// Recent Topics
'L_RECENT_TOPICS' => $lang['Recent_topics'],


#
#-----[ OPEN ]-------------------------------------------------------
#
language/lang_english/lang_main.php
ou
language/lang_french/lang_main.php

#
#-----[ A LA FIN AJOUTE ]----------------------------------------
#
$lang['Recent_topics'] = 'Recent topics'; // Recent Topics


#
#-----[ OPEN ]-------------------------------------------------------
#
templates/subSilver/portal_body.tpl
ou
templates/TON_NOM_DE_THEME/index_body.tpl

#
#-----[ Ajoute la ou tu veux mettre la liste ]---------------------------------------------
#
#
# Version avec effet

	  <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
	   <tr>
		<td class="catHead" height="25"><span class="genmed"><b>{L_RECENT_TOPICS}</b></span></td>
	   </tr>
	   <tr>
		<td class="row1" align="left"><span class="gensmall">
		<marquee id="recent_topics" behavior="scroll" direction="up" height="200" scrolldelay="100" scrollamount="2">
		<!-- BEGIN recent_topic_row -->
		» <a href="{recent_topic_row.U_TITLE}" onMouseOver="document.all.recent_topics.stop()" onMouseOut="document.all.recent_topics.start()">{recent_topic_row.L_TITLE}</a><br />
		by <a href="{recent_topic_row.U_POSTER}" onMouseOver="document.all.recent_topics.stop()" onMouseOut="document.all.recent_topics.start()">{recent_topic_row.S_POSTER}</a> on {recent_topic_row.S_POSTTIME}<br /><br />
		<!-- END recent_topic_row -->
		</marquee>
		</span></td>
	   </tr>
	  </table>

	  <br />
#
# Classical Version
#-----[ OR ]------------------
#
	  <table width="100%" cellpadding="2" cellspacing="1" border="0" class="forumline">
	   <tr>
		<td class="catHead" height="25"><span class="genmed"><b>{L_RECENT_TOPICS}</b></span></td>
	   </tr>
	   <tr>
		<td class="row1" align="left"><span class="gensmall">
		<!-- BEGIN recent_topic_row -->
		» <a href="{recent_topic_row.U_TITLE}">{recent_topic_row.L_TITLE}</a><br />
		by <a href="{recent_topic_row.U_POSTER}">{recent_topic_row.S_POSTER}</a> on {recent_topic_row.S_POSTTIME}<br /><br />
		<!-- END recent_topic_row -->
		</span></td>
	   </tr>
	  </table>

	  <br />

#
#-----[ SAVE/UPLOAD ALL FILES ]------------------------------------------ 
#

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...