[réalisé] Script de récupération des sujets phpBB

Vous trouverez ici des missions pour aider le jeu et l'équipe. Tout type de compétence peut aider : rédaction, code, illustration, ...
Répondre
Avatar du membre
Max
Administrateur du site
Messages : 1044
Enregistré le : lun. 12 août 2024 17:28

[réalisé] Script de récupération des sujets phpBB

Message par Max »

J'aurais besoin d'un script PHP, qui génère les liens vers les derniers sujets (ceux qui ont les réponses les plus récentes) du forum.

Le script ou la fonction doit prendre en paramètres :
- le nombre de sujets à lister
- la liste des forums (numéros) au sein desquels il faut chercher (cela me permettra de faire une liste des sujets RP, et une autre pour les sujets HRP)

Me contacter par MP si besoin.

Merci !
Messages : 75
Enregistré le : sam. 7 sept. 2024 14:51
Seigneur : Elevor

Numéro du seigneur : 1012

Numéro du Commodore : 1524

Re: Script de récupération des sujets phpBB

Message par Eleven »

Salut Max.

Voici un bout de code qui faut adapter :

Code : Tout sélectionner

<?php
// Paramètres de connexion
$host = 'localhost';
$dbname = 'nom_de_ta_base';
$user = 'utilisateur';
$pass = 'mot_de_passe';

// URL de base du forum
$base_url = 'https://tonsite.com/phpbb/';

// Paramètres GET
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 10;
$forums = isset($_GET['forums']) ? explode(',', $_GET['forums']) : [];

// Sécurisation
$limit = max(1, min($limit, 100));
$forums = array_filter(array_map('intval', $forums));

if (empty($forums)) {
    echo json_encode(['error' => 'Aucun ID de sous-forum fourni.']);
    exit;
}

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $in_clause = implode(',', array_fill(0, count($forums), '?'));

    $sql = "
        SELECT 
            t.topic_id, 
            t.topic_title, 
            t.topic_time,
            t.topic_last_post_time,
            f.forum_name
        FROM phpbb_topics t
        JOIN phpbb_forums f ON t.forum_id = f.forum_id
        WHERE t.forum_id IN ($in_clause)
        AND t.topic_status <> 2
        ORDER BY t.topic_last_post_time DESC
        LIMIT ?
    ";

    $stmt = $pdo->prepare($sql);
    foreach ($forums as $i => $fid) {
        $stmt->bindValue($i + 1, $fid, PDO::PARAM_INT);
    }
    $stmt->bindValue(count($forums) + 1, $limit, PDO::PARAM_INT);
    $stmt->execute();

    $topics = [];
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $topics[] = [
            'id' => $row['topic_id'],
            'title' => $row['topic_title'],
            'forum' => $row['forum_name'],
            'created' => date('Y-m-d H:i:s', $row['topic_time']),
            'last_post' => date('Y-m-d H:i:s', $row['topic_last_post_time']),
            'url' => $base_url . 'viewtopic.php?t=' . $row['topic_id']
        ];
    }

    header('Content-Type: application/json');
    echo json_encode($topics, JSON_PRETTY_PRINT);

} catch (PDOException $e) {
    echo json_encode(['error' => 'Erreur DB : ' . $e->getMessage()]);
}
Exemple d'appel du script :

Code : Tout sélectionner

https://tonsite.com/ton_script.php?limit=5&forums=2,5,10
Sortie JSON :
Résumé des champs JSON retournés

Code : Tout sélectionner

    id : ID du sujet
    title : Titre du sujet
    forum : Nom du forum
    created : Date de création du sujet
    last_post : Date du dernier message
    url : Lien direct vers le sujet
Avatar du membre
Max
Administrateur du site
Messages : 1044
Enregistré le : lun. 12 août 2024 17:28

Re: Script de récupération des sujets phpBB

Message par Max »

Merci Eleven !
Je me demandais si t'étais toujours actif, j'ai ma réponse : fidèle au poste 8-) :lol: !
Messages : 75
Enregistré le : sam. 7 sept. 2024 14:51
Seigneur : Elevor

Numéro du seigneur : 1012

Numéro du Commodore : 1524

Re: [réalisé] Script de récupération des sujets phpBB

Message par Eleven »

Je ne suis pas très "causant", mais je veille...
Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité