Comment créer un nuage de tags php/mysql

123 messages dans ce sujet

Posté(e) · Signaler ce message

je le poste demain, et comme ça on pourras sans doute amélioré la chose.

A+

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bravo, ca rend super bien comme ca !

Vous avez fait avec le count ou en enregistrant directement le nombre de demande dans la base ?

Perso, je pense qu'il faut aussi compter les affichages produits, si on affiche le produit on incrémente aussi le compteur de 1, non ?

Ou alors ca ferait un autre nuage ? :)

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Je suis passé sur ton site et les accents ne passent pas - voir tag

il faut changer l'encodage.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Oui apres une nuit de fonctionnement c'est un peu tous est n'importe quoi, tout le site ce vois décallé a cause de mot trop long etc.

il vas me falloir encore améliorer la chose, et trouvé un moyen de gerer correctement les accent.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Eventuellement si tu pouvais mettre le code, on pourrait l'ameliorer ensemble

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

http://www.3dvf.fr/tag.php voila mon test, normalement le tableau est limité a 180 pixel de large, mais si des mots trop long apparaissent, le tableau s'éllargi!!! Comment faire?

Merci

Le code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<style> .nuage {line-height:25px;font: normal small verdana, arial, helvetica, sans-serif; text-align: justify; border:1px solid #B6CDE1; padding:10px; position:relative} .nuage a {text-decoration:none} .nuage a:hover {color: white; background-color: #668AA8;} .nuage a.level0 {font-size:6px;color:#DFDFDF;} .nuage a.level1 {font-size:8px;color:#B8C9D6;} .nuage a.level2 {font-size:10px;color:#668AA8;} .nuage a.level3 {font-size:12px;color:#47657B;} .nuage a.level4 {font-size:14px;color:#E76300;} .nuage a.level5 {font-size:16px;color:#E76300;} .nuage a.level6 {font-size:18px;color:#E76300;} .nuage a.level7 {font-size:20px;color:#E76300;} .nuage a.level8 {font-size:22px;color:#E76300;} .nuage a.level9 {font-size:24px;color:#E76300;font-weight: bold} .nuage a.level10 {font-size:26px;color:#FF3300;font-weight: bold} </style></head><body topmargin="0" leftmargin="0" alink="#ff9900" bgcolor="#ffffff" link="#e86519" marginheight="0" marginwidth="0" text="#000000" vlink="#6e003a">
<?php
include("configuration.inc.php");
// N'oubliez pas de vous connectez à votre base de données
// Afin d'adapter le code à votre site internet, il vous suffit de modifier 3 choses :
// col est le nom du champs représentant le Tag Cloud
// ID est la clé primaire
// MA_TABLE est le nom de ma base de données
$query = "SELECT tag_name AS tag, nbsearch AS quantity FROM tag_cloud GROUP BY tag_name ORDER BY tag_name ASC";
$result = mysql_query($query);

// Boucle à travers les résultats afin de les mettres dans un simple tableau:
// $tag['col1'] = 12;
// $tag['col2'] = 25;
// etc. Ceci nous permetteras de calculer la taille de chacun d'entre eux.
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}

// Taille maximal - Taille minimal
$max_size = 250; // max font size en %
$min_size = 100; // min font size en %


// Obtenir la plus petit valeur et la plus grande du tableau
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));


// Déterminer l'étendu des valeurs
$spread = $max_qty - $min_qty;
if (0 == $spread) { // we don't want to divide by zero
$spread = 1;
}


// Détermine l'incrémentation du font-size
$step = ($max_size - $min_size)/($spread);

?>
<table width="180" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<div class="nuage" style="margin: 0pt auto; line-height: 25px;"><font face="arial,helvetica,sans-serif" size="3">
<?
// Boucle à travers le tableau
foreach ($tags as $key => $value) {

// Calcul du font-size CSS
// trouvez les valeur supérieurs au $min_qty
// multiplier par la valeur de l'incrémentatiion ($size)
// et ajouter la valeur du minimum ($min_size)
$size = $min_size + (($value - $min_qty) * $step);

// Afin de terminer le script, il vous suffit de modifier les caractères
// '####' par le lien de destination voulu.

echo '<a href="http://www.3dvf.fr/achat/recherche.php?motclef='.$key.'" style="font-size: '.$size.'%"';
echo ' title="'.$value.' recherche(s) sur le mot '.$key.'"';
echo '>'.$key.'</a> ';
}


?>
</font></div>
</td>
</tr>
</table>
</body>
</html>[/codebox]

La table SQL :

[codebox]CREATE TABLE `tag_cloud` (
`id` int(11) NOT NULL auto_increment,
`tag_name` varchar(100) NOT NULL default '',
`nbsearch` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=55 ;

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

En recopiant ton code j'ai cela

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\1_gisserot\tag.php:6) in c:\program files\easyphp1-8\www\1_gisserot\configuration.inc.php on line 81

Notice: Undefined variable: tags in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 33

Warning: array_values(): The argument should be an array in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 33

Warning: Wrong parameter count for max() in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 33

Notice: Undefined variable: tags in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 34

Warning: array_values(): The argument should be an array in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 34

Warning: Wrong parameter count for min() in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 34

Warning: Invalid argument supplied for foreach() in c:\program files\easyphp1-8\www\1_gisserot\tag.php on line 54

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

En recopiant ton code j'ai cela

Je n'affiche pas les warning, donc forcément :)

Il nous reste du pai nsur la planche :)

L'ajout dans recherche.php :

// Insertion Tag de recherche
$query = "SELECT COUNT(*) FROM tag_cloud WHERE tag_name = '$motclef'";
$result = mysql_query($query);
$enr = mysql_fetch_array($result);
//echo "Nb de Lien : ".$enr[0]."";
if($enr[0] != ""){
if($enr[0] == 0 ){
$sql = "INSERT INTO `tag_cloud` (`id`, `tag_name`,`nbsearch`) VALUES ('', '$motclef','1')";
mysql_query($sql) or die(mysql_error());
//echo "Ajout de ".$motclef."";
}else{
$query = "SELECT * FROM tag_cloud WHERE tag_name = '$motclef'";
$result = mysql_query($query);
while ( $champ = mysql_fetch_array($result) )
{
//echo 'Resultat: '.$champ[id].' | '.$champ[tag_name].' - "'.$champ[nbsearch]."\" \n" ;
$id = $champ[id];
$nb_search = $champ[nbsearch];
$nb_search++;
//echo "Increment de ".$motclef." - ".$nbsearch."";
$sql = "UPDATE `tag_cloud` SET `nbsearch` = '$nb_search' WHERE `id` = $id LIMIT 1";
mysql_query($sql) or die(mysql_error());
}
}
}
// Fin Insertion[/codebox]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Mince j'ai fait un copier/coller et cela ne marche pas !!!!!! :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Mince j'ai fait un copier/coller et cela ne marche pas !!!!!! :)

Heu étrange là.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

noya_m, apparement tu tests en local sous easyphp aussi, non ?

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

oui en local sous easyphp ....

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Il faut bien penser à le signaler, car tres tres souvent les soucis viennent de là.

Pour ma part, pour les tests, j'ais monté une 2 ieme boutique de test sur le même serveur que ma boutique réelle, comme ca pas de soucis.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Moi je fais tous en LIVE :)

Bon je fait appel au pro des requétes MYSQL pour amélioré les miennes, et surtout celle dans la page recherche, qui insére ou non un mot, j'ai d'ailleur un soucis dans cette partie, car les recherche vide sont inséré dans la base, alors que normalement je ne l'ai teste pas!!!

J'ai remis en ligne, mon nuage, c'est dingue le nombre de recherche effectué sur notre boutique en si peux de temps.

A+

PS: j'ai déja commencé a y apporté quelques amélioration.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est bon là, la page ,n'est plsu déformée on dirait.

On pourra avoir le code s'il est différent de celui au dessus :)

Ca rend bien comme ça, a intégrer dans PEEL pour les prochaines versions.

Je vais regarder dès que je peux le mettre et rendre l'affichage parametrable.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

j'ai des bug au niveau du moteur de recherche maintenant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est a dire, je viens de regarder et là je n'ais pas de soucis particulier.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

pour ne pas avoir de champs vide de rentré,

remplace

if($enr[0] != ""){

par

if($motclef != ""){

encore que moi j'irai encore plus loin et je ferai

// Insertion Tag de recherche

if($motclef != ""){

$query = "SELECT COUNT(*) FROM tag_cloud WHERE tag_name = '$motclef'";
$result = mysql_query($query);
$enr = mysql_fetch_array($result);
//echo "Nb de Lien : ".$enr[0]."";
if($enr[0] == 0 ){
$sql = "INSERT INTO `tag_cloud` (`id`, `tag_name`,`nbsearch`) VALUES ('', '$motclef','1')";
mysql_query($sql) or die(mysql_error());
//echo "Ajout de ".$motclef."";
}else{
$query = "SELECT * FROM tag_cloud WHERE tag_name = '$motclef'";
$result = mysql_query($query);
while ( $champ = mysql_fetch_array($result) )
{
//echo 'Resultat: '.$champ[id].' | '.$champ[tag_name].' - "'.$champ[nbsearch]."\" \n" ;
$id = $champ[id];
$nb_search = $champ[nbsearch];
$nb_search++;
//echo "Increment de ".$motclef." - ".$nbsearch."";
$sql = "UPDATE `tag_cloud` SET `nbsearch` = '$nb_search' WHERE `id` = $id LIMIT 1";
mysql_query($sql) or die(mysql_error());
}
}
}
// Fin Insertion[/codebox]

ceci afin d'éviter de faire la premiere requete alors que tu sais déjà que la variable recherchée est vide.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est a dire, je viens de regarder et là je n'ais pas de soucis particulier.

Willy

C'est corrigé depuis :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

C'est corrigé depuis :)

as tu pu prendre en compte ma modification pour que les chamsp vides ne soit pas inséré en base?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Oui j'ai pris en compte ta modif et ça fonctionne.

Sinon voila ce que je fait comme traitement des mots avant insertion dans la base, mais ce n'est pas convaincant.

$mot_clef= strtr($motclef,
"ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇ
ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
"SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaac
eeeeiiiionoooooouuuuyy");
$mot_clef = eregi_replace("[^a-z0-9]", "", $motclef);[/codebox]

En fait je souhaite supprimé les mots avec plein de caractéres bizzare (accentuation foireuse etc...), autre gros soucis, c'est que en l'etat il n'y a aucun filtre et donc je me retrouve avec les mots de vos test, ainsi que tous est n'importe quoi.

Bref c'est la partie à amélioré.

A+

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

comment se fait il que tu ne puisse pas avoir un résultat plus propre?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

comment se fait il que tu ne puisse pas avoir un résultat plus propre?

C'est a dire?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

N'oubliez de mettre les fichiers definitif en copie :)

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Oui j'ai pris en compte ta modif et ça fonctionne.

Sinon voila ce que je fait comme traitement des mots avant insertion dans la base, mais ce n'est pas convaincant.

$mot_clef= strtr($motclef,
"ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇ
ÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
"SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaac
eeeeiiiionoooooouuuuyy");
$mot_clef = eregi_replace("[^a-z0-9]", "", $motclef);[/codebox]

En fait je souhaite supprimé les mots avec plein de caractéres bizzare (accentuation foireuse etc...), autre gros soucis, c'est que en l'etat il n'y a aucun filtre et donc je me retrouve avec les mots de vos test, ainsi que tous est n'importe quoi.

Bref c'est la partie à amélioré.

A+

Regarde dans les fonctions de réécriture, il y a une fonction qui rend clean les libellés.

Pour nos requetes, effaces les directement de ta table :)

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping