Aller au contenu

Récuperer les 5 derniers messages d'un forum spécial


Sujets conseillés

Posté (modifié)

Salut a tous

J'ai donc installé un forum sur mon site GaB-MOBILE qui propose des astuces, des codes et des images pour mobiles. Ce forum est propulsé par MercuryBoard [v1.1.5] et il est disponible à l'adresse http://lesitedegab.free.fr/forum/index.php. Et j'aimerais donc récuperer la liste des 5 derniers message du forum pour la mettre a gauche de mon site. Cependant je ne m'y connais pas du tout et j'aurais besoin de votre aide si vous vous y connaissez :)

Voici le code de la page new_posts

<?php
/**
* MercuryBoard
* Copyright © 2001-2003 The Mercury Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* $Id: new_posts.php,v 1.2 2006/08/10 18:50:17 jon Exp $
**/
/**
* Creates a list of topics which contain new posts since your last visit
* - based off forum.php -
*
* _AT_author Jonathan West <jon_AT_quicksilverforums.com>
* _AT_since 1.1.5
**/
class new_posts extends mercuryboard
{
function execute()
{
if ($this->user['user_group'] == USER_GUEST) {
return $this->message($this->lang->new_posts_error, $this->lang->new_posts_guest);
}

$n = isset($this->get['num']) ? intval($this->get['num']) : $this->sets['topics_per_page'];
$min = isset($this->get['min']) ? intval($this->get['min']) : 0;

$new_topics = $this->check_new_posts($n, $min);
$topicCount = $this->countTopics();
$pagelinks = $this->get_pages($topicCount, 'a=recent', $min, $n);
$forumjump = $this->select_forums($this->forum_grab(), 0, 0, null, true);

if (!$new_topics) {
$new_topics = eval($this->template('NO_NEW_POSTS'));
}
return eval($this->template('NEW_POSTS'));
}
/**
* Show new topics - based of topics.php
*
* _AT_param int $min First entry to display
* _AT_param int $n Number of entries to display
* _AT_since 1.1.5
* _AT_return string html output in template form
**/
function check_new_posts($n, $min)
{
$return = null;

$query = $this->db->query("
SELECT DISTINCT(t.topic_id),
t.topic_modes, t.topic_starter, t.topic_replies,
t.topic_edited, t.topic_description, t.topic_moved, t.topic_forum, t.topic_last_poster,
t.topic_icon, t.topic_title,
f.forum_id, f.forum_name,
g.group_format,
p.post_author as dot,
s.user_name AS topic_starter_name,
m.user_name AS topic_last_poster_name
FROM
({$this->pre}topics t,
{$this->pre}users m,
{$this->pre}users s,
{$this->pre}groups g,
{$this->pre}forums f)
LEFT JOIN {$this->pre}posts p ON (t.topic_id = p.post_topic AND p.post_author = {$this->user['user_id']})
WHERE
t.topic_edited >= {$this->user['user_lastvisit']}
AND m.user_id = t.topic_last_poster
AND s.user_id = t.topic_starter
AND m.user_group = g.group_id
AND f.forum_id = t.topic_forum
ORDER BY
(t.topic_modes & " . TOPIC_PINNED . ") DESC,
t.topic_edited DESC
LIMIT
$min, $n");

while ($new_post = $this->db->nqfetch($query))
{
$icon = null;
$state = null;
$Pages = $this->get_pages_topic($new_post['topic_replies'], 'a=topic&t=' . $new_post['topic_id'], ', ', 0, $this->sets['posts_per_page']);

if ($new_post['topic_last_poster'] != USER_GUEST_UID) {
$new_post['topic_starter'] = "<a href='$this->self?a=profile&w={$new_post['topic_last_poster']}'>" .sprintf($new_post['group_format'], $new_post['topic_last_poster_name'])."</a>";
} else {
$new_post['topic_starter'] = 'Guest';
}

if ($new_post['topic_modes'] & TOPIC_MOVED) {
$state = 'moved';
$new_post['topic_id'] = $new_post['topic_moved'];

} elseif ($new_post['topic_modes'] & TOPIC_LOCKED) {
$state .= 'locked';
} elseif ($new_post['topic_modes'] & TOPIC_PINNED) {
$state .= 'pinned';
}else{
$state .= 'new';
if (($this->user['user_id'] != USER_GUEST_UID) && $new_post['dot']) {
$state .= 'dot';
}

if ($new_post['topic_replies'] < $this->sets['hot_limit']) {
$state .= 'open';
} else {
$state .= 'hot';
}
}
$icon = "<img src='./skins/{$this->skin}/images/{$state}.gif'>";

if ($new_post['topic_icon']) {
$new_post['topic_icon'] = '<img src="./skins/' . $this->skin . '/mbicons/' . $new_post['topic_icon'] . '" alt="" />';
}

$new_post['topic_title'] = $this->format($new_post['topic_title'], FORMAT_CENSOR | FORMAT_HTMLCHARS);

if ($new_post['topic_modes'] & TOPIC_PINNED) {
$new_post['topic_title'] = "<b><a href='$this->self?a=topic&t={$new_post['topic_id']}&z={$new_post['forum_id']}'>{$new_post['topic_title']}</a></b>";
}else{
$new_post['topic_title'] = "<a href='$this->self?a=topic&t={$new_post['topic_id']}&z={$new_post['forum_id']}'>{$new_post['topic_title']}</a>";
}

if ($new_post['topic_replies'] >= $this->sets['posts_per_page']) {
$min = floor($new_post['topic_replies'] / $this->sets['posts_per_page']) * $this->sets['posts_per_page'];
$jump = "&min=$min#p" . ($new_post['topic_replies'] - $min);
} else {
$jump = '#p' . $new_post['topic_replies'];
}

if (!empty($new_post['topic_description'])) {
$new_post['topic_description'] = $this->format($new_post['topic_description'], FORMAT_CENSOR | FORMAT_HTMLCHARS);
}

$new_post['topic_starter'] .= '<br/>' . $this->mbdate('g:i a, M j, Y', $new_post['topic_edited']);

if ($this->perms->auth('forum_view', $new_post['forum_id'])) {
$return .= eval($this->template('NEW_POSTS_CONTENT'));
}
}
return $return;
}
/**
* Get a count of all the topics available since the user's last visit
*
* _AT_author Geoffrey Dunn <geoff_AT_warmage.com>
* _AT_since 1.1.5
* _AT_return int count of topics
**/
function countTopics()
{
$query = $this->db->fetch("

SELECT COUNT(topic_id) AS count
FROM {$this->pre}topics
WHERE
topic_edited >= {$this->user['user_lastvisit']}");

return $query['count'];
}
}
?>

C'est possible ?

Merci encore et bonnes fetes

Modifié par Monique
Merci d'utiliser codebox pour plus de 10 lignes de code :)
Posté

Oui c'est possible, pour ça il faudrait avoir la structure des tables de ton forum.

Puis faire une requete sql via php qui récupère les 5 derniers messages avec un ORDER BY colonne_date DESC LIMIT O,5 et voilà.

Posté (modifié)

Erf mais je ne m'y connais pas du tout en PHP et SQL ^^ Comment je peux faire pour montrer la structure des tables du forum ?

J'ai ça dans ma base SQL sanstitredu5.jpg

Merci encore :D

Modifié par GaBs34
Posté

Salut, je pense qu'il va falloir que tu t'y mettes parce que là tu demandes un truc tout fait, donc le mieux est de s'adresser au forum de ton script de forum ou alors si tu as vraiment beaucoup de chances tu auras la réponse qui te convient ici. Je suis nouveau mais cela m'étonnerait quand même que quelqu'un qui n'ai pas lui même eu un jour besoin de ça pour ce forum en particulier passe du temps à te créer un script sur mesure tout prêt en te disant où le coller.

Ils te donnent des pistes, après à toi d'essayer de comprendre mysql et php, ca te servira toujours pour la suite de ta vie de webmaster.

Posté (modifié)
Salut, je pense qu'il va falloir que tu t'y mettes parce que là tu demandes un truc tout fait, donc le mieux est de s'adresser au forum de ton script de forum ou alors si tu as vraiment beaucoup de chances tu auras la réponse qui te convient ici. Je suis nouveau mais cela m'étonnerait quand même que quelqu'un qui n'ai pas lui même eu un jour besoin de ça pour ce forum en particulier passe du temps à te créer un script sur mesure tout prêt en te disant où le coller.

Ils te donnent des pistes, après à toi d'essayer de comprendre mysql et php, ca te servira toujours pour la suite de ta vie de webmaster.

+1

Erf mais je ne m'y connais pas du tout en PHP et SQL happy.gif Comment je peux faire pour montrer la structure des tables du forum ?

base-toi sur la table mb_topics pour récupérer les sujets

avec un code comme ceci (c'est un exemple, a toi d'adapter...):

<?php
$sql = "SELECT id, subject, posted, poster FROM mb_topics ORDER BY posted DESC LIMIT 0, 5";
$res = mysql_query($res) or die(mysql_error());

if(mysql_num_rows($res) > 0)
{
while($data = mysql_fetch_assoc($res))
{
echo '<a href="http://'.$_SERVER['HTTP_HOST'].'/forum/voirtopic.php?id='.$data['id'].">$data['subject'].' '.$data['posted'].' '.$data['poster'].'</a><br/>';
}
}
else
{
echo 'Aucun sujet sur le forum actuellement.';
}
?>

Bonne chance.

Modifié par dexmon
Posté

Merci beaucoup de votre aide, je vais essayer de me mettre au php pour adapter l'aide de dexmon, avez vous des sites a me conseiller ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...