Vous n'êtes pas connecté.





Salut à tous,
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
Merci d'avance !
Cordialement,
Romain
TOP Hors ligne


Quasiment tout est sous tes yeux (ou plutôt sous la source), en javascript.
Au niveau des boutons "Citer +" :
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) :
<input type="hidden" id="q40356" name="q40356" class="quoteadd" />
La fonction quoteadd appellée :
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 :
onclick="quotego(this);return false"
Ce qui appelle :
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





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
Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message
Cordialement,
Romain
TOP Hors ligne

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
![]()
Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message![]()
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 :
onclick="quoteadd(this,<?php echo $id_topic ?>)"
En éspérant d'avoir aidé 
Dernière modification par Boudha (07/10/06 16:04:44)
TOP Hors ligne





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
![]()
Comment je peux récupérer cette variable : "onclick="quoteadd(this,40356 )""
Pour que ce soit celle de l'id du post à chaque message![]()
Cordialement,
Romain
Ok, merci Boudha, je me suis arrangé autrement en mettant ceci :
<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>';

TOP Hors ligne


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>';
Bah c'est parfait, c'est exactement ça.
Tout marche ?
TOP Hors ligne





Désolé pour le double post :
Ju, il faut bien insérer ceci :
<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 :
// Load the viewtopic.php language file require PUN_ROOT.'lang/'.$pun_user['language'].'/topic.php';
Mais j'ai une erreur
Parse error: syntax error, unexpected '<' in /mnt/135/sdb/a/4/.../.../viewtopic.php on line 43
Merci d'avance !
TOP Hors ligne


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





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
Je regarde 
TOP Hors ligne





Un autre problème, quand je sélectionnes les messages à citer, ça marche bien
, 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 ?
Merci d'avance !
Cordialement,
Romain
TOP Hors ligne


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





Salut à tous !
Je reviens sur ce sujet, car j'aimerais avoir cette fonction :
J'ai mis ce code dans post.php :
// 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
, il n'y a rien là où l'on écrit le message.
Si quelqu'un a une idée, je suis preneur. 
TOP Hors ligne


Tu parles de quoi là Romain ?
TOP Hors ligne







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 
D'ailleurs c'est vrai que c'est énorme ce système de multi-quote
TOP Hors ligne





Exactement Mistic'. 
TOP Hors ligne


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 
TOP Hors ligne





Merci Ju !
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


Dans post.php (les 5 premières lignes et la dernière sont d'origine) :
// 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&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 :
<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 :
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