Bonjour,
Je poste ici mon mod/hack (reprise de mon poste en séction support Anglais)
Ce mod est une reprise de "Nibbler" compatible avec la version 1.4.25
Il permet d'enregistrer dans la base de donnée les recherche effectué par les utilisateurs et par la suite de les ordonnées dans un tableau rangée par date (dans un premier temps)
Je post au fur est à mesure que le projet avance ...
je vous met donc le début :
1) ----> Création de la table :
CREATE TABLE `cpg14x_search` (
`user_id` varchar(11) NOT NULL default '',
`user_name` varchar(25) NOT NULL default '',
`searchterm` text NOT NULL,
`raw_ip` tinytext,
`hdr_ip` tinytext,
`date` datetime NOT NULL default '0000-00-00 00:00:00'
) TYPE=MyISAM;
2)---> Rechercher le fichier init.inc.php à la ligne 196
# see http://php.net/mbstring for details
if (function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); }
$CONFIG['TABLE_PICTURES'] = $CONFIG['TABLE_PREFIX'].'pictures';
$CONFIG['TABLE_ALBUMS'] = $CONFIG['TABLE_PREFIX'].'albums';
$CONFIG['TABLE_COMMENTS'] = $CONFIG['TABLE_PREFIX'].'comments';
$CONFIG['TABLE_CATEGORIES'] = $CONFIG['TABLE_PREFIX'].'categories';
$CONFIG['TABLE_CONFIG'] = $CONFIG['TABLE_PREFIX'].'config';
$CONFIG['TABLE_USERGROUPS'] = $CONFIG['TABLE_PREFIX'].'usergroups';
$CONFIG['TABLE_VOTES'] = $CONFIG['TABLE_PREFIX'].'votes';
$CONFIG['TABLE_USERS'] = $CONFIG['TABLE_PREFIX'].'users';
$CONFIG['TABLE_BANNED'] = $CONFIG['TABLE_PREFIX'].'banned';
$CONFIG['TABLE_EXIF'] = $CONFIG['TABLE_PREFIX'].'exif';
$CONFIG['TABLE_FILETYPES'] = $CONFIG['TABLE_PREFIX'].'filetypes';
$CONFIG['TABLE_ECARDS'] = $CONFIG['TABLE_PREFIX'].'ecards';
$CONFIG['TABLE_TEMPDATA'] = $CONFIG['TABLE_PREFIX'].'temp_data';
$CONFIG['TABLE_FAVPICS'] = $CONFIG['TABLE_PREFIX'].'favpics';
$CONFIG['TABLE_BRIDGE'] = $CONFIG['TABLE_PREFIX'].'bridge';
$CONFIG['TABLE_VOTE_STATS'] = $CONFIG['TABLE_PREFIX'].'vote_stats';
$CONFIG['TABLE_HIT_STATS'] = $CONFIG['TABLE_PREFIX'].'hit_stats';
A LA SUITE mettre
// search config
$CONFIG['TABLE_SEARCHLOG'] = $CONFIG['TABLE_PREFIX'].'search';
3)---> rechercher le fichier thumbnails.php à la ligne 70
thumb_get_subcat_data($subcat['cid'], $album_set_array);
}
}
}
/*** Main code
*/
A LA SUITE mettre
// searchlog
$searchterm = $_POST['search'];
$user_id = !GALLERY_ADMIN_MODE ? 0 : USER_ID;
$results = cpg_db_query("SELECT user_name FROM {$CONFIG['TABLE_USERS']} WHERE user_id = '$user_id'");
$USER_DATA = mysql_fetch_array($results);
$user_name = $USER_DATA['user_name'];
$query = "INSERT INTO {$CONFIG['TABLE_SEARCHLOG']} VALUES ('$user_id', '$user_name', '$searchterm', '$raw_ip', '$hdr_ip', NOW())";
cpg_db_query($query);
Dans un premier temps cette modification vous permet de remplir votre table "searchlog" avec le nom de la personne logger avec la date et les mots recherchés
Ensuite il faut que je règle le problème de l'enregistrement des accents et la mise en place d'une page sous "ADMIN" pour permettre de visualiser les 100 dernières recherches
Voilà
Si vous avez des suggestions n'hésitez pas.
Fred
Voilà la suite ...
Il faut créer un fichier PHP a la racine du site au nom de search_hist.php
4)---> créer search_hist.php avec ce code :
<?php
// search_hist.php
// run from cpg dir
define('IN_COPPERMINE', true);
define('CALENDAR_PHP', true);
require('include/init.inc.php');
pageheader('enregistrement des recherches');
echo '<br>';
$htab = $CONFIG['TABLE_PREFIX'] . "search";
$utab = $CONFIG['TABLE_USERS'];
if( !USER_IS_ADMIN ) {
echo '<br><br><b>accés reservé aux admins</b>';
exit;
}
//echo "</br></br>";
starttable('100%','Recherches effectuées et rangées par date');
$query = "SELECT user.user_name,hist.date,hist.searchterm,hist.raw_ip FROM $utab As user,$htab As hist WHERE " .
"hist.user_id=user.user_id ORDER BY hist.date DESC " .
"LIMIT 100";
$res = cpg_db_query( $query );
echo "<tr><td><table CELLPADDING=\"5\">\n";
echo "<b><tr class=\"tableb\">\n";
echo "<td>\n";
echo "<b>user</b>";
echo "</td>\n";
echo "<td>\n";
echo "<b>date</b>";
echo "</td>\n";
echo "<td>\n";
echo "<b>Mots</b>";
echo "</td>\n";
echo "</td>\n";
echo "<td>\n";
echo "<b>ip-address</b>";
echo "</td>\n";
echo "</tr></b>\n";
while($row = mysql_fetch_row($res))
{
echo "<tr class=\"tableb\">\n";
echo "<td>\n";
echo $row[0];
echo "</td>\n";
echo "<td>\n";
echo $row[1];
echo "</td>\n";
echo "<td>\n";
echo "<A HREF=\"thumbnails.php?=$row[2]\">$row[2]</A>";
echo "</td>\n";
echo "<td>\n";
echo $row[3];
echo "</td>\n";
echo "</tr>\n";
}
echo "</table></td></tr>\n";
mysql_free_result($res);
endtable();
echo "<br><br>";
endtable(); // search statistics
pagefooter();
?>
5)---> Modifier le fichier theme.php de votre thème courant
dans la partie
$template_gallery_admin_menu = <<<EOT
rajouter
<li><a href="search_hist.php" title="Historique recherches">Hist. recherches</a></li>
et voilà
Mon seul problème à présent c'est que je veux rendre les mots clés cliquable et avoir le résultat de la recherche seulement je ne sais pas comment envoyer la requête et pour le moment j'ai mi :
echo "<A HREF=\"thumbnails.php?=$row[2]\">$row[2]</A>";
Si quelqu'un à une suggestion ...
Fred
voilà j'ai fini par trouver donc il faut remplacer dans search_hist.php :
echo "<A HREF=\"thumbnails.php?=$row[2]\">$row[2]</A>";
par
echo "<A HREF=\"thumbnails.php?album=search&search=$row[2]\">$row[2]</A>";
PS : peut on éditer nos post pour faire une explication propre ou faut-il toujours s'auto-répondre .... :D
seuls les modérateurs peuvent éditer les sujets.
Merci pour ce partage ( je n'ai pas regardé de près encore)
ce qui serait interressant serait de voir si il n'est pas possible de faire un plugin plutot qu'un Mod, ce serait plus simple au moment des mises à jour