Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Bonjour,
Je me suis rendue compte dernièrement que j'avais oublié de faire un tuto sur la mise en place d'un script de news sur son site, pour afficher les dernières news depuis un forum. C'est en place sur mon site en local depuis longtemps déjà et il s'agit d'une adaptation du script de news fourni par la documentation de Connectix Boards.
Notez que la version sur mon site en local n'est pas identique puisque j'utilise une variable GET pour accéder aux news, des fonctions modifiées de FluxBB ainsi que des clés de langue pour gérer l'anglais et le français.
Il se peut donc qu'il y ait des erreurs dans la version que je poste ici, donc n'hésitez pas à me les signaler !
--------------------------------------
Vous êtes en train de faire un site utilisant les sessions de votre forum FluxBB, et vous aimeriez bien afficher les 10 dernières news à partir d'une section de votre forum ?
Ce tutoriel va vous montrer à insérer ce module sur votre site.
[size=20]Prérequis[/size]
Tout d'abord, vous devez absolument avoir inclus le fichier common.php du forum avant l'entête de votre site. Pour cela, suivez cette page de documentatiion de FluxBB.fr.
[size=20]Création de la page[/size]
Je ne m'étalerai pas sur la façon d'insérer, puisque ça va dépendre de votre façon d'organiser votre site. Certains voudront afficher les news directement sur l'accueil, d'autres vont les mettre sur une page à part. Ensuite, certains vont utiliser les variables GET pendant que d'autres préfèrent faire un fichier par page. De plus, certains voudront utiliser des clés de langue si leur site est bilingue.
Dans ce cas-ci, on va faire comme si on fait un fichier dédié à la page des news et que le site est unilingue français.
Commençons d'abord par les constantes à définir :
// Module de news de Connectix Boards, adapté pour FluxBB 1.4
// Modifiez les deux lignes suivantes pour que cela corresponde à votre forum
define('PUN_NEWS',1); // ID du forum consacré aux nouvelles. Changez-le pour correspondre à votre forum
define('NB_NEWS',5); // Nombre de news à afficher
C'est ici que vous allez définir l'ID du forum où vous voulez poster les news. Normalement, vous avez l'ID en regardant l'URL du forum en question qui doit être dans cette forme, si non réécrite :
http://monsite.com/forum/viewforum.php?id=1
J'ai mis 1 comme exemple, mais ça peut être un autre chiffre. C'est cette valeur que vous devez mettre pour la constante PUN_NEWS.
Ensuite, dans la deuxième constante, vous devez définir le nombre de news à afficher. Dans l'exemple, j'ai mis 5, mais vous pouvez très bien décider d'en afficher 10.
Une fois vos valeurs de constantes définies, passons au reste :
// Récupération des ids des messages à afficher
$query = $db->query('SELECT first_post_id FROM '.$db->prefix.'topics WHERE forum_id='.PUN_NEWS.' GROUP BY id ORDER BY first_post_id DESC LIMIT 0,'.NB_NEWS);
$ids = array();
if($db->num_rows($query) > 0)
{
while($result = $db->fetch_assoc($query))
$ids[] = $result['first_post_id'];
// Récupération des données des messages sélectionnés
$result2 = $db->query('SELECT p.id AS msg_id, p.message AS msg_text, p.posted AS msg_posted, p.topic_id AS msg_topic, p.hide_smilies AS msg_smilies, t.id AS topic_id, t.subject AS topic_subject, t.num_replies AS topic_replies, t.poster AS topic_poster, u.id AS user_id, u.username AS user_name FROM '.$db->prefix.'posts AS p LEFT JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'users AS u ON t.poster=u.id WHERE p.id IN ('.implode(',',$ids).') ORDER BY p.id DESC');
if($db->num_rows($result2) > 0)
{
//Inclusion du parseur pour les BBCodes et smilies
require PUN_ROOT.'include/parser.php';
// Affichage des résultats
while ($val = $db->fetch_assoc($result2))
{
$username = ($val['user_id'] > 1) ? '<a href="'.PUN_ROOT.'profile.php?id='.$val['user_id'].'">'.pun_htmlspecialchars($val['user_name']).'</a>' : pun_htmlspecialchars($val['topic_poster']);
?>
<div class="news">
<h4><?php echo pun_htmlspecialchars($val['topic_subject']); ?></h4>
<p class="news_info"><?php echo 'Publié le ' . format_time($val['msg_posted']).' par ' . $username; ?> - <a href="<?php echo PUN_ROOT.'viewtopic.php?id='.$val['msg_topic']; ?>"><?php echo $val['topic_replies'] . ' commentaires'; ?></a></p>
<div class="p"><?php echo parse_message($val['msg_text'],$val['msg_smilies']); ?>
<p class="goto"><a href="#top"><?php echo 'Revenir en haut'; ?></a></p>
</div>
</div>
<?php
}
}
else
echo '<p class="notice">Aucune news !</p>';
}
else
echo '<p class="notice">Aucune news à afficher !</p>';
?>
<p class="links"><a href="<?php echo PUN_ROOT.'viewforum.php?id='.PUN_NEWS; ?>" id="shownews"><?php echo 'Voir toutes les news'; ?></a></p>
Ce script prend en compte le parsage des BBCodes et des smilies. Par contre, notez que vous devez avoir défini PUN_ROOT au début de vos pages pour que le lien à la fin du script redirige correctement au forum des news (c'est normalement indiqué dans le wiki sur l'utilisation des session de FluxBB).
Vous pouvez bien sûr adapter le script pour l'utilisation de clés de langues (pour les sites multilingues) notamment.
Il ne vous reste ensuite qu'à mettre ça en forme avec le CSS, et à faire une ancre #top dans le haut de votre page pour faciliter la navigation pour tous.
Dernière modification par Ishimaru Chiaki (29-04-2012 20:14:28)
PC Alienware sous Win7 - GIMP 2.8 - XHTML/CSS (avancé) - PHP/MySQL (medium)
Convertisseur Connectix Boards vers FluxBB et Auto Poll pour 1.4/1.5 disponibles sur GitHub !
Artiste à mes heures
Hors ligne
Ca marche pas chez moi : ca me dit : aucune news !
Hors ligne
Est-ce que tu as bien changé l'id du forum contenant les news, comme indiqué dans le message ?
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Si tu es le même membre que sur Ishimaru-Design :
Est-ce qu'au début de tes pages, tu as défini la constante PUN_ROOT ? Dans ton cas, ce serait
define('PUN_ROOT','./fluxbb/');
Je recommande d'utiliser une constante, car si tu fais plusieurs liens vers le forum depuis le site, tu n'auras pas 75 liens à éditer dans tes fichiers si le chemin change. Avec une constante, ça ne fait qu'un endroit à modifier.
PC Alienware sous Win7 - GIMP 2.8 - XHTML/CSS (avancé) - PHP/MySQL (medium)
Convertisseur Connectix Boards vers FluxBB et Auto Poll pour 1.4/1.5 disponibles sur GitHub !
Artiste à mes heures
Hors ligne
Oui l'id est la bonne, et oui j'ai bien définit le chemin de fluxbb.
Voila mon code :
<?php
define('PUN_ROOT', './forums/');
define('PUN_TURN_OFF_MAINT', 1);
define('PUN_QUIET_VISIT', 1);
require PUN_ROOT.'include/common.php';
//Set the page title here
$page_title = array (pun_htmlspecialchars($pun_config['o_board_title']) . ' / Accueil');
define('PUN_ALLOW_INDEX', 1);
require PUN_ROOT.'header.php';
// Module de news de Connectix Boards, adapté pour FluxBB 1.4
// Modifiez les deux lignes suivantes pour que cela corresponde à votre forum
define('PUN_NEWS',1); // ID du forum consacré aux nouvelles. Changez-le pour correspondre à votre forum
define('NB_NEWS',5); // Nombre de news à afficher
// Récupération des ids des messages à afficher
$query = $db->query('SELECT first_post_id FROM '.$db->prefix.'topics WHERE forum_id='.PUN_NEWS.' GROUP BY id ORDER BY first_post_id DESC LIMIT 0,'.NB_NEWS);
$ids = array();
if($db->num_rows($query) > 0)
{
while($result = $db->fetch_assoc($query))
$ids[] = $result['first_post_id'];
// Récupération des données des messages sélectionnés
$result2 = $db->query('SELECT p.id AS msg_id, p.message AS msg_text, p.posted AS msg_posted, p.topic_id AS msg_topic, p.hide_smilies AS msg_smilies, t.id AS topic_id, t.subject AS topic_subject, t.num_replies AS topic_replies, t.poster AS topic_poster, u.id AS user_id, u.username AS user_name FROM '.$db->prefix.'posts AS p LEFT JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id LEFT JOIN '.$db->prefix.'users AS u ON t.poster=u.id WHERE p.id IN ('.implode(',',$ids).') ORDER BY p.id DESC');
if(!$db->num_rows($result2) > 0)
{
//Inclusion du parseur pour les BBCodes et smilies
require PUN_ROOT.'include/parser.php';
// Affichage des résultats
while ($val = $db->fetch_assoc($result2))
{
$username = ($val['user_id'] > 1) ? '<a href="'.PUN_ROOT.'profile.php?id='.$val['user_id'].'">'.pun_htmlspecialchars($val['user_name']).'</a>' : pun_htmlspecialchars($val['topic_poster']);
?>
<div class="news">
<h4><?php echo pun_htmlspecialchars($val['topic_subject']); ?></h4>
<p class="news_info"><?php echo 'Publié le ' . format_time($val['msg_posted']).' par ' . $username; ?> - <a href="<?php echo PUN_ROOT.'viewtopic.php?id='.$val['msg_topic']; ?>"><?php echo $val['topic_replies'] . ' commentaires'; ?></a></p>
<div class="p"><?php echo parse_message($val['msg_text'],$val['msg_smilies']); ?>
<p class="goto"><a href="#top"><?php echo 'Revenir en haut'; ?></a></p>
</div>
</div>
<?php
}
}
else
echo '<p class="notice">Aucune news !</p>';
}
else
echo '<p class="notice">Aucune news à afficher !</p>';
?>
<p class="links"><a href="<?php echo PUN_ROOT.'viewforum.php?id='.PUN_NEWS; ?>" id="shownews"><?php echo 'Voir toutes les news'; ?></a></p>
<?php
require PUN_ROOT.'footer.php';
?>
Hors ligne
Quelle est la nature du non-fonctionement ?
PC Alienware sous Win7 - GIMP 2.8 - XHTML/CSS (avancé) - PHP/MySQL (medium)
Convertisseur Connectix Boards vers FluxBB et Auto Poll pour 1.4/1.5 disponibles sur GitHub !
Artiste à mes heures
Hors ligne
Bonjour,
l'erreur est sur ce bout de code:
if(!$db->num_rows($result2) > 0)
C'est plutôt
if(!$db->num_rows($result2))
ou bien
if($db->num_rows($result2) > 0)
Faut pas le '!' et le '>0' en même temps
Bouh !
StarShip Renaissance
Hors ligne
Arf, j'avais loupé cette ligne au moment d'adapter mon script pour le tutoriel, car sur mon site, j'utilise plutôt le "FluxBB-way", c'est-à-dire par exemple:
if(!$db->num_rows($result2) > 0)
site_msg('message d'erreur');
site_msg() étant une version modifiée de message() pour le site.
Je vais corriger ça.
PC Alienware sous Win7 - GIMP 2.8 - XHTML/CSS (avancé) - PHP/MySQL (medium)
Convertisseur Connectix Boards vers FluxBB et Auto Poll pour 1.4/1.5 disponibles sur GitHub !
Artiste à mes heures
Hors ligne
Salut, merci beaucoup pour ce script, il marche du premier coup mais la ou j'ai un problème, c'est sur les caractères spéciaux.
j’obtiens piège à pour pièges.
un petit indice ? s'il vous plaît xD
Hors ligne
Bonjour.
Enregistre ton fichier en "UTF-8 sans BOM"
Hors ligne
Parfait merci bien pour cette réponse rapide
Hors ligne
Bonsoir ,
je voudrait que mes news s'affiche sous forme de lien et qui revois directement sur une id désirer merci de votre aide
cdlt
Dernière modification par david18 (08-04-2014 20:22:44)
Hors ligne