2009-08-28 5 views
0

Je travaille sur la section des commentaires pour un site, où les utilisateurs peuvent citer quelque chose qu'un autre utilisateur a dit. C'est votre bouton "devis" de base sur un forum.Citant des utilisateurs dans les forums

Utilisation de BBcode pour cela. Mais je ne sais pas comment faire pour obtenir le résultat.

Comment cette fonctionnalité est-elle généralement effectuée?

je peux avoir

[quote=username] some sentence [/quote] 

qui serait idéalement converti en

<blockquote>username said: 
some sentence 
</blockquote> 

A partir de maintenant, j'ai un code qui convertit

"[quote=username] ... [/quote]" 
into 
<blockquote> ... </blockquote> 

mais je perds le nom d'utilisateur

ce que je s le code j'utilise

// output user comment 
echo parse_quote($row['user_comment']); 


// and this is the function to parse the quote 

function parse_quote($str) { 
    $str = preg_replace("/\[quote=[\w\s\-\W][^\]]{1,}\]/", "<blockquote>:", $str); 
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str); 
    return $str; 
} 

Donc, en résumé, comment est fait habituellement des forums ... citant le est la bonne façon? Si oui, comment puis-je convertir

[quote=username] some sentence [/quote] 

dans

<blockquote>username said: 
some sentence 
</blockquote> 

Répondre

2

Essayez de changer à quelque chose comme:

function parse_quote($str) { 
    $str = preg_replace("/\[quote=([^\]]+)\]/", "<blockquote>$1 said:", $str); 
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str); 
    return $str; 
} 

Un peu plus modification sera nécessaire si vous voulez permettre aux gens de citation sans spécifier un nom d'utilisateur, comme [citer] du texte [/ quote].

1

Eh bien, une chose que je vais suggérer que vous voulez éviter plusieurs passages dans votre fichier PHP et fournit un moyen assez pratique de le faire en utilisant preg_replace_callback():

function process_codes($str) { 
    return preg_replace_callback('!\[(.+?)\]!', 'process_code', $str); 
} 

function process_code($matches) { 
    if ($matches[1] == '/quote') { 
    return '</blockquote>'; 
    } else if (preg_match('!quote\s*=\s*(.+?)!', $matches[1], $args)) { 
    return "<blockquote>$args[1] said:<br><br>"; 
    } 
    // etc 
} 
0

Non, Forum utilise généralement les éléments suivants format:

<div><strong>username</strong> said:</div> 
<blockquote> 
some sentence 
</blockquote> 
Questions connexes