Seite 1 von 1

Modul für Suchbegriff-Logging

Verfasst: Mi 1. Sep 2010, 20:55
von McHubi
Hallo zusammen,

mal wieder etwas neues: ein Modul um die eingegebenen Suchbegriffe zu loggen und entsprechend anzuzeigen. Setzt auf den vorhandenen Such-Modulen des Demo-Mandanten auf.
Bild


INSTALLATION

1. Download der benötigten Dateien unter http://www.seamless-design.de/cms/front ... ?idart=104 -> zip-Datei mit diesen Inhalten:
* nicht verändert, nur der Vollständigkeit halber dabei: Modul "Search_Input"/ Modul-Templates "search_input.html" und "search_output.html"
* Modul "Search_Output" (am Ende um Code erweitert, gekennzeichnet mit "modified")
* Code für die Erweiterung des ggf. schon vorhandenen Moduls "Search_Output"
* Modul "searchterm-logging"
* MySQL-Statement zum Anlegen der notwendigen Tabelle
* readme
2. Das Modul "Search_Input" ist in der Contenido-Installation ggf. bereits vorhanden, ebenso die beiden Modul-Templates. Falls nicht vorhanden, entsprechend anlegen.
3. Das Modul "Search_Output" muss, sofern vorhanden, nur um den Erweiterungscode ergänzt werden (direkt vor dem schließenden ?> einfügen). Ansonsten neu anlegen.
4. Anlegen des Moduls "searchterm-logging".
5. Anlegen eines neuen Templates mit dem Modul "searchterm-logging"
6. Erweitern der css-Datei um die entsprechenden css-Klassen.
7. Aufruf der Datenbank und einfügen des MySQL-Statements um die Tabelle mit einem Testwert zu füllen.
8. Anlegen eines neuen Artikels (möglichst in einer neuen, geschützten Kategorie) mit dem Template zum Modul "searchterm-logging"
9. Suchbegriffe eingeben... ;O)

Und hier direkt die Bestandteile die benötigt werden bei bereits vorhandenen Modulen und Modul-Templates des Demomandanten:

Ergänzungscode für den Output des Moduls "Search_Output":

Code: Alles auswählen

/*** modified for logging ***/

if($searchterm!="")
{
$searchterm=htmlspecialchars(strip_tags(strtolower($searchterm)));
$searchterm=preg_replace('[^a-zA-Z0-9äÄöÖüÜß- ]','',$searchterm);
$umlautArray = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/quot/","/amp/"); // Austausch von Umlauten, wenn im Suchbegriff ein " steht, wird dies zu quot -> & sowie ; von " fallen weg als Sonderzeichen
$replaceArray = Array("ae","oe","ue","Ae;","Oe","Ue","ss","","");
$searchterm = preg_replace($umlautArray , $replaceArray , $searchterm);
$jahr=date("Y");
$monat=date("m");
$tabelle_suchbegriffe_logging="suchbegriffe_logging";


/*** Prüfung ob Suchbegriff schon einmal im aktuellen Monat eingegeben wurde ***/

$check_abfrage = "SELECT suchbegriff, jahr, monat FROM $tabelle_suchbegriffe_logging";
$check_ergebnis = mysql_query($check_abfrage);
while($row = mysql_fetch_object($check_ergebnis))
  {
   if ($row->suchbegriff==$searchterm AND $row->jahr==$jahr AND $row->monat==$monat) {$vorhanden="ja";}
   else $vorhanden="nein";
  }

if ($vorhanden=="ja") $eintrag="UPDATE $tabelle_suchbegriffe_logging set aufrufe=aufrufe+1 WHERE jahr='".$jahr."' AND monat='".$monat."'";
if ($vorhanden=="nein") $eintrag="INSERT INTO $tabelle_suchbegriffe_logging (suchbegriff, jahr, monat, aufrufe) VALUES ('$searchterm', '$jahr', '$monat', '1')";

$eintragen = mysql_query($eintrag);
//if ($eintragen==true) {echo "Eintrag erfolgreich.";} else echo "Eintrag nicht erfolgreich."; // Info ob Eintrag in DB erfolgte
}

/*** modified for logging ***/
Output des Moduls "searchterm-logging"

Code: Alles auswählen

<?php
/***********************************************
* searchterm_logging
*
* Author      :     seamless-design Markus Hübner
* Copyright   :     seamless-design Markus Hübner
* Created     :     2010-09-01
* Info        :     Dieses Modul kann nur im Zusammenhang mit dem modifizierten Modul Search_Output genutzt werden!
************************************************/


$tabelle_suchbegriffe_logging="suchbegriffe_logging";
$uri=$_SERVER['REQUEST_URI'];


/* Beginn Einlesen aller Suchbegriffe */
$abfrage = "SELECT suchbegriff FROM $tabelle_suchbegriffe_logging";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))
  {
//   echo $row->suchbegriff.'<br/>';
   $array_suchbegriffe[]=$row->suchbegriff;
  }

$array_suchbegriffe=array_unique($array_suchbegriffe); // wirft doppeltes raus (wenn gleicher suchbegriff in unterschiedlichen monaten/ jahren eingegeben wurde, ist er in der tabelle mehrfach drin und wird auch mehrfach im array gespeichert
sort($array_suchbegriffe); // aufsteigend alphabetische sortierung für dropdown
// foreach ($array_suchbegriffe as $value) echo $value.'<br/>';
/* Ende Einlesen aller Suchbegriffe */



/* Beginn Einlesen aller Zeiträume */

$abfrage = "SELECT jahr, monat FROM $tabelle_suchbegriffe_logging";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))
  {
   $zeitraum=$row->jahr.'_'.$row->monat;
//   echo $zeitraum.'<br/>';
   $array_zeitraeume[]=$zeitraum;
  }
$array_zeitraeume=array_unique($array_zeitraeume); // wirft doppeltes raus (wenn gleicher zeitraum bei unterschiedlichen suchbegriffen vorkommt ist er in der tabelle mehrfach drin und wird auch mehrfach im array gespeichert
sort($array_zeitraeume); // aufsteigende sortierung für dropdown
$array_zeitraeume=array_reverse($array_zeitraeume); // absteigende sortierung für dropdown
//foreach ($array_zeitraeume as $value) echo $value.'<br/>';

/* Ende Einlesen aller Zeiträume */



/* Beginn Ausgabe des Formulars */

echo '<hr>';

$array_suchbegriffe_anzahl_elemente=count($array_suchbegriffe);
$array_zeitraeume_anzahl_elemente=count($array_zeitraeume);

echo "<form action=\"".$uri."\" method=\"post\">";
          echo 'Auswahl eines Suchbegriffs:<br/>';
          echo '<select name="suchbegriffsauswahl">';
          echo '<option value="">- - Auswahl - -</option>';
                $i=0; // Zeiger im Array auf Position 1, dem ersten Suchbegriff
                while($i<$array_suchbegriffe_anzahl_elemente)
                     {
                     echo '<option value="'.$array_suchbegriffe[$i].'"';
                     if ($suchbegriffsauswahl==$array_suchbegriffe[$i]) echo ' selected="selected"'; // sorgt dafür, dass einmal getroffene Auswahl erhalten bleibt wenn Formular wg. Fehlermeldung nicht abgeschickt wird
                     echo '>'.$array_suchbegriffe[$i].'</option>';
                     $i++;
                     }
           echo '</select>';
           echo '<br/><br/>Auswahl eines Zeitraums:<br/>';
          echo '<select name="zeitraumauswahl">';
          echo '<option value="">- - Auswahl - -</option>';
                $i=0; // Zeiger im Array auf Position 1, dem ersten Zeitraum
                while($i<$array_zeitraeume_anzahl_elemente)
                     {
                     echo '<option value="'.$array_zeitraeume[$i].'"';
                     if ($zeitraumauswahl==$array_zeitraeume[$i]) echo ' selected="selected"'; // sorgt dafür, dass einmal getroffene Auswahl erhalten bleibt wenn Formular wg. Fehlermeldung nicht abgeschickt wird
                     echo '>'.$array_zeitraeume[$i].'</option>';
                     $i++;
                     }
           echo '</select>';
echo "<br/><br/><input type=\"submit\" name=\"form_submitted\" value=\"anzeigen\" />";
echo "</form>";

/* Ende Ausgabe des Formulars */



/* Beginn Ausgabe Ergebnis Suchbegriff */

if ($form_submitted AND $suchbegriffsauswahl)
{
echo '<hr>';
$abfrage = "SELECT suchbegriff, jahr, monat, aufrufe FROM $tabelle_suchbegriffe_logging WHERE suchbegriff='".$suchbegriffsauswahl."'";
$ergebnis = mysql_query($abfrage);
echo '<h2 class="st-logging">Suchbegriff '.$suchbegriffsauswahl.'</h2>';
echo '<table class="st-logging">';
echo '<tr><td class="st-logging-header">Jahr</td><td class="st-logging-header">Monat</td><td class="st-logging-header">Aufrufe</td></tr>';
while($row = mysql_fetch_object($ergebnis))
  {
   echo '<tr><td class="st-logging">'.$row->jahr.'</td><td class="st-logging">'.$row->monat.'</td><td class="st-logging">'.$row->aufrufe.'</td></tr>';
  }
echo '</table>';

echo '<br/>';
echo 'Suchbegriff "'.$suchbegriffsauswahl.'" aus dem Logging vollst&auml;ndig l&ouml;schen?';
echo "<form action=\"".$uri."&suchbegriff=$suchbegriffsauswahl\" method=\"post\">";
echo '<input type="checkbox" name="suchbegriff_loeschen" value="ja"> ja<br/>';
echo '<input type="submit" name="form_submitted_2" value="ausf&uuml;hren" /> (Aktion kann nicht r&uuml;ckg&auml;ngig gemacht werden!)';
echo '</form>';

}

if($suchbegriff_loeschen=="ja")
{
$suchbegriffsauswahl=htmlspecialchars($_GET[suchbegriff]);
$loeschen = "DELETE FROM $tabelle_suchbegriffe_logging WHERE suchbegriff='".$suchbegriffsauswahl."'";
$loeschen= mysql_query($loeschen);
if ($loeschen==true) {echo "<hr>L&ouml;schen erfolgreich.";} else echo "<hr>L&ouml;schen nicht erfolgreich."; // Info ob Löschen des Suchbegriffs erfolgte
}

/* Ende Ausgabe Ergebnis Suchbegriff */


/* Beginn Ausgabe Ergebnis Zeitraum */

if ($form_submitted AND $zeitraumauswahl)
{
echo '<hr>';
$jahr=substr($zeitraumauswahl, 0, 4); // die Jahreszahl extrahieren
$monat=substr($zeitraumauswahl, 5, 2); // den Monat extrahieren
$abfrage = "SELECT suchbegriff, aufrufe FROM $tabelle_suchbegriffe_logging WHERE jahr='".$jahr."' AND monat='".$monat."'";
$ergebnis = mysql_query($abfrage);
echo '<h2 class="st-logging">Suchbegriffe des Zeitraums '.$zeitraumauswahl.':</h2>';
echo '<table class="st-logging">';
echo '<tr><td class="st-logging-header">Suchbegriff</td><td class="st-logging-header">Aufrufe</td></tr>';
while($row = mysql_fetch_object($ergebnis))
  {
   echo '<tr><td class="st-logging">'.$row->suchbegriff.'</td><td class="st-logging">'.$row->aufrufe.'</td></tr>';
  }
echo '</table>';
}

/* Ende Ausgabe Ergebnis Zeitraum */

?> 
Zum Anlegen der Tabelle in der DB:

Code: Alles auswählen

CREATE TABLE `suchbegriffe_logging` (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`suchbegriff` VARCHAR( 50 ) NOT NULL ,
`jahr` INT( 4 ) NOT NULL ,
`monat` VARCHAR( 2 ) NOT NULL ,
`aufrufe` INT( 10 ) NOT NULL
);

INSERT INTO suchbegriffe_logging (id,suchbegriff,jahr,monat,aufrufe) VALUES ('1','test','2010','09','1');
und noch etwas css:

Code: Alles auswählen

h2.st-logging {
color: #000046;
font-size: 16px;
font-weight: 900;
text-decoration: underline;
}
table.st-logging{
font-size: 14px;
}
td.st-logging {
border-bottom: 1px solid #555555;
border-left: 1px solid #555555;
}
td.st-logging-header {
background-color: #555555;
color: #ffffff;
}
Viel Spass :mrgreen: