JeuWeb - Crée ton jeu par navigateur

Version complète : Intégration totale d'un forum phpbb dans mon site
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Bonsoir à tous,

Je suis toujours en train de définir le cahier des charges de mon projet.

Dans ce contexte, je me suis posé la question suivante: 'comment intégrer, de manière totale, un forum phpbb dans mon site'?

Quand je dis 'de manière totale', je sous entends une intégration dans mon design (ce qui ne devrait pas poser trop de problème), mais aussi dans le cadre d'un partage de session entre le forum et mon site (je n'aimerai pas que l'utilisateur ait à se loguer deux fois, sur l'un et l'autre).

J'ai trouvé un tutoriel intéressant à l'adresse suivante: ICI.

Seulement, sur cet article, et si je l'ai bien compris, le site utilisera les sessions phpbb.

En partant sur ce principe, ce que je pense faire c'est à l'inscription d'un nouveau joueur sur mon site, faire une fonction créant au passage un compte utilisateur sur le forum phpbb (lire "» 3-a Enregistrer de nouveaux utilisateurs à partir de votre site" de l'article désigné ci-dessus).
Ensuite, lors d'un log d'un utilisateur, créer en parallèle de la session de mon site, une session sur le forum phpbb (lire "» 2-a Créer un formulaire de connexion - version de base" de l'article désigné ci-dessus).
Enfin, lors d'une déconnexion de mon site, détruire la session phpbb qui lui ait associé.

Auriez-vous un retour d'expérience sur ce genre d'intégration, et une évaluation de la difficulté et du temps de travail demandé?
Pensez-vous que cette manière de procéder est correcte?
Enfin, en tant qu'utilisateur probable de jeu en ligne, pensez-vous que le fait de se loguer deux fois (une fois sur le site, une autre fois sur le forum), est réellement un problème?

Merci d'avance pour tous commentaires et suggestions 16

Cordialement,

Benjamin
Alors j'ai une question en retour: pourquoi ne pas créé toi-même un forum adapté à tes besoins et facilement intégrables à ton site ? Parce que les forums PhpBB sont connus pour être lourds et peu optimisés.

Pour répondre à ta dernière question, cela dépend de la place du forum dans le jeu, si le forum ne sert que de forum de support et d'aide au jeu, cela ne me gênerait pas d'avoir à me loguer deux fois (maintenant, avec les connexions automatiques et les saisies semi-automatiques, c'est pas trop compliqué de se loguer 2 fois. Par contre, si le forum est un passage quasi-obligé, cela peut-être plus ennuyeux.
Un peu du même avis que MdE, tu mettras autant de temps à programmer ton propre forum, que de comprendre comment marche ce gros bordel appelé Phpbb et d'arriver à en faire quelque chose 16

Je parle en connaissance de cause, j'ai quasiment finit mon forum en quelques jours, il utilise la même BDD que mon jeu, est très bien intégré dans le design, et est super modulable, bref, si tu veux avoir la classe, code ton propre forum 16


Edit : pour répondre à tes questions, la plupart des joueurs s'inscrivent sur le jeu et jamais sur le forum si celui si est est "hors jeu", du style phpbb. Ce que le joueur veut, c'est de pouvoir laisser un message tout en gardant un œil sur ses barres de vie, sans avoir l'impression de quitter le jeu pour aller sur le forum. Les joueurs par exemple qui se la joue tout le temps solo, ne font pas de RP etc...tu peux être sûr à 100% qu'ils ne s'inscriront jamais sur ton forum phpbb.
Les forums phpBB & co sont lourds en terme de code, mais également en terme de fonctionnalités. La question est toujours la même, ça dépend de ce qu'on recherche... Pour gérer de grosses base, je pense qu'il y aurait trop de fonctionnalités indispensables pour lesquelles il faudrait trop de temps pour les coder soi-même ( messagerie privée, gestion de la modération, users / groups / permissions, forums / sous forums, recherche, états des topics, bbcode...). Puis même sans parler de grosses bases, on peut tout simplement avoir envie de "confort" et choisir d'entrée une solution usine-à-gaz plutôt que le strict minimum...

Pour répondre à ton problème : phpBB en sa version 3 permet de créer des plugins d'authentification : utile pour faire des bridges entre phpBB et une autre plateforme qui utilise son propre système de login / sessions. J'ai déjà utilisé un tel bridge pour lier une BDD Joomla ( CMS ) à phpBB, et ça marche très bien.
Théoriquement, ça devrait pas être bien compliqué de lier l'authentification de ton site à celle de phpBB, faut voir si y a de la doc sur le sujet ( j'ai pas regardé ton tuto en détail ).

Sinon, il existe un forum du nom de miniBB qui est très léger, fonctionnel, assez modulable, et qui est fait pour être pluggé à n'importe quelle base de données. Tout ce dont il a besoin, c'est d'une table users avec un champ login et un champ password ( tout cela est bien entendu paramétrable ). Cette solution est la plus rapide et la plus simple à mettre en oeuvre quand on a besoin d'intégrer un forum sur son site.
Bonsoir,

Avant toute chose, merci pour vos interventions, cela me permet d'y voir déjà un peu plus clair sur ce vers quoi je vais me lancer pour mon forum.

(03-01-2009 11:11 PM)MdE a écrit : [ -> ]Alors j'ai une question en retour: pourquoi ne pas créé toi-même un forum adapté à tes besoins et facilement intégrables à ton site ? Parce que les forums PhpBB sont connus pour être lourds et peu optimisés.

(03-01-2009 11:36 PM)Kassak a écrit : [ -> ]Un peu du même avis que MdE, tu mettras autant de temps à programmer ton propre forum, que de comprendre comment marche ce gros bordel appelé Phpbb et d'arriver à en faire quelque chose 16

Je parle en connaissance de cause, j'ai quasiment finit mon forum en quelques jours, il utilise la même BDD que mon jeu, est très bien intégré dans le design, et est super modulable, bref, si tu veux avoir la classe, code ton propre forum 16


En effet, cela pourrait être pas mal. Cela retirerai complètement le problème d'intégration.
Il est clair que phpbb est tout particulièrement lourd.
Et au final, je n'aurai véritablement besoin que de très peu de fonctionnalités. Je pense me limiter au smileys et ajout d'images de ce côté là.
A programmer, cela ne devrait pas être trop lourd (la plus grande difficulté sera probablement de ne pas ajouter de failles de sécurités).

(03-01-2009 11:11 PM)MdE a écrit : [ -> ]Pour répondre à ta dernière question, cela dépend de la place du forum dans le jeu, si le forum ne sert que de forum de support et d'aide au jeu, cela ne me gênerait pas d'avoir à me loguer deux fois (maintenant, avec les connexions automatiques et les saisies semi-automatiques, c'est pas trop compliqué de se loguer 2 fois. Par contre, si le forum est un passage quasi-obligé, cela peut-être plus ennuyeux.

(03-01-2009 11:36 PM)Kassak a écrit : [ -> ]Edit : pour répondre à tes questions, la plupart des joueurs s'inscrivent sur le jeu et jamais sur le forum si celui si est est "hors jeu", du style phpbb. Ce que le joueur veut, c'est de pouvoir laisser un message tout en gardant un œil sur ses barres de vie, sans avoir l'impression de quitter le jeu pour aller sur le forum. Les joueurs par exemple qui se la joue tout le temps solo, ne font pas de RP etc...tu peux être sûr à 100% qu'ils ne s'inscriront jamais sur ton forum phpbb.

De ce côté là, j'aimerai justement que le forum ne soit pas qu'un outil de support, mais bel est bien une plateforme communautaire entre les joueurs, d'où la problématique.

(03-01-2009 11:56 PM)Allwise a écrit : [ -> ]Les forums phpBB & co sont lourds en terme de code, mais également en terme de fonctionnalités. La question est toujours la même, ça dépend de ce qu'on recherche... Pour gérer de grosses base, je pense qu'il y aurait trop de fonctionnalités indispensables pour lesquelles il faudrait trop de temps pour les coder soi-même ( messagerie privée, gestion de la modération, users / groups / permissions, forums / sous forums, recherche, états des topics, bbcode...). Puis même sans parler de grosses bases, on peut tout simplement avoir envie de "confort" et choisir d'entrée une solution usine-à-gaz plutôt que le strict minimum...

Exactement, si j'opte au final pour la solution de faire un bridge, une fois cette intégration effectuée, j'aurai au moins l'avantage d'avoir un panel de fonctionnées complet.
Ce qui serait un gain incontestable en terme de temps de programmation.

(03-01-2009 11:56 PM)Allwise a écrit : [ -> ]Sinon, il existe un forum du nom de miniBB qui est très léger, fonctionnel, assez modulable, et qui est fait pour être pluggé à n'importe quelle base de données. Tout ce dont il a besoin, c'est d'une table users avec un champ login et un champ password ( tout cela est bien entendu paramétrable ). Cette solution est la plus rapide et la plus simple à mettre en oeuvre quand on a besoin d'intégrer un forum sur son site.

Cela semble être très intéressant! De plus il y a pas mal de add-ons disponnibles (on part sur une base minimaliste que l'on peut compléter à sa convenance) pour ajouter des fonctionnalités.
Merci

Cordialement,

Benjamin
Bonsoir,

Juste pour préciser que je vais me tourner vers un forum minibb comme proposé par Allwise.
J'ai fait quelques tests d'installation, d'ajout d'add-ons, et ai pris connaissance des pré requis pour une telle intégration (notamment en ce qui concerne les noms des champs de donnés que je vais devoir utiliser), et tout cela se fait facilement (la documentation du site officiel est vraiment très bien détaillée).

Merci encore,

Cordialement,

Benjamin

[EDIT] Contrairement à ce que j'ai écris dans un premier temps, il existe bien la notion de modérateur dans miniBB.
Voici une classe que j'ai écrite il y a un moment pour les smilies et balises basics. Comme j'ai dis, je l'ai écrite alors que mes connaissances étaient encore relativement maigres, mais c'est fonctionnel ;-)

Code PHP :
<?php

class Text
{

    private 
$smilies = array();
    private 
$balises = array();
    
    public 
$content;
    
    
    public function 
__construct($content)
    {        
        
$this->smilies[] = array('file' => '1.png''shortcut' => ':-D');
        
$this->smilies[] = array('file' => '2.gif''shortcut' => 'Oo');
        
$this->smilies[] = array('file' => '3.gif''shortcut' => '^^');
        
$this->smilies[] = array('file' => '4.png''shortcut' => '(siffle)');
        
$this->smilies[] = array('file' => '5.png''shortcut' => '8D');
        
$this->smilies[] = array('file' => '6.gif''shortcut' => 'wink');
        
$this->smilies[] = array('file' => '7.png''shortcut' => ':-p');
        
$this->smilies[] = array('file' => '8.png''shortcut' => ';-)');
        
$this->smilies[] = array('file' => '9.png''shortcut' => '(magicien)');
        
$this->smilies[] = array('file' => '10.gif''shortcut' => '(rolleyes)');
        
$this->smilies[] = array('file' => '11.gif''shortcut' => '(love)');
        
$this->smilies[] = array('file' => '12.gif''shortcut' => '(siflotte)');
        
$this->smilies[] = array('file' => '13.gif''shortcut' => ':-(');
        
$this->smilies[] = array('file' => '14.gif''shortcut' => '-.-');
        
$this->smilies[] = array('file' => '15.gif''shortcut' => '-,-');
        
$this->smilies[] = array('file' => '16.png''shortcut' => ':-O');
        
        
$this->balises[] = array('balise' => 'citation''open' => '<div style="border:1px solid #ccc;margin:10px 0 10px 0;"><blockquote class="citation"><p>''close' => '</p></blockquote></div>');
        
$this->balises[] = array('balise' => 'information''open' => '<div class="information">''close' => '</div>');
        
$this->balises[] = array('balise' => 'question''open' => '<div class="question">''close' => '</div>');
        
$this->balises[] = array('balise' => 'code');

        
$this->content $content;
    }
    
    
    public function 
getSmilies()
    {
        return 
$this->smilies;
    }
    
    
    public function 
getBalises()
    {
        return 
$this->balises;
    }
    
    
    public function 
getTags()
    {
        
$return '';
        
        foreach(
$this->smilies as $key => $value)
        {
            
$return .= '<a href="#" onclick="insertion(\''$value['shortcut'] .'\', \'\')"><img src="'smilies $value['file'] .'" alt="'$value['shortcut'] .'" /></a> ';
        }
        
        
$return .= '<br />';
        
        foreach(
$this->balises as $key => $value)
        {
            
$return .= '<a href="#" onclick="insertion(\'['$value['balise'] .']\', \'[/'$value['balise'].']\')">'$value['balise'] .'</a> | ';
        }
        return 
substr($return0, -3);
    }
    
    
    private function 
replaceSmilies($text)
    {
        
$in = array();
        
$out = array();
        
        foreach(
$this->smilies as $key => $value)
        {
            
$in[] = $value['shortcut'];
            
$out[] = '<img src="'smilies $value['file'] .'" alt="'$value['shortcut'] .'" />';
        }
    
        return 
str_replace($in$out$text);
    }
    
    
    private function 
replaceBalises($text)
    {
        
$in = array();
        
$out = array();
        
        foreach(
$this->balises as $key => $value)
        {
            if(
$value['balise'] != 'code')
            {
                
$in[] = '['$value['balise'] .']';
                
$out[] = $value['open'];

                
$in[] = '[/'$value['balise'] .']';
                
$out[] = $value['close'];
            }
        }

        return 
str_replace($in$out$text);
    }
    
    
    private function 
replaceAll($text)
    {
        
$return = array();
        
        
$openCode explode('[code]'$text);
        
        
$return[] = $this->replaceBalises($this->replaceSmilies($openCode[0]));
        
        foreach(
$openCode as $key => $value)
        {
            if(
$key != 0)
            {
                
$closeCode explode('[/code]'$value);
                
$return[] = '
                    <p style="margin:30px 0px -15px 20px;font-variant:small-caps;">Code Source :</p>
                    <div class="code">'
.
highlight_string('<?php
'
str_replace('<br />'''$closeCode[0]) .'
?>'
true) .'</div>
                '
;
                
$return[] = $this->replaceBalises($this->replaceSmilies($closeCode[1]));
            }
        }
        
        
$text implode(''$return);
        
        return 
$text;
    }
    
    public function 
execute()
    {
        if(
strstr(substr($this->content010), '[noformat]') === false)
        {
            
$this->content $this->replaceAll($this->content);
        }
        else 
$this->content str_replace('[noformat]'''$this->content);
    }
}

?>

Ensuite le java script:

Code :
function insertion(repdeb, repfin)
{
    var input = document.forms['textfield'].elements['content'];
    input.focus();
    
    /* pour l'Explorer Internet */
    if(typeof document.selection != 'undefined')
    {
        /* Insertion du code de formatage */
        var range = document.selection.createRange();
        var insText = range.text;
        range.text = repdeb + insText + repfin;
        
        /* Ajustement de la position du curseur */
        range = document.selection.createRange();
        if (insText.length == 0)
        {
            range.move('character', -repfin.length);
        }
        else
        {
            range.moveStart('character', repdeb.length + insText.length + repfin.length);
        }
        range.select();
    }
    
    /* pour navigateurs plus récents basés sur Gecko*/
    else if(typeof input.selectionStart != 'undefined')
    {
        /* Insertion du code de formatage */
        var start = input.selectionStart;
        var end = input.selectionEnd;
        var insText = input.value.substring(start, end);
        input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
        
        /* Ajustement de la position du curseur */
        var pos;
        if (insText.length == 0)
        {
            pos = start + repdeb.length;
        }
        else
        {
            pos = start + repdeb.length + insText.length + repfin.length;
        }
        input.selectionStart = pos;
        input.selectionEnd = pos;
    }
    
    /* pour les autres navigateurs */
    else
    {
        /* requête de la position d'insertion */
        var pos;
        var re = new RegExp('^[0-9]{0,3}$');
        while(!re.test(pos))
        {
            pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
        }
        if(pos > input.value.length)
        {
            pos = input.value.length;
        }
        
        /* Insertion du code de formatage */
        var insText = prompt("Veuillez entrer le texte à formater:");
        input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
    }
}

En gros tu utilise comme ça:

Code PHP :
        // start temporisation flush
        
ob_start();
        
// insertion de tout rendu HTML

        // ends temporisation flush
        
$content ob_get_contents();
        
ob_end_clean();

        
$Text = new Text($content);
        
$Text->execute();

        echo 
$Text->content

Si une de tes pages HTML ne dois pas être parsé, tu met tout au début du code html la balise suivante: [noformat]

Une vue exemple pour poster une réponse par exemple:


[noformat]
<h2>répondre à un sujet</h2>

<form id="textfield" action="<?php echo server .'forum/entreaide/repondre-'. $this->return['id']; ?>" method="post">
<label for="posted"><input id="posted" type="hidden" name="posted" /></label>
<p>
<?php
$Text = new Text();
echo $Text->getTags();
?>
</p>
<textarea cols="70" rows="20" name="content"></textarea>
<input type="submit" value="poster" />
</form>

Enjoy :-)
URLs de référence