Simplifier les paramétrages de votre site

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 660 fois - Téléchargée 24 fois

Contenu du snippet

Bonjour!

Cette source me sert à simplifier mes bases de données (et par la même occasion mes requêtes) en enregistrant tous mes paramètres dans une seule variable.
Pour être plus clair, un exemple:
J'ai une structure de configuration comme ca:
$configuration['envoi_mail']='oui' ou 'non';
$configuration['ouvrir_sur']= 'index', 'forum', 'news' ou 'chat';
$configuration['presentation']= 'style_1', 'style_2', ...;
Par exemple, 47 donnera $config['envoi_mail']='oui', $config['ouvrir_sur']='forum' et $config['presentation']='style_3'...

Les deux fonctions (creer_config() et recupconfig()) vous permettent de créer le nombre qui correspond à la config choisie, grace à une chaine binaire. Un bouleen sera donc 0 ou 1, un choix entre 4 possibilité sera 00,01,10 ou 11. Mais en automatique.
La première fonction crée le nombre associé à la config passée en paramètre, la seconde récupère la config en fonction du nombre en paramètre, dans un tableau.

Un exemple concrêt est dans après le code.

Source / Exemple :


//Les fonctions:
function recup_config($nombre,$structure,$nb_total_bits)
	{
	//On convertit la valeur en binaire
	$bin		= base_convert($nombre,10,2);
	//index est la position des bits à lire. Le premier est inutilisé mais sert à conserver une chaine de longueur fixe
	$index	= 1;
	foreach($structure as $cle=>$val)
		{//Pour chacune des propriétés
		if (!isset($val['max']))
			{//Le maximum n'est pas défini, on le calcule donc
			$nb_possibilites = count($val)-1;//-1 à cause du ['nom']
			$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
			}
			else
			{//Le maximum est défini, on le récupère alors
			$nb_bits = strlen(base_convert($val['max']-1,10,2));//-1 car le premier index est 0
			}
		//Dans $bin, on récupère les $nb_bits caractères à partir de $index
		$valeur = substr($bin,$index,$nb_bits);
		//On attribue la valeur lue dans le tableau $val à l'indice $valeur (converti en base 10) au champs de même nom du tableau de sortie
		$conf[$val['nom']] = $val[base_convert($valeur,2,10)];
		//On avance l'index $index de $nb_bits
		$index = $index + $nb_bits;
		}
	//On retourne $conf
	return $conf;
	}
function creer_config($config,$structure_configuration)
	{
	$indice	= 0;	//Indice dans $structure_configuration
	$retour	= '1';	//On insère un 1 en début de chaine pour éviter tout problème avec une éventuelle valeur 0 ou 01 pour le premier paramètre, ce qui décallerait tout
	foreach($config as $cle=>$val)
		{//On parcourt $config, la config à enregistrer
		if (!isset($structure_configuration[$indice]['max']))
			{//Le maximum n'est pas défini, on le calcule donc
			$nb_possibilites = count($structure_configuration[$indice])-1;//-1 à cause du ['nom']
			$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
			}
			else
			{//Le maximum est défini, on le récupère alors
			$nb_bits = strlen(base_convert($structure_configuration[$indice]['max']-1,10,2));//-1 car le premier index est 0
			}
		//On recherche $val, la valeur de la propriété à enregistrer, dans $structure_configuration[$indice]
		$lacle	= array_search($val,$structure_configuration[$indice]);
		//On convertit la clé en valeur binaire
		$ajout 	= base_convert($lacle,10,2);
		//On rajoute les éventuels 0 en début de chaine
		$ajout	= str_pad($ajout, $nb_bits, "0", STR_PAD_LEFT);
		//On concatène
		$retour	.= $ajout;
		//On passe à l'indice suivant
		$indice++;
		}
	//On renvoie la valeur en base 10
	return base_convert($retour,2,10);
	}

// EXEMPLE D'UTILISATION:
On crée la structure de toutes les paramètres possibles
$structure_configuration[0]['nom']	= 'envoi_mail'; 	//Le nom de la variable 0
$structure_configuration[0][0]		= 'oui'; 		//Première possibilité pour 0
$structure_configuration[0][1]		= 'non'; 		// Deuxième possibilité pour 0
$structure_configuration[1]['nom']	= 'ouvrir_sur'; 	//Le nom de la variable 1
$structure_configuration[1][0]		= 'index'; 		//...
$structure_configuration[1][1]		= 'forum';
$structure_configuration[1][2]		= 'news';
$structure_configuration[1][3]		= 'chat';
$structure_configuration[2]['nom']	= 'presentation';
$structure_configuration[2][0]		= 'style_1';
$structure_configuration[2][1]		= 'style_2';
$structure_configuration[2][2]		= 'style_3';
$structure_configuration[2][3]		= 'style_4';
$structure_configuration[2]['max']		= 8;			//On prévoit la possibilité d'inserer jusqu'à 8 styles
$nombre 	= 114;	//Nombre récupéré dans mysql (par exemple) qui définit comment interagit le site pouyr une personne en particulier
echo '<b>Envoi: '.$nombre.'</b><br />'."\n";
$config = recup_config($nombre,$structure_configuration,$max);
echo 'Détail de la config: ';
print_r($config);
echo '<br />'."\n";
$num_enregistre	= creer_config($config,$structure_configuration);
echo '<b>Retour: '.$num_enregistre.'</b><br>'."\n";

Conclusion :


Voila!
Une fois créé le tableau $structure_configuration, il est très simple de mettre en place un formulaire de configuration, dont les données seront insérées dans $config, pour enregistrer la configuration, par exemple dans mysql.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
"Ouvrir et fermer un fichier, PHP fait ça sans arrêt quand vous utilisez les sessions..."
Ne parlons pas des include() et autre require() :D
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2006

Je vais me renseigner, ca fait un moment que je me dis qu'il faudrait que je me penche dessus... Surtout que là je m'amuse avec ajax, mais vu le nom de la methode, je pense que ca doit être encore plus efficace sur du xml...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Un fichier par personne (ou par "client", ça dépend du site).
Ca devient simple : tu lis le fichier via DOM (rapide) (en prenant évidemmnt en compte que ton fichier s'appelle un truc du genre : user_id.xml, tu accèdes directement à la propriété (ou les propriétés) qui t'intéresse (via XPath), et basta.
Ouvrir et fermer un fichier, PHP fait ça sans arrêt quand vous utilisez les sessions...on ne peut pas dire que ça ralentisse beaucoup, hein ? ;-)
Messages postés
180
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
8 septembre 2006

Je comprends bien vos arguments...
C'est vrai que si c'est utilisé sur des variables qui ne servent qu'une fois, ca n'a pas grand interet, ou du moins les conserver n'a pas grand interet, il suffit alors d'unsetter les variables qui ne serviront plus.
Enfin, j'avoue que je ne sais pas encore quand/si ce code me servira, je l'ai fait pour utiliser de nouvelles fonctions (pour moi), et un peu, justement, pour me torturer l'esprit (Malalam->Ca m'arrive de me le torturer 10 fois plus, tu devrais voir ca).
Je l'ai partagé autant pour permettre d'apprendre quelques fonctions à ceux qui sont encore plus débutants que moi, que pour recevoir des critiques (ca au moins ca a marché).
Par contre, (au risque de me faire frapper par malalam) je ne me suis encore jamais interessé au xml, mais je n'arrive pas à comprendre comment tu l'utiliserais... Un fichier par personne ou un enorme fichier qui contiendrait les 50 paramètres des 500 membres du site?

En tout cas merci d'avoir pris le temps de poster...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
z'allez dire que je me répète...mais, au grand étonnement de tous j'en suis sûr, j'utilise fréquemment le XML pour ce genre de configurations.
C'est nettement plus simple à utiliser tant pour le codeur, que pour un utilisateur néophyte. Et c'est très facile à entretenir.
ceci dit, je suis d'accord avec le 1er commentaire : il y a de l'idée. Mais aussi avec les suivants : c'est trop complexe pour ce que ça fait. Et j'ose même pas imaginer la gueule du tableau pour un gros site avec tout plein d'options personnalisables. Et en effet, gros défaut, tu trimballes en permanence des options dont tu n'as pas besoin tout le temps.
Mais y a de l'idée...:-)
De toutes évidences, tu aimes te torturer l'esprit...
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.