IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

taille d'un mot


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut taille d'un mot
    Bonjour,

    J'ai travaillé deux fonctions me permettant de réaliser un nuage de mots dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    function GetOccurenceArticles($txt, $id)
    {
    	$req_ia="SELECT titre, texte FROM tblarticles WHERE id=".$id;
    	$sql_ia=mysql_query($req_ia);
    	if(mysql_num_rows($sql_ia)>0)
    	{
    	 $res=mysql_fetch_assoc($sql_ia);
    	 return preg_match_all("/".$txt."/i", stripslashes($res['titre']), $matches1, PREG_SET_ORDER )+preg_match_all("/".$txt."/i", stripslashes($res['texte']), $matches2, PREG_SET_ORDER );
    	}
    	else
    	{
    		return '';
    	}
    }
     
    function tag_info()
    {
    	$tc=array();
    	$total=0;
    	$req_ti="SELECT id, mot, id_articles FROM tblnuage WHERE activite='oui'";
    	$sql_ti=mysql_query($req_ti);
    	while($row_ti=mysql_fetch_assoc($sql_ti))
    	{
    		foreach(explode(";",$row_ti['id_articles']) as $v)
    		{
    			$total+=GetOccurenceArticles($row_ti['mot'],$v);
    		}
    		$tc[$row_ti['mot']]=$total;
    	}
    	ksort($tc);
    	return $tc;
    }
     
    function nuage_de_mots()
    {
    	//Définir la taille maximal et minimal des caractères
    	$min_size=6;
    	$max_size=20;
    	$tags=tag_info();
    	$minimum_count=min(array_values($tags));
    	$maximum_count=max(array_values($tags));
    	$spread=$maximum_count-$minimum_count;
    	if($spread==0)
    	{
    			$spread=1;
    	}
    	$cloud_html='';
    	$cloud_tags=array();
    	foreach($tags as $tag=>$count)
    	{
    			$tagshow=str_replace("+"," ", $tag);
    			$size=$max_size-($count-$minimum_count)*($max_size-$min_size)/$spread;
    			//Création du mot à introduire dans le nuage de mots
    			$cloud_tags[]='<a style="font-size:'.floor($size).'px; margin-left:'.rand(0,130).'px;" class="tag_cloud'.floor($size).'" href="../code_br/index.php?page=nuage&amp;mot='.$tag.'" title="'.stripslashes($tag).'" alt="'.stripslashes($tag).'">'.stripslashes($tag).'</a>';
    	}
    	shuffle($cloud_tags);
    	return join("<br/>",$cloud_tags);
    En appelant nuage_de_mots(), je force l'affichage du nuage de mots.

    Cependant, bien entendu , j'ai un souci : les mots sortent parfois coté droite du cadre.
    Quel moyen pourrais-je utiliser pour connaitre la longueur du mot en pixel de sorte à décaler vers la gauche le début de l'affichage du mot ?

    Ou voyez-vous une autre façon de faire ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Par défaut
    Bonsoir,

    tu as la fonction strlen. Certes elle ne te donne pas la longueur en pixel mais elle te retourne le nombre de caractères du mot. Tu peux donc mettre un retour à la ligne ou faire un décalage si le mot fait x caractères par exemple.

    En espérant que cela t'aide.

    Hb

  3. #3
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Par défaut
    sans oublier qu'un
    M
    n'a pas la même taille qu'un
    i
    ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 198
    Par défaut
    Ben oui, un M n'a pas la même taille qu'un I, mais ca te fait une moyenne.

    Sinon après tu te fais un référentiel de taille. Genre un array() qui te répertorie les 26 lettres de l'alphabet avec la taille en px de chaque lettre, avec tu calcules ta taille en fonction du mot, et t'affiches, et là t'es au pixel près.

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    c'est bien dommage qu'aucune fontion n'existe !

    D'autant plus que la taille des caractères doit dépendre de la font et de sa taille ! bizarre quand même qu'aucune fonction n'existe !!??

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Vu comme celà effectivement (sauf pour les polices de caractères taille fixe comme courier, courier new, lucida console, ...) tu devrais passer un tableau de taille de chaque caractère

    MAIS, vague souvenir d'une fois d'un même problème, il y a pas possibilité de modifier le style de l'affichage avec une option d'etendue (spread peut-être) pour les débordements !!!!

  7. #7
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Désolé je pensais à overflow ...
    En espérant que c ce que tu cherches

  8. #8
    Membre chevronné Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Par défaut
    Bonjour,

    Je pense que la fonction imageftbbox pourra t'être utile. Ça renvoie les coordonnées d'un carré virtuel qui entoure une chaîne de caractère avec une taille et une police précise.
    C'est une fonction de GD2, donc il faut que le module GD2 soit activé.

  9. #9
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2010, 18h54
  2. Récupérer la taille d'un mot en pixel
    Par Sekigawa dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/11/2009, 12h11
  3. Réponses: 7
    Dernier message: 22/10/2008, 15h48
  4. Taille d'une cellule qui varie selon la taille d'un mot
    Par shadeoner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2006, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo