CPG 1.4.25 - MOD-HACK Enregistrement des recherches CPG 1.4.25 - MOD-HACK Enregistrement des recherches
 

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

CPG 1.4.25 - MOD-HACK Enregistrement des recherches

Started by fefed22, August 17, 2009, 11:01:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

fefed22

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

fefed22

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

fefed22

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

François Keller

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
Avez vous lu la DOC ? la FAQ ? et cherché sur le forum avant de poster ?
Did you read the DOC ? the FAQ ? and search the board before posting ?
Mon Blog