Accueil phpBB News phpBB Forum phpBB & support Mods Module Modification phpBB-Power Tutoriaux Tutoriel phpBB-Power Conseil personalisation phpBB-Power Conseil optimisation phpBB-Power Partenaires phpBB-Power




[PHP-DOC] La fonction sprintf

 
Poster un nouveau sujet   Répondre au sujet    PhpBB-Power Index du Forum » Tutoriaux
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
c@rtm@n
Membres actifs


Inscrit le: 05 Nov 2004
Messages: 188
Localisation: Devant mon PC

MessagePosté le: Sam 20 Nov 2004 à 21:00    Sujet du message: [PHP-DOC] La fonction sprintf Répondre en citant

La fonction sprintf :

Certains l'ont peut-être déjà remarqué, cette fonction est assez utilisée sur phpbb.
Mais comment fonctionne t-elle vraiment ?

Nous allons voir dans ce tuto la structure de cette fonction, ainsi que quelques exemples basiques, puis nous verrons comment est-elle utilisée dans le cadre des forums phpBB et donc comment moduler son forum avec elle.


_________________
C@rtm@n <=> Fous Du Net (en construction)


Dernière édition par c@rtm@n le Sam 20 Nov 2004 à 21:33; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
c@rtm@n
Membres actifs


Inscrit le: 05 Nov 2004
Messages: 188
Localisation: Devant mon PC

MessagePosté le: Sam 20 Nov 2004 à 21:06    Sujet du message: Généralitées Répondre en citant

Pour faire simple voici une définition prise sur le site php.net :
Citation:
sprintf

(PHP 3, PHP 4 , PHP 5)
sprintf -- Retourne une chaîne formatée
Description
string sprintf ( string format [, mixed args [, mixed ...]])

sprintf retourne une chaîne formatée, avec le format format et en utilisant les arguments args.

La chaîne de format est composée de zéro, une ou plusieurs directives : les caractères ordinaires (à l'exception de %) qui sont copiés directement dans le résultat, et des spécifications de conversion, qui exploitent chacune un des arguments passé après la chaîne de format. Ces formats s'appliquent à sprintf() et printf().

Chaque spécification de conversion est constituée d'un signe de pourcentage (%), suivi d'un ou plusieurs des éléments suivants, dans cet ordre :

  1. Un optionnel spécificateur d'espacement qui dit quel spécificateur doit être utilisé pour espacer les résultats à la bonne taille de la chaîne. Celà peut être un caractère espace ou 0 (caractère zéro). Par défaut, l'espacement est effectué avec des espaces. Un caractère d'espacement altérnatif peut être spécifié en le préfixant avec un simple guillemet ('). Voir les examples ci-dessous.

  2. Un remplisseur optionnel qui indique quel caractère sera utilisé pour compléter le résultat jusqu'à la longueur requise. Ce peut être le caractère d'espace, ou le caractère 0. Par défaut, le remplissage se fait avec des espaces. Un autre caractère de remplissage peut être spécifié en le préfixant avec un guillemet simple (') : voir les exemples ci-dessous.

  3. Un spécificateur d'alignement qui indique si le résultat doit être aligné à gauche ou à droite. Par défaut, le résultat est aligné à gauche. Le caractère - fera que le résultat est aligné à droite.

  4. Un nombre optionnel, spécificateur de taille indique le nombre minimum de caractères que cette conversion doit fournir en résultat.

  5. Un spécificateur de précision qui indique le nombre de décimales qui doivent être affichées pour les nombres à virgule flottante. Lorsque vous utilisez ce spécificateur dans une chaîne, il agit comme un point de coupûre, définissant une limite maximal de caractères de la chaîne.

  6. Un spécificateur de type qui indique le type avec lequel l'argument sera traité. Plusieurs types possibles :

    • % - un caractère de pourcentage littéral. Aucun argument n'est nécessaire.
    • b - l'argument est traité comme un entier, et présenté comme un nombre binaire.
    • c - l'argument est traité comme un entier, et présenté comme le caractère de code ASCII correspondant.
    • d - l'argument est traité comme un entier, et présenté comme un nombre décimal signé.
    • e - l'argument est traité comme une notation scientifique (e.g. 1.2e+2).
    • u - l'argument est traité comme un entier, et présenté comme un nombre décimal non signé.
    • f - l'argument est traité comme un nombre à virgule flottante (type float), et présenté comme un nombre à virgule flottante.
    • o - l'argument est traité comme un entier, et présenté comme un nombre octal.
    • s - l'argument est traité et présenté comme une chaîne de caractères.
    • x - l'argument est traité comme un entier, et présenté comme un nombre hexadécimal (les lettres en minuscules).
    • X - l'argument est traité comme un entier, et présenté comme un nombre hexadécimal (les lettres en majuscules).

_________________
C@rtm@n <=> Fous Du Net (en construction)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
c@rtm@n
Membres actifs


Inscrit le: 05 Nov 2004
Messages: 188
Localisation: Devant mon PC

MessagePosté le: Sam 20 Nov 2004 à 21:18    Sujet du message: Exemples Répondre en citant

Bon, tout cela est bien gentil mais dans le vif, ça fonctionne comment ?

Exemple 1. Echange d'arguments
Code:
<?php
$format = "Il y a %d singes dans le %s";
sprintf($format, $num, $location);
?>

Cet exemple peut afficher par exemple : "Il y a 5 singes dans le bananier". Mais imaginez que la chaîne de format soit créée dans un script séparé (une bibliothèque), ca nous devons internationaliser cet affichage. Nous aurons peut être à écrire :

Exemple 2. Echange d'arguments (2)
Code:
<?php
$format = "Le %s a %d singes";
sprintf($format, $num, $location);
?>

Maintenant, nous avons un problème. L'ordre des arguments a été changé, et ne correspond pas à l'ordre des arguments dans le script PHP. Nous souhaitons laisser le code PHP tel quel, et simplement indiquer dans la chaîne de formatage l'ordre dans lequel les arguments doivent être repris. La chaîne de format peut être réécrite ainsi :

Exemple 3. Echange d'arguments (3)
Code:
<?php
$format = "Le %2\$s a %1\$d signes";
sprintf($format, $num, $location);
?>

Un des avantages est que vous pouvez désormais exploiter plusieurs fois les arguments sans les répéter. Ainsi :

Exemple 4. Echange d'arguments (4)
Code:
<?php
$format = "Le %2\$s a %1\$d singes.
           C'est un beau %2\$s, avec %1\$d signes.";
sprintf($format, $num, $location);
?>


*******************************************************

Ce qu'il faut retenir de ces exemples :
L'utilisation de la fonction sprintf permet à n'importe qui de changer la mise en forme de son texte sans avoir besoin de toucher à la structure même des variables !
En particulier pour les sites multilangues...
_________________
C@rtm@n <=> Fous Du Net (en construction)


Dernière édition par c@rtm@n le Sam 20 Nov 2004 à 22:47; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
c@rtm@n
Membres actifs


Inscrit le: 05 Nov 2004
Messages: 188
Localisation: Devant mon PC

MessagePosté le: Sam 20 Nov 2004 à 21:30    Sujet du message: sprintf et votre forum phpBB Répondre en citant

Passons maintenant à notre forum phpBB !

Voici une ligne de commande prise dans le fichier index.php :
Code:
$message = sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a> ');

Que va faire cette ligne de commande ?
Elle va simplement permettre d'ajouter un lien cliquable dans le texte de la variable $lang['Click_return_index']

Comment est faite cette variable $lang['Click_return_index'] ?
Code:
$lang['Click_return_index'] = 'Cliquez %sici%s pour retourner à l\'Index';


La fonction va donc remplacer le premier %s par <a href="' . append_sid("index.$phpEx") . '"> et le second %s par </a>
Autrement dit, une fois la variable $message parsée, ou à l'affichage de la variable (echo $message;), il sera renvoyé ceci :
Code:
Cliquez <a href=http://www.phpbb-power.com/index.php>ici</a> pour retourner à l'Index



*******************************************************

Si vous avez tout compris jusqu'ici, vous savez donc qu'il est possible de modifier le texte ainsi que le lien cliquable sans toucher à l'adresse de celui ci en éditant simplement la variable de langue.
Ainsi, vous pouvez modifier la langue, ou bien afficher un texte un peu plus... original Wink
_________________
C@rtm@n <=> Fous Du Net (en construction)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Dolerho
Canard emmitouflé


Inscrit le: 28 Nov 2004
Messages: 83
Localisation: 127.0.0.1 -> Tu connais ? :)

MessagePosté le: Dim 28 Nov 2004 à 21:24    Sujet du message: Répondre en citant

C@rtm@n, aides-moi, je capte rien Sad
_________________
Développement PowerBB
[||||||||||]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur MSN Messenger
c@rtm@n
Membres actifs


Inscrit le: 05 Nov 2004
Messages: 188
Localisation: Devant mon PC

MessagePosté le: Dim 28 Nov 2004 à 21:58    Sujet du message: Répondre en citant

Dolerho a écrit:
C@rtm@n, aides-moi, je capte rien Sad

Un peu plus de précisions sur ce que tu ne "captes" pas me serait utile pour t'aider Wink
_________________
C@rtm@n <=> Fous Du Net (en construction)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
rsas14
Ami des fleurs


Inscrit le: 22 Juil 2008
Messages: 6

MessagePosté le: Jeu 24 Juil 2008 à 11:27    Sujet du message: Répondre en citant

Les spécificateurs de type se rassemble un peut au spécificateurs de c++, mais la question qui se pose est ce qu'il y a une fonction dans le c++ comme
sprintf . Wink
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    PhpBB-Power Index du Forum » Tutoriaux Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB v2 © 2001, 2005 phpBB Group ¦ Theme: subSilver++
Traduction par : phpBB-fr.com