
Membre
22 messages
16 ans |
Bonjour, a tous,
Voila j'ai un petit (dans ma plantation) !
Je suis sur la réalisation d'un forum (Ici)
Bien sur il est en Vbeta. Mais je voudrais ajouté du bbcode(modifié à ma version), j'ai fait mon code c'est ok, mais voila dès que je veux incrémenter plusieurs mêmes balises, ça bloque, alors voila je me suis dit que comme sur ce forum l'incrémentation de balises(par ex citation) fonctionne, peut-être gaga voudrait bien m'expliquer comment il fait fonctionner cela !
Exemple :
Citation : "Vistuo" Citation Partie 1 Citation : "Vistuo" Citation Partie 1.1
Je ne pense pas que mon code php soit interressant car il marche qu'a moitié ! , et est basé sur le cours du SDZ (bbcode)
Voila !
Merci beaucoup encore gaga (et Ze thriller pour la v3.3)
|

Membre
22 messages
16 ans |
Enfin !
J'ai fini mon code qui est fonctionnet et très pratique, il est à vous !
C'est une classe :
<?php
class vcode {
public $tag_limit= array('\[', '\]', '[', ']'); //Les 2premiers pour les regex les autres pour le vrai nom => pour les 2prem '[' devient '\[' car c'est un métacaractères
//1 : Tag d'ouverture et de fermeture
//2 : on met la regex de la valeur, si il ni a pas de valeur on met ''
//3 : Fermeture de la balise
//4 : Imbrication de balises de même nom à l'interieur
//5 : Le html après le remplacement
/////////////////////////////
// Ex: array('gras','',true,false,'<strong>$1</strong>'),
//[gras]string[/gras] -> <strong>string</strong>
// Ex: array('quote','(="(.+)")?',true,true,'Citation : $2 $3'),
//[quote]string[/quote] -> Citation : <br ./> string
//[quote="Robert"]string[/quote] -> Citation : Robert string
// Ex: array('ligne','',false,false,'<hr />'),
//[ligne] -> <hr />
public $tags= array();
public function config ($file) {
if(! file_exists($file)) return false;
require_once($file);
if(! empty($tag_limit)&&is_array ($tag_limit)) $this-> tag_limit= $tag_limit;
if(! empty($tags)&&is_array ($tags)) $this-> tags= $tags;
return true;
}
private function imbrique ($reg, $tag) {
$o= $tag[2]. $tag[4];
$c= $tag[2]. '/'. $tag[4]. $tag[3];
while(strpos($this-> str, $o)!== FALSE && strpos($this-> str, $c)!== FALSE && strpos($this-> str, $o)<strpos ($this-> str, $c) && strpos($this-> str, $o)+ strlen($o)<strpos ($this-> str, $c)) {
$ipr= substr($this-> str, 0, strpos($this-> str, $o)). preg_replace('!'. $reg. '!isU', $tag[8], substr($this-> str, strpos($this-> str, $o)));
if(! empty($temp)&& $temp== $ipr) return true;
$this-> str= $temp= $ipr;
}
return true;
}
public function parse () {
foreach($this-> tags as $tag) {
$reg= $this-> tag_limit[0]. $tag[0]. $tag[1]. $this-> tag_limit[1];
if($tag[2]) $reg.= '(.+)'. $this-> tag_limit[0]. '/'. $tag[0]. $this-> tag_limit[1];
if($tag[3]) $this-> imbrique($reg, array_merge($this-> tag_limit, $tag));
else $this-> str= preg_replace('!'. $reg. '!isU', $tag[4], $this-> str);
}
return $this-> str;
}
}
?>
Dans une page quelquonque pour parser en vcode, bbcode, zcode, c'est vous qui vous voyez.
<?php
require_once('vcode.php');
$vc= new vcode ();
$vc-> config('vcode.inc.php'); //Pour changer la config
echo $vc-> parse('<gras >Message test</gras>'); //J'ai ajouter un espace a la balise pour ne pas avoir de remplacement sur le forum
?>
Puis pour changer la config, le fichier vcode.inc.php
<?php
$tag_limit= array('<', '>', '<', '>');
$tags= array(
array('gras', '', true, false, "<span class=\"vcode_gras\">$1</span>\n"),
array('citation', '(="(.+)")?', true, true, "<div class=\"vcode_bloc\">\n<div class=\"vcode_citation_auteur\">Citation : $2</div>\n<div class=\"vcode_citation\">\n$3\n</div>\n</div>"),
array('ligne', '', false, false, '<hr />')
);
?>
Voila ça marche du feu de dieu et en plus on peut mettre une infinité d'imbrication de balises et pas seulement 10 (pas vrai gaga26) !
Allez a+ Edité par vistuo le 20/08/2007 23:32
|