Nouveau sujet Répondre Imprimer Syndication RSS 2.0

[RC5]Changement du logo impossible

Nouvelle étincelle
Avatar de oppie
  • Messages : 12
  • Inscrit : 30 Octobre 2007
Message édité 3 fois, dernière édition par oppie, 31 Octobre 2007, 2:31     Lien vers ce message 31 Octobre 2007, 2:27

Reprise du dernier message

Là je comprends pas o_o la prévisualisation fonctionne avec les deux codes sources.
Le message est vide avec les deux codes, alors qu'avec un seul code source ça passe:'(

Rassurez-moi, mon message est bien passé avec un seul code source là ?

Pour le deuxième code source :

<?php
/*
** +---------------------------------------------------+
** | Name :		~/main/class/class_tpl.php
** | Begin :	13/06/2005
** | Last :		12/10/2007
** | User :		Genova
** | Project :	Fire-Soft-Board 2 - Copyright FSB group
** | License :	GPL v2.0
** +---------------------------------------------------+
*/

/*
** Classe de gestion de template
** La documentation sur cette classe et ses possibilités se trouve dans ~/doc/template.html
*/
class Tpl extends Fsb_model
{
	// Répertoire du template
	public $tpl_dir = '';

	// Boolean pour savoir si on utilise le cache ou non
	public $use_cache = TRUE;

	// Tableau contenant toutes les variables du template, ainsi que les switchs et les blocks
	public $data = array();

	// Tableau contenant les alias, empilés par ordre d'aparition
	private $stack = array();

	// Contient le numéro de l'alias courant, dans la pile
	private $current_stack = -1;

	// Alias courant
	public $alias = '';
	
	// Met en cache les calculs des blocks
	private $cache_block = array();
	
	// Variables pour le parse des blocks
	public $count = array();
	public $i = array();

	/*
	** Constructeur de la classe Tpl()
	** -----
	** $tpl_dir ::			Répertoire contenant les fichiers templates
	*/
	public function __construct($tpl_dir)
	{
		$this->set_template($tpl_dir);
		$this->current_stack = -1;
		$this->stack = array();
	}

	/*
	** Annonce qu'un fichier template va être créé plus tard dans le script.
	** Cette fonction est à utiliser si vous souhaitez déclarer des variables avant
	** de déclarer un nom pour le fichier template.
	** -----
	** $alias ::	Nom de l'alias du futur template
	*/
	public function prepare_file($alias = 'main')
	{
		$this->data[$alias] = array(
			'file' =>		NULL,
			'var' =>		array(),
			'block' =>		array(),
			'switch' =>		array(),
		);
		
		$this->current_stack++;
		$this->stack[$this->current_stack] = $alias;
	}

	/*
	** Créé un alias ayant comme modèle le template passé en paramètre. L'alias est ajouté
	** dans la pile d'alias afin de permettre un imbriquement simple de templates.
	** -----
	** $alias ::		Alias du modèle
	** $template ::		Modèle de template à charger
	*/
	public function set_file($template, $alias = 'main')
	{
		$file = $this->tpl_dir . $template;
		if (!is_file($file))
		{
			trigger_error('Tpl->set_file :: Impossible de trouver le template : ' . $file, FSB_ERROR);
		}

		if (!isset($this->data[$alias]))
		{
			$this->data[$alias] = array(
				'file' =>		$file,
				'var' =>		array(),
				'block' =>		array(),
				'switch' =>		array(),
			);

			$this->current_stack++;
			$this->stack[$this->current_stack] = $alias;
		}
		else
		{
			$this->data[$alias]['file'] = $file;
		}
	}

	/*
	** Assigne un dossier pour le thème
	** -----
	** $tpl_dir ::			Répertoire contenant les fichiers templates
	*/
	public function set_template($tpl_dir)
	{
		// Chargement du config_tpl s'il existe
		$config_tpl_dir = substr($tpl_dir, 0, -6);
		if (file_exists($config_tpl_dir . 'config_tpl.' . PHPEXT))
		{
			include($config_tpl_dir . 'config_tpl.' . PHPEXT);
			Fsb::$session->style = $config_tpl;
		}

		$this->tpl_dir = $tpl_dir;
		if (!is_dir($this->tpl_dir))
		{
			trigger_error('Tpl->Tpl :: ' . $this->tpl_dir . ' n\'est pas un répertoire', FSB_ERROR);
		}
	}

	/*
	** Ajoute un tableau de variables de templates au modèle actuel
	** -----
	** $ary ::		Tableau contenant en clef les variables de templates et en valeurs ce par quoi elles
	**			seront remplacées
	** $alias ::		Alias à spécifier pour assigner ces variables à un modèle particulier
	*/
	public function set_vars($ary, $alias = NULL)
	{
		if (!is_array($ary))
		{
			trigger_error('Tpl->set_vars :: Le premier argument doit être un tableau', FSB_ERROR);
		}

		$current_alias = (($alias == NULL) ? $this->stack[$this->current_stack] : $alias);
		$this->data[$current_alias]['var'] = array_merge($this->data[$current_alias]['var'], $ary);
	}

	/*
	** Ajoute un block de variables pour le modèle de template
	** -----
	** $block ::	Nom du block. Si ce block est rataché a des précédents blocks, utiliser . comme séparateur
	**				de block ; par exemple block1.block2.blockN
	** $ary ::		Tableau contenant en clef les variables de templates et en valeurs ce par quoi elles
	**				seront remplacées
	** $alias ::	Alias à spécifier pour assigner ces variables à un modèle particulier
	*/
	public function set_blocks($block, $ary = array(), $alias = NULL)
	{
		$current_alias = ($alias == NULL) ? $this->stack[$this->current_stack] : $alias;
		$explode = explode('.', $block);
		$count = count($explode) - 1;

		$tmp = &$this->data[$current_alias]['block'];
		for ($i = 0; $i < $count; $i++)
		{
			if (!isset($tmp[$explode[$i]]))
			{
				trigger_error('Tpl->set_blocks :: Le block ' . $explode[$i] . ' n\'existe pas', FSB_ERROR);
			}
			$tmp = &$tmp[$explode[$i]];
			$tmp = &$tmp[count($tmp) - 1];
		}

		if (!isset($tmp[$explode[$i]]))
		{
			$tmp[$explode[$i]] = array();
		}

		//
		// ITERATOR est une variable de template donnant l'itération actuelle dans un block
		// SIZEOF est une variable de template donnant le nombre de cycles pour le block
		// FIRST_ROW est une variable de template définissant s'il s'agit de la première ligne
		// LAST_ROW est une variable définissant s'il s'agit de la dernière ligne
		//
		$ary['ITERATOR'] = count($tmp[$explode[$i]]);
		$ary['LAST_ROW'] = TRUE;
		if ($total = count($tmp[$explode[$i]]))
		{
			$ary['SIZEOF'] = &$tmp[$explode[$i]][0]['SIZEOF'];
			$ary['FIRST_ROW'] = FALSE;
			$tmp[$explode[$i]][$total - 1]['LAST_ROW'] = FALSE;
		}
		else
		{
			$ary['FIRST_ROW'] = TRUE;
		}
		$tmp[$explode[$i]][] = $ary;
		$tmp[$explode[$i]][0]['SIZEOF'] = $total + 1;
	}

	/*
	** Modifie un block de variable déjà défini. Il est donc possible de créer un block avec la méthode Tpl::set_blocks() puis
	** de modifier par la suite des variables propres à ce block.
	** -----
	** $block ::	Nom du block. Si ce block est rataché a des précédents blocks, utiliser . comme séparateur
	**				de block ; par exemple block1.block2.blockN
	** $pos ::		Position du block à modifier par rapport à la valeur courante. Par exemple si vous souhaitez modifier
	**				les valeurs des variables du précédent block déclaré, il faut passer -1 à la position. Par exemple :
	**					Fsb::$tpl->set_blocks('test', array('KEY' => 'VALUE'), 'alias');
	**					Fsb::$tpl->update_blocks('test', -1, array('KEY' => 'NEW_VALUE'), 'alias');
	** $ary ::		Tableau contenant en clef les variables de templates et en valeurs ce par quoi elles
	**				seront remplacées
	** $alias ::	Alias à spécifier pour assigner ces variables à un modèle particulier
	*/
	public function update_blocks($block, $pos, $ary, $alias = NULL)
	{
		$current_alias = ($alias == NULL) ? $this->stack[$this->current_stack] : $alias;
		$explode = explode('.', $block);
		$count = count($explode) - 1;

		$tmp = &$this->data[$current_alias]['block'];
		for ($i = 0; $i < $count - 1; $i++)
		{
			if (!isset($tmp[$explode[$i]]))
			{
				trigger_error('Tpl->update_blocks :: Le block ' . $explode[$i] . ' n\'existe pas', FSB_ERROR);
			}
			$tmp = &$tmp[$explode[$i]];
			$tmp = &$tmp[count($tmp) - 1];
		}

		// Récupération du dernier block
		if (!isset($tmp[$explode[$i]]))
		{
			trigger_error('Tpl->update_blocks :: Le block ' . $explode[$i] . ' n\'existe pas', FSB_ERROR);
		}
		$tmp = &$tmp[$explode[$i]];
		$count_current = count($tmp);

		// Mise à jour des variables
		if (!isset($tmp[$count_current + $pos]))
		{
			trigger_error('Tpl->update_blocks :: La position indiquée n\'existe pas : ' . $pos, FSB_ERROR);
		}

		foreach ($ary AS $key => $value)
		{
			$tmp[$count_current + $pos][$key] = $value;
		}
	}

	/*
	** Créé un switch
	** -----
	** $name ::		Nom du switch
	*/
	public function set_switch($name, $alias = NULL)
	{
		$this->data[(($alias == NULL) ? $this->stack[$this->current_stack] : $alias)]['switch'][$name] = TRUE;
	}

	/*
	** Supprime un switch
	** -----
	** $name ::		Nom du switch
	*/
	public function unset_switch($name, $alias = NULL)
	{
		unset($this->data[(($alias == NULL) ? $this->stack[$this->current_stack] : $alias)]['switch'][$name]);
	}

	/*
	** Parse le fichier modèle donné
	** -----
	** $alias ::		Alias du fichier à parser
	** $keep_alias ::	Définit si on doit changer l'alias ou non
	*/
	public function parse($alias = 'main', $keep_alias = FALSE)
	{
		if (!isset($this->data[$alias]))
		{
			trigger_error('Tpl->parse :: L\'alias ' . $alias . ' n\'existe pas', FSB_ERROR);
		}

		// L'alias est dépilé
		if (!$keep_alias)
		{
			$this->alias = $alias;
		}
		array_pop($this->stack);
		$this->current_stack--;

		// Vérification de la mise en cache du template
		if ($this->use_cache)
		{
			$cache = Cache::factory('tpl');
			$hash = md5($this->data[$alias]['file']);

			if ($cache->exists($hash) && filemtime($this->data[$alias]['file']) == $cache->get_time($hash))
			{
				$tpl_code = $cache->get($hash);
			}
			else
			{
				$tpl_code = $this->compile($alias);
				$cache->put($hash, $tpl_code, '', filemtime($this->data[$alias]['file']));
			}
		}
		else
		{
			$tpl_code = $this->compile($alias);
		}

		// Affichage du template parsé
		if (Fsb::$debug->show_output)
		{
			eval($tpl_code);
			unset($tpl_code);
		}
	}

	/*
	** Retourne la valeur d'une variable de template courante
	*/
	public function get_current_var($str)
	{
		$str_block = '';
		eval('$value = ' . $this->block2code($str, $str_block, TRUE) . ';');
		return ($value);
	}

	/*
	** Compile le code du template avec les variables de template de celui
	** ci pour former un code PHP éxécutable.
	** -----
	** $alias ::	Alias du fichier à compiler
	** $content ::	Contenu par défaut
	*/
	public function compile($alias = 'main', $content = NULL)
	{
		if ($content == NULL)
		{
			// Lecture du contenu du fichier
			$filename = $this->data[$alias]['file'];
			if (empty($filename))
			{
				trigger_error('Tpl::compile() :: Aucun fichier template n\'a été renseigné, vous devez utiliser la méthode Tpl::set_file()', FSB_ERROR);
			}
			else if (!file_exists($filename))
			{
				trigger_error("Tpl::compile() :: Le fichier $filename n'existe pas", FSB_ERROR);
			}
			$content = file_get_contents($filename);
		}

		// Supression des commentaires de template
		$content = preg_replace('#<!--\#(.*?)\#-->#si', '', $content);
		
		// Parse des inclusions
		$content = preg_replace('#<include name="([a-zA-Z0-9/\._]+)"( */)?>#si', "<?php \$this->include_tpl('\\1'); ?>", $content);

		// Parse des variables de langues / FAQ / IMG / configuration
		$content = preg_replace('#\{LG_([0-9A-Z_]*?)\}#i', "<?php echo Fsb::\$session->lang(strtolower('\\1')); ?>", $content);
		$content = preg_replace('#\{FAQ_([0-9A-Z]*?)_([0-9A-Z_]*?)\}#i', "<?php echo sid(ROOT . 'index.' . PHPEXT . '?p=faq&amp;section=' . strtolower('\\1') . '&amp;area=' . strtolower('\\2')); ?>", $content);
		$content = preg_replace('#\{(IMG_[0-9A-Z_]*?)\}#i', "<?php echo Fsb::\$session->img(strtolower('\\1')); ?>", $content);
		$content = preg_replace('#\{CFG_([0-9A-Z_]*?)\}#i', "<?php echo Fsb::\$cfg->get(strtolower('\\1')); ?>", $content);
		$content = preg_replace('#\{__ARG([0-9]+)\}#i', "<?php echo @func_get_arg(\\1); ?>", $content);
		
		// Parse des simples variables
		$content = preg_replace('#\{([0-9A-Z_]+)\}#i', "<?php echo @Fsb::\$tpl->data[Fsb::\$tpl->alias]['var']['\\1']; ?>", $content);

		// Parse des variables de blocks
		$content = preg_replace_callback('#\{(([0-9a-z_]+\.)+)([0-9A-Z_]+)\}#i', array(&$this, 'compile_block_vars'), $content);

		// Parse des blocks
		$content = preg_replace_callback('#<block(else)? name="([a-z0-9_.-]+)">#si', array(&$this, 'compile_block'), $content);
		$content = preg_replace('#<\/(block|blockelse|if|switch)>#si', "<?php } ?>", $content);

		// Parse des instructions de controle
		$this->compile_scripting($content);

		// Parse des fonctions
		$content = preg_replace_callback('#\#([a-zA-Z0-9_]+) *\{([^}]*?)\}#si', array(&$this, 'compile_functions'), $content);

		// Parse des fonctions de template
		$content = preg_replace_callback('#<function name="([a-zA-Z0-9_]*?)">(.*?)</function>#si', array(&$this, 'compile_functions_declaration'), $content);

		// Parse des appels de fonctions de template
		$content = preg_replace_callback('#<call name="([a-zA-Z0-9_]*?)"(.*)( */)>#i', array(&$this, 'compile_functions_call'), $content);

		// Nettoyage du code
		$content = str_replace('?><?php', '', $content);

		//echo "<xmp>$content</xmp>";exit;
		return (" ?>$content<?php ");
	}

	/*
	** Compile les instructions de controle propre au template (<if>, <switch>, etc ...)
	** -----
	** $content ::		Contenu du template
	*/
	private function compile_scripting(&$content)
	{
		$content = preg_replace_callback("/<(else)?if content=\"([a-zA-Z0-9 \n\t\-\+\*\/%=_\(\)'\"\.\$!<>\\\]*?)\">/si", array(&$this, 'compile_scripting_vars'), $content);
		$content = preg_replace_callback('/<switch name="([a-z0-9_&|! \(\)]+)">/si', array(&$this, 'compile_switch'), $content);
		$content = preg_replace('/<else>/si', "<?php } else { ?>", $content);
		$content = preg_replace('/<variable name="([A-Z0-9_]+)" value="(.*?)"( *\/)?>/si', "<?php Fsb::\$tpl->set_vars(array('\\1' => '\\2'), Fsb::\$tpl->alias) ?>", $content);
	}

	/*
	** Compile les instructions de controle "if" et "else if", tout en gérant
	** les variables de templates qui doivent cette fois être précédées d'un $. Par
	** exemple : <if content="$block1.block2.VAR == 51">
	*/
	private function compile_scripting_vars($match)
	{
		$else = $match[1];
		$control = $match[2];

		$control = preg_replace('#\$CFG_([0-9A-Z_]*?)( |$)#i', "Fsb::\$cfg->get(strtolower('\\1'))", $control);
		$control = preg_replace('/\$([0-9A-Z_]+)( |$)/si', "@Fsb::\$tpl->data[Fsb::\$tpl->alias]['var']['\\1']", $control);
		$control = preg_replace_callback('/\$(([0-9a-z_]+\.)+)([0-9A-Z_]+)($| )/si', array(&$this, 'compile_block_scripting_vars'), $control);
		$control = stripslashes($control);
		return ('<?php ' . ((strtolower($else) == 'else') ? '} else ' : '') .  "if ($control) { ?>");
	}

	/*
	** Remplace un block <!-- BEGIN --> par une boucle PHP for () executable
	*/
	private function compile_block($match)
	{
		$else = $match[1];
		$block = $match[2];

		$str_block = '';
		$str = $this->block2code($block, $str_block, TRUE);
		
		if ($else == 'else')
		{
			$code = "<?php if (!Fsb::\$tpl->count['$str_block']) { ?>";
		}
		else
		{
			$code = "<?php Fsb::\$tpl->count['$str_block'] = (isset($str)) ? count($str) : 0; for (Fsb::\$tpl->i['$str_block'] = 0; Fsb::\$tpl->i['$str_block'] < Fsb::\$tpl->count['$str_block']; Fsb::\$tpl->i['$str_block']++) { ?>";
		}
		return ($code);
	}

	/*
	** Compile les variables de blocks conditionelles ($FOO, $foo.BAR)
	*/
	private function compile_block_scripting_vars($match)
	{
		$match[4] = TRUE;
		return ($this->compile_block_vars($match));
	}

	/*
	** Remplace une variable de block par le tableau PHP qui lui corespond
	*/
	private function compile_block_vars($match)
	{
		$block = substr($match[1], 0, -1);
		$var = $match[3];
		$scripting = (isset($match[4])) ? TRUE : FALSE;

		$str_block = '';
		$str = $this->block2code($block, $str_block, FALSE) . "['$var']";
		if (!$scripting)
		{
			$code = "<?php echo @$str; ?>";
		}
		else
		{
			$code = " @$str ";
		}
		return ($code);
	}

	/*
	** Permet d'utiliser une fonction PHP dans le template
	*/
	private function compile_functions($match)
	{
		$name = $match[1];
		$args = $match[2];

		$args = stripslashes($args);
		$args = preg_replace('#\$LG_([0-9A-Z_]*?)(,| |$)#i', "@Fsb::\$session->lang(strtolower('\\1'))\\2", $args);
		$args = preg_replace('#\$(IMG_[0-9A-Z_]*?)#i', "Fsb::\$session->img(strtolower('\\1'))", $args);
		$args = preg_replace('/\$([0-9A-Z_]+)(,| |$)/si', "@Fsb::\$tpl->data[Fsb::\$tpl->alias]['var']['\\1']\\2", $args);
		$args = preg_replace_callback('/\$(([0-9a-z_]+\.)+)([0-9A-Z_]+)($| )/si', array(&$this, 'compile_block_scripting_vars'), $args);
		return ("<?php echo $name($args); ?>");
	}

	/*
	** Compile les switch. Il est possible d'utiliser les opérateurs & et | pour les switch, par exemple
	** <switch name="switch1 | switch2">
	*/
	private function compile_switch($match)
	{
		$if = $match[1];
		$if = preg_replace('#(?<=\s|\||&|\(|!|^)([a-zA-Z0-9_]+?)(?=\W|\s|\||&|\)|$)#i', "@Fsb::\$tpl->data[Fsb::\$tpl->alias]['switch']['\\1']", $if);
		$if = str_replace('&', ' AND ', $if);
		$if = str_replace('|', ' OR ', $if);
		return ("<?php if ($if) { ?>");
	}
	
	/*
	** Permet d'inclure un template dans un autre
	** -----
	** $tpl_name ::	Nom du template
	*/
	public function include_tpl($tpl_name)
	{
		$this->set_file($tpl_name, "tmp_$tpl_name");
		$this->parse("tmp_$tpl_name", TRUE);
	}

	/*
	** Parse des déclarations de fonctions template
	*/
	private function compile_functions_declaration($match)
	{
		return ('<?php function __fsb_template_' . $match[1] . "(){ ?>" . $match[2] . '<?php } ?>');
	}

	/*
	** Parse des appels de fonctions templates
	*/
	private function compile_functions_call($match)
	{
		preg_match_all('#arg([0-9]+)="([^"]*)"#i', $match[2], $m);
		$count = count($m[0]);
		$args = array("'" . $match[1] . "'");
		for ($i = 0; $i < $count; $i++)
		{
			$key = $m[1][$i];
			$value = $m[2][$i];
			if (!is_numeric($value))
			{
				$value = "'" . preg_replace('#<\?php echo(.*?)(; )?\?>#si', "' . \\1 . '", $value) . "'";
			}
			$args[$key] = $value;
		}

		return ('<?php __fsb_template_' . $match[1] . '(' . implode(', ', $args) . ') ?>');
	}

	/*
	** Transforme un block du type block1.block2.blockN en chaine de caractère
	** evaluable durant la compilation comme une variable de template
	** -----
	** $block ::		Nom du block
	** $alias ::		Alias du template courant
	** $number ::		Nombre de blocks en finalité
	** $type ::			Type de compilation de block
	*/
	private function block2code($block, &$str_block, $type)
	{
		if (isset($this->cache_block[$block]))
		{
			$str_block = $this->cache_block[$block]['str_block'];
			return ($this->cache_block[$block]['str'] . ((!$type) ? "[Fsb::\$tpl->i['$str_block']]" : ''));
		}
		
		$explode = explode('.', $block);
		$count = count($explode) - 1;
		$str_block = $explode[$count];
		$str = "Fsb::\$tpl->data[Fsb::\$tpl->alias]['block']";
		for ($i = 0; $i < $count; $i++)
		{
			$str .= "['${explode[$i]}'][Fsb::\$tpl->i['" . $explode[$i] . "']]";
		}

		$str .= "['${explode[$i]}']";
		
		// Mise en cache des blocks calculés pour éviter de repasser cette étape pour les même blocks
		$this->cache_block[$block] = array('str_block' => $str_block, 'str' => $str);
		
		if (!$type)
		{
			$str .= "[Fsb::\$tpl->i['" . $explode[$i] . "']]";
		}
		
		return ($str);
	}
}

/*
** Fonction annexe testant l'existance d'un switch
*/
function tpl_switch_exists($switch_name)
{
	return ((@Fsb::$tpl->data[Fsb::$tpl->alias]['switch'][$switch_name]) ? TRUE : FALSE);
}

/* EOF */
 
Volcan
Avatar de Spark
  • Messages : 1989
  • Inscrit : 24 Juin 2006
  Lien vers ce message 31 Octobre 2007, 11:18
Mais non aucun de nous, son message est vide,

regarde a nouveau mon message vide plus haut, tu verras juste

<blockquote id="post_content_6"></blockquote>


Si je fais une citation de ton message je vois ça :

[quote=BlackJowy,t=1193781439,id=88971][mail][/mail][/quote]


On vois bien les FSBcode mail


Mon site de jeux en réseau Hamachi :
http://www.jeux-reseau.fr
Le forum : http://forum.jeux-reseau.fr
http://img100.imageshack.us/img100/4097/voegelpc3jk2jx2kw4xg6.gif
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14507
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 29 Novembre 2007, 20:03
Pour le message vide ça venait du bug de limitation des caractères que BJ avait rapporté ya un moment et qui est corrigé.

Sinon pour le bug des images ça sera corrigé dans la prochaine version.


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
 
Nouvelle étincelle
Avatar de oppie
  • Messages : 12
  • Inscrit : 30 Octobre 2007
  Lien vers ce message 30 Novembre 2007, 10:32
Ok, merci :)
 
Répondre


.