Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Suggestion FSB2.0.1 (au vu du code)

Parser FSBCodes
Equipe des MODS
Avatar de Korko
  • Age : 22 ans
  • Messages : 2688
  • Inscrit : 06 Octobre 2004
Message édité 1 fois, dernière édition par Genova, 22 Avril 2008, 17:25     Lien vers ce message 21 Avril 2008, 22:07
J'ai vu que tu avais ajouté des variables pour le parsage des FSBCodes. Seul truc, tu ne passe pas ces infos aux fonctions generatrices résultat, si on a besoin de ces infos pour faire un traitement, c'est pas facile (enfin si, on peux toujours faire un global mais ça fais pas tres propre ici je trouve).

T'en penses quoi Géno ?

Note : Voici le corps de la méthode nommée (celle qui est dans FSB 2.0.1) :
	/*
	** Lance le parsing des FSBcode a partir des informations contenues dans la table fsb2_fsbcode
	** -----
	** $str ::	Chaine de caracteres a parser
	** $info ::	Tableau d'informations (variables predefinies)
	*/
	public function parse($str, $info = array())
	{
		// On recupere les informations sur les FSBcode
		if (!isset(self::$cache_fsbcode[$this->is_signature]))
		{
			$sql = 'SELECT *
					FROM ' . SQL_PREFIX . 'fsbcode
					WHERE fsbcode_activated' . (($this->is_signature) ? '_sig' : '') . ' = 1
					ORDER BY fsbcode_priority DESC';
			$result = Fsb::$db->query($sql, 'fsbcode_');
			$list = Fsb::$db->rows($result);
			self::$cache_fsbcode[$this->is_signature] = $list;
		}
		else
		{
			$list = self::$cache_fsbcode[$this->is_signature];
		}

		// On parcourt la liste des FSBcode pour parser le message
		foreach ($list AS $data)
		{
			// Si on encode du WYSIWYG, on ne prend pas en compte toutes les balises
			if ($this->only_wysiwyg && !$data['fsbcode_wysiwyg'])
			{
				continue ;
			}

			// Certaines balises ne sont pas parsees dans les signatures
			if ($this->is_signature && !$data['fsbcode_activated_sig'])
			{
				continue ;
			}

			// FSBcode gere par un appel de fonction
			if ($data['fsbcode_fct'])
			{
				$callback = '';
				if (method_exists($this, $data['fsbcode_fct']))
				{
					$callback = array(&$this, $data['fsbcode_fct']);
				}
				else if (function_exists($data['fsbcode_fct']))
				{
					$callback = $data['fsbcode_fct'];
				}

				if ($callback)
				{
					$pattern = '#\[' . $data['fsbcode_tag'] . '([=:]([^\]]*?))?\](.*?)\[/' . $data['fsbcode_tag'] . '\]#i' . ((!$data['fsbcode_inline']) ? 's' : '');
					while (preg_match($pattern, $str))
					{
						$str = preg_replace_callback($pattern, $callback, $str);
					}
				}
			}
			// FSBcode gere par un remplacement du code HTML
			else
			{
				$str = $this->parse_fsbcode_patterns($str, $data['fsbcode_search'], $data['fsbcode_replace'], $info);
			}
		}

		// Remplacement de [BR] par un saut de ligne
		$str = str_ireplace('[br]', '<br />', $str);

		if ($this->parse_eof)
		{
			$str = str_replace("\0", "\n", $str);
		}

		return ($str);
	}


Dieu vous aime. Offre soumise à conditions
Je suis une Brute
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14520
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 13 Mai 2008, 21:24
Sujet archivé pour la raison suivante : Bug corrigé dans la version en développement.

J'ai ajouté une propriété $info à la classe, ainsi dans les méthodes de callback suffit d'utiliser $this->info.


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Répondre


.