Templating

Une nouvelle fonction PHP développée par bibi Celle ci va servir a gérer plus facilement l’affichage d’enregistrement de base de données. Pourquoi se casser la tête à faire une fonction comme ca ? avec tous les moteurs de template qui existent ? Beh toujours pour la bonne et simple raison, que c’est plus [...]

Une nouvelle fonction PHP développée par bibi :) Celle ci va servir a gérer plus facilement l’affichage d’enregistrement de base de données. Pourquoi se casser la tête à faire une fonction comme ca ? avec tous les moteurs de template qui existent ? Beh toujours pour la bonne et simple raison, que c’est plus facile d’apprendre a utiliser une fonction que tout un système de templating avec des options en trop etc…

Le bébé et des explications dans la suite…

/**
 * insère les valeurs d'un tableau associatif dans une chaine en fonction des clés du tableau.
 *
 * @param Tableau associatif $items
 * @param Chaine $template
 * @param Valeurs par défaut $defaults
 * @return Chaine
 */
 
function template($items,$template,$defaults=array())
{
	define('DEFAULTSTRING',"Le champ <strong>%s</strong> n'est pas renseigné");
	define('SEARCHSTRING',"{%s}");
	$return = "";
 
	foreach($items as $item)
	{
		$templated_item = $template;
 
		foreach (array_keys($item) as $key)
		{
			if(isset($defaults[$key]))
			{$replace = $defaults[$key];}
			else
			{$replace = sprintf(DEFAULTSTRING,$key);}
			if(isset($item[$key]))
			{$replace = $item[$key];}
 
			$templated_item = str_replace(sprintf(SEARCHSTRING,$key),$replace,$templated_item);
		}
 
		$return .= $templated_item;		
	}
	return $return;
}

Le code n’est pas compliqué en soi… on prends un tableau “d’objets”, qu’on parcours. Chaque objet est en fait lui même un tableau associatif (notez que dans PHP5, un objet peut être parcouru comme un tableau).

Par exemple, si on a :

$items = array([0]=>array(['id']=>1,['nom']=>'Nanane',['age']=>25),[1]=>array(['id']=>2,['nom']=>'Obaka',['age']=>24))
$template = "{id}. {nom} a {age} ans<br/>";

La fonction template($items,$template) retournera :

"1. Nanane a 25 ans<br/>2.Obaka a 24 ans<br/>"

J’ai inséré quelques constantes pour qu’elle devienne un peu plus customizable. On peut donc changer la chaine de recherche (pour mettre par exemple des crochets ou rien du tout…). Et aussi intégrer un tableau de valeurs par défauts, au cas ou, et quand bien même, il y a une constante par défaut intégrée, modifiable elle aussi…

Je m’en sers pour développer plus facilement les templates de mon framework et mieux les isoler des traitements de données.

Voila ! Si vous avez des questions/commentaires, c’est en dessous que ca se passe ;)

Leave Your Response

* Name, Email, Comment are Required