Annonces


#1 04/10/06 15:47:53

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

MultiQuote

Salut à tous,  wink

Voilà j'aimerais réaliser un sytème de MultiQuote comme sur ce forum sur le mien, et je voulais vous demander (surtout à Ju), comment tu t'y étais pris pour réaliser ceci  biggrin

Merci d'avance !

Cordialement,

Romain

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#2 06/10/06 11:03:18

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Quasiment tout est sous tes yeux (ou plutôt sous la source), en javascript.

Au niveau des boutons "Citer +" :

Code:

onclick="quoteadd(this,40356)"

Le chiffre indiqué étant l'id du post sur lequel il est (on le fait deviner simplement en PHP grâce à la variable correspondante).

Avant chaque post, on ajoute (le numéro étant tjrs spécifique au post) :

Code:

<input type="hidden" id="q40356" name="q40356" class="quoteadd" />

La fonction quoteadd appellée :

Code:

function quoteadd(img,post) {
    if(document.getElementById('q'+post).value == 0) {
        document.getElementById('q'+post).value = 1;
        var reg = new RegExp('(quote_p)', 'g');
        img.src = img.src.replace(reg, 'quote_m');
    } else {
        document.getElementById('q'+post).value = 0;
        var reg = new RegExp('(quote_m)', 'g');
        img.src = img.src.replace(reg, 'quote_p');
    }

    return true
}

A chaque post correspond donc un champ caché nommé "q+id".
Si sa valeur est égale à 0 c'est que le post correspondant n'a pas été sélectionné, si elle est égale à 1 c'est qu'il est sélectionné. On vérifie donc la valeur du champ lorsque que le bouton "Citer +" est cliqué, si c'est 1 on le passe à 0 (et vice versa) et on en profite pr mettre à jour l'image (on remplace quote_m ou quote_p - qui correspondent aux noms des images orange ou bleu - dans son chemin).

Enfin, on réorganise tout ça pr l'envoi lorsque que le visiteur clique sur "REPONDRE" en ajoutant ceci dans ce dernier :

Code:

onclick="quotego(this);return false"

Ce qui appelle :

Code:

function quotego(button) {
    var urlgetq = '';
    var chpsq = document.getElementsByTagName('input');

    for(var i=0; i < chpsq.length; ++i) {
        if(chpsq[i].className == 'quoteadd' && chpsq[i].value == 1)
            urlgetq += '&q'+chpsq[i].name.substring(1)
    }
    document.location = button.href+urlgetq;

    return false
}

Cette fonction rassemble déjà tous les input de la page, puis filtre uniquement ceux qui correspondent à la valeur de la sélection des posts (égals à 1). Au final, on ajoute le nom de tous les posts sélectionnés à l'URL de la page post.php dans le lien de REPONDRE.

Pour la restitution des différentes citations dans le champ de la page post.php, on scanne la variable $_GET (ac un  foreach par exemple), on récupére toutes les variables qui n'ont pas de valeur (puisqu'on envoi que les noms, par exemple q4556&q8966&q32158) et par le même système qui est prévu pour un quote simple, on associe une boucle qui concaténe les citations une par une.

Voilà, n'ayant pas toutes les sources sous les yeux je ne t'ai pas tout donné,
mais tu n'as déjà quasiment plus à réfléchir...



TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#3 07/10/06 15:53:19

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Ju a écrit:

Code:

onclick="quoteadd(this,40356)"

Code:

<input type="hidden" id="q40356" name="q40356" class="quoteadd" />

Merci Ju pour ta réponse, mais j'ai une question  info

Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message  wink

Cordialement,

Romain

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#4 07/10/06 16:00:54

Boudha
Modérateur
Equipe Modérateurs
Lieu: 127.0.0.1
OS: Linux Gentoo
Date d'inscription: 18/02/04
Messages: 2053

Re: MultiQuote

Romain a écrit:

Ju a écrit:

Code:

onclick="quoteadd(this,40356)"

Code:

<input type="hidden" id="q40356" name="q40356" class="quoteadd" />

Merci Ju pour ta réponse, mais j'ai une question  info

Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message  wink

Cordialement,

Romain

Je ne me souviens plus exactement du fontcionnement de PunBB mais il me semble que tu as une variable PHP (dans viewtopic.php) qui correspond à l'id du message. Admettons que cette variable se nomme id_topic tu n'auras qu'à faire ceci :

Code:

onclick="quoteadd(this,<?php echo $id_topic ?>)"

En éspérant d'avoir aidé wink

Dernière modification par Boudha (07/10/06 16:04:44)


Freies Wissen macht Spaß.

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#5 07/10/06 17:35:04

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Romain a écrit:

Ju a écrit:

Code:

onclick="quoteadd(this,40356)"

Code:

<input type="hidden" id="q40356" name="q40356" class="quoteadd" />

Merci Ju pour ta réponse, mais j'ai une question  info

Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message  wink

Cordialement,

Romain

Ok, merci Boudha, je me suis arrangé autrement en mettant ceci :

Code:

<li class="postquote">'.$lang_topic['Quote'].' onclick="quoteadd(this,'.$cur_post['id'].')" /><input type="hidden" id="q'.$cur_post['id'].'" name="q'.$cur_post['id'].'" class="quoteadd" style="display:none" /></li>';

wink

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#6 07/10/06 17:36:24

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Romain a écrit:

Ok, merci Boudha, je me suis arrangé autrement en mettant ceci :

Code:

<li class="postquote">'.$lang_topic['Quote'].' onclick="quoteadd(this,'.$cur_post['id'].')" /><input type="hidden" id="q'.$cur_post['id'].'" name="q'.$cur_post['id'].'" class="quoteadd" style="display:none" /></li>';

wink

Bah c'est parfait, c'est exactement ça.
Tout marche ?



TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#7 07/10/06 17:37:35

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Désolé pour le double post :

Ju, il faut bien insérer ceci :

Code:

<script type="text/javascript">
<!--
function flashreply() {
    document.getElementById('flash').style.display = (document.getElementById('flash').style.display == 'block') ? 'none' : 'block';
}

function quoteadd(img,post) {
    if(document.getElementById('q'+post).value == 0) {
        document.getElementById('q'+post).value = 1;
        var reg = new RegExp('(quote_p)', 'g');
        img.src = img.src.replace(reg, 'quote_m');
    } else {
        document.getElementById('q'+post).value = 0;
        var reg = new RegExp('(quote_m)', 'g');
        img.src = img.src.replace(reg, 'quote_p');
    }

    return true
}

function quotego(button) {
    var urlgetq = '';
    var chpsq = document.getElementsByTagName('input');

    for(var i=0; i < chpsq.length; ++i) {
        if(chpsq[i].className == 'quoteadd' && chpsq[i].value == 1)
            urlgetq += '&q'+chpsq[i].name.substring(1)
    }
    document.location = button.href+urlgetq;

    return false
}
// -->
</script>

Je l'ai inséré dans le viewtopic.php, après :

Code:

// Load the viewtopic.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/topic.php';

Mais j'ai une erreur  aww

Code:

Parse error: syntax error, unexpected '<' in /mnt/135/sdb/a/4/.../.../viewtopic.php on line 43

Merci d'avance !

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#8 07/10/06 17:47:12

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Raté, faut mettre tout ça dans le header (ps: flashreply ça n'a rien à voir)



TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#9 07/10/06 17:48:41

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Ju a écrit:

Raté, faut mettre tout ça dans le header (ps: flashreply ça n'a rien à voir)

Merci, j'ai pas trié pour le flashreply  tongue

Je regarde wink

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#10 07/10/06 18:21:35

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Un autre problème, quand je sélectionnes les messages à citer, ça marche bien biggrin , l'url est bien modifié comme ici, cependant, je n'ai aucun message cité là où je doit écrire mon message, y avait-il une modif à faire dans post.php ?  redface

Merci d'avance !  great

Cordialement,

Romain

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#11 07/10/06 18:49:24

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Faut lire là par contre.......

Ju a écrit:

Pour la restitution des différentes citations dans le champ de la page post.php, on scanne la variable $_GET (ac un  foreach par exemple), on récupére toutes les variables qui n'ont pas de valeur (puisqu'on envoi que les noms, par exemple q4556&q8966&q32158) et par le même système qui est prévu pour un quote simple, on associe une boucle qui concaténe les citations une par une.

Je te laisse chercher.




TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#12 03/12/06 10:28:51

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Salut à tous ! biggrin

Je reviens sur ce sujet, car j'aimerais avoir cette fonction :

J'ai mis ce code dans post.php  :

Code:

    // If a quote-id was specified in the url.
    if (isset($_GET['q']))
    {
        $qid = intval($_GET['q']);
        if ($q < 1)
            message($lang_common['Bad request']);

        $result = $db->query('SELECT poster, message FROM '.$db->prefix.'posts WHERE id='.$q.' AND topic_id='.$tid) or error('Impossible de retrouver les informations de citation', __FILE__, __LINE__, $db->error());
        if (!$db->num_rows($result))
            message($lang_common['Bad request']);

        list($q_poster, $q_message) = $db->fetch_row($result);

        $q_message = str_replace('[img]', '[url]', $q_message);
        $q_message = str_replace('[/img]', '[/url]', $q_message);
        $q_message = pun_htmlspecialchars($q_message);

        if ($pun_config['p_message_bbcode'] == '1')
        {

Mais rien ni fait frown , il n'y a rien là où l'on écrit le message. aww

Si quelqu'un a une idée, je suis preneur. winktongue

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#13 03/12/06 21:33:15

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Tu parles de quoi là Romain ?

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#14 04/12/06 19:24:39

Mistic Warrior
CtrlAltUser Actif
Lieu: Suisse
OS: Linux [autre]
Date d'inscription: 31/05/04
Messages: 711
Envoyer un MP

  Email  Site web

Re: MultiQuote

en fait à voir il avait pas terminé son module de multiquote et il fallait modifier un truc dans post.php pour le terminer (ce à quoi tu avais répondu "je te laisse chercher avec ça).

Et là il propose son code car visiblement il fonctionne pas totalement biggrin

D'ailleurs c'est vrai que c'est énorme ce système de multi-quote


In a world without wall nor fences, who needs Windows and Gates ?

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#15 04/12/06 19:59:04

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Exactement Mistic'. wink

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#16 04/12/06 21:53:26

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Haaa ok.
Je prends le temps de copier-coller du code demain (pas simple, faut que je dégage les modifs qui ont rien à voir).

Mistic Warrior a écrit:

D'ailleurs c'est vrai que c'est énorme ce système de multi-quote

A noter que l'idée n'est pas de moi mais de IPB, je n'ai fait que réinventer la roue sur un autre châssis wink

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#17 05/12/06 12:30:17

Romain
CtrlAltUser
Lieu: 127.0.0.1
OS: Windows 2k/NT/XP
Date d'inscription: 29/07/06
Messages: 200
Envoyer un MP

  Email  Site web

Re: MultiQuote

Merci Ju ! kiss

Si tu as le temps, est-ce qu'il y aurais moyen de modifier le script javascript pour que ce soit du texte à la place d'une image ?

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation

#18 05/12/06 20:54:44

Ju
ju@jabber.cc
Equipe Admin
Lieu: Boston, Texas
OS: Linux Debian
Date d'inscription: 26/01/04
Messages: 5891
Envoyer un MP

  Email  Site web

Re: MultiQuote

Dans post.php (les 5 premières lignes et la dernière sont d'origine) :

Code:

// If a topic id was specified in the url (it's a reply).
if ($tid)
{
    $action = $lang_post['Post a reply'];
    $form = '<form id="post" method="post" action="post.php?action=post&amp;tid='.$tid.'" onsubmit="this.submit.disabled=true;if(process_form(this)){return true;}else{this.submit.disabled=false;return false;}">';

    if(isset($_GET['qid']))
        $quoteadd[] = $_GET['qid'];
    foreach($_GET as $key => $value) {
        if(empty($value))
            $quoteadd[] = substr($key,1,strlen($key));
    }

    // If a quote-id was specified in the url.
    if (!empty($quoteadd))
    {
        $quote = '';
        for($q=0; $q < count($quoteadd); $q++) {
            $qid = intval($quoteadd[$q]);
            if ($qid < 1)
                message($lang_common['Bad request']);

            $result = $db->query('SELECT poster, message FROM '.$db->prefix.'posts WHERE id='.$qid.' AND topic_id='.$tid) or error('Unable to fetch quote info', __FILE__, __LINE__, $db->error());
            if (!$db->num_rows($result))
                message($lang_common['Bad request']);

            list($q_poster, $q_message) = $db->fetch_row($result);

            $q_message = preg_replace("/\[swf url=([^ ]+) width=([0-9]*) height=([0-9]*)\]/", "[url]$1[/url]", $q_message);
            $q_message = str_replace('[img]', '[url]', $q_message);
            $q_message = str_replace('[/img]', '[/url]', $q_message);
            $q_message = pun_htmlspecialchars($q_message);

            if ($pun_config['p_message_bbcode'] == '1')
            {
                // If username contains a square bracket, we add "" or '' around it (so we know when it starts and ends)
                if (strpos($q_poster, '[') !== false || strpos($q_poster, ']') !== false)
                {
                    if (strpos($q_poster, '\'') !== false)
                        $q_poster = '"'.$q_poster.'"';
                    else
                        $q_poster = '\''.$q_poster.'\'';
                }
                else
                {
                    // Get the characters at the start and end of $q_poster
                    $ends = substr($q_poster, 0, 1).substr($q_poster, -1, 1);

                    // Deal with quoting "Username" or 'Username' (becomes '"Username"' or "'Username'")
                    if ($ends == '\'\'')
                        $q_poster = '"'.$q_poster.'"';
                    else if ($ends == '""')
                        $q_poster = '\''.$q_poster.'\'';
                }

                $quote .= '[quote='.$q_poster.']'.$q_message.'[/quote]
'."\n\n";
            }
            else
                $quote .= '> '.$q_poster.' '.$lang_common['wrote'].':'."\n\n".'> '.$q_message."\n\n";
        }
    }

    $forum_name = '<a href="forum.html'.$cur_posting['id'].'">'.pun_htmlspecialchars($cur_posting['forum_name']).'</a>';

Pour que ça soit du texte, suffit de mettre :

Code:

<a href="javascript:;" onclick="quoteadd(40356)" id="qp40356">Citer +</a><a href="javascript:;" onclick="quoteadd(40356)" id="qm40356" style="display: none">Citer -</a>

à la place de l'image ac les onclick (tjrs en remplacant 40356 par la variable hein).

Et le javascript :

Code:

function quoteadd(post) {
    if(document.getElementById('q'+post).value == 0) {
        document.getElementById('q'+post).value = 1;
        document.getElementById('qm'+post).style.display = 'inline';
        document.getElementById('qp'+post).style.display = 'none';
    } else {
        document.getElementById('q'+post).value = 0;
        document.getElementById('qm'+post).style.display = 'none';
        document.getElementById('qp'+post).style.display = 'inline';
    }

    return true
}

En espérant que je n'ai rien oublié.

TOP Hors ligne

  • Signaler
  • Citer
  • Ajouter à la citation
Actuellement aucun autre membre et 1 invité sur ce topic
Membres : [S'enregistrer]

Pied de page du Forum

Pub hébergeur :


CtrlAltSuppr.com, forums officiels de JSAND partagés avec Geek&Hype

Powered by PunCAS (JSAND) based on PunBB
© Copyright 2002–2005 Rickard Andersson