Ihren XING-Kontakten zeigen TagCloud für typo3-Seitenzugriffe

Geschrieben von Hanno Heeskens am 27.07.2008, 03:06 Uhr in MySQL, PHP
1 Kommentar »

Unsere neue Webseite unter www.net-publics.de steht kurz vor dem kompletten Relaunch. Aber das gewisse Etwas fehlte uns noch. Schnell war da die Idee geboren, eine Tag-Cloud über die am meisten besuchten Produktseiten zu erstellen. Ein Blick in das Extension Repository von Typo3 brachte da erstmal Ernüchterung: keine fertige Extension verfügbar. Also war selber machen angesagt.

Das Problem war leicht in zwei zu unterteilen: Einmal die Tag-Cloud an sich und dann die Seitenzugriffe ermitteln in Typo3. Daraus eine Kombination würde die “Top-Content Cloud” ergeben.

Für die Ermittlung der Seitenzugriffe in Typo3 habe ich mich der Extension Simple hit statistics (sys_stat) bedient. Diese zeichnet in einer externen Datenbank alle Anfragen ab, die an die Seite gestellt werden. Zugegeben, es wird noch mehr protokolliert als die Infos, die ich brauche, aber wer weiß, wozu das noch gut sein kann…

Folgendes SQL-Query übernimmt dann die Hauptarbeit:

select count(b.title) as weight,
a.page_id, a.IP,
b.title from sys_stat as a
left join pages as b on
a.page_id=b.uid
where unix_timestamp()-a.tstamp < 172800
and a.page_id IN ( $show_pages )
group by title;

Es werden hier also die Datenbanken des Statistiktools und die von typo3 verbunden. So werden nicht nur die Zugriffe, sondern auch die Seiten ID und deren Titel ausgelesen. $show_pages ist dabei eine einfache durch Komma separierte Liste der Seiten-IDs, die in der Cloud auftauchen sollen. Betrachtet werden nur die Daten der letzten 172800 Sekunden (2 Tage).
Das ganze Ergebnis lassen wir nun in einer Schleife in zwei Arrays schreiben, die es uns nachher einfacher machen, die Berechnungen der Größe durchzuführen:

while ($row = mysql_fetch_array($res)) {
$tags[ $row['title'] ] = $row['weight'];
$link[ $row['title'] ] = $row['page_id'];
}

Parallel dazu erstellen wir noch eine Übersicht über alle Seiten, die wir über das Plugin real-url ansprechen wollen, um schönere Links in unserer Cloud zu haben:

$page = mysql_query( “select page_id,spurl from tx_realurl_urldecodecache; “);
while ($row = mysql_fetch_array($page)) {
$realurl[ $row['page_id'] ] = $row['spurl'];
}

Wir haben nun drei Arrays: Die Tags mit zugehöriger Gewichtigkeit, die Seiten ID mit entsprechendem Link und zudem noch die Ergebnisse aus der real-URL Datenbank.

Jetzt kann es an die Cloud gehen:
Dazu erstmal ein paar Einstellungen, die ich jedes Mal von vorne berechnen lasse, da ich den Code in einer Funktion verwende, die nur die zu enthaltenen Seiten als Argument bekommt.

$max_weight = max(array_values($tags));
$min_weight = min(array_values($tags));

$max_font_size = 180;
$min_font_size = 80;

Hier werden die kleinsten und größten Werte aus dem Array heraus geholt und je Maximal- und Minimalwert für die Schriften gesetzt. Anschließend wird mit

$spread = $max_weight-$min_weight;
if (0 == $spread) { $spread = 1; }
$step = ($max_font_size – $min_font_size)/($spread);

die Abstufungen der Schriftgröße berechnet.
Jetzt können die einzelnen Tags der Reihe nach abgearbeitet werden:

foreach ($tags as $key => $value) {
$size = $min_font_size + (($value – $min_weight) * $step);
$size = ceil($size);
if ( $realurl[ $link[$key] ] != “” ) {
echo ‘<a href=”/’.$realurl[ $link[$key] ].’” style=”font-size: ‘.$size.’%”‘;
} else {
echo ‘<a href=”/index.php?id=’.$link[$key].’” style=”font-size: ‘.$size.’%”‘;
}
echo ‘ title=”‘.$key.’”‘;
echo ‘>’.$key.’</a> ‘;
echo “\n”;
}

Was passiert hier?
Zuerst berechnen wir die aktuelle Schriftgröße des Tags anhand der Wertigkeit (also der Anzahl der Seitenbesuche) und runden diesen Wert. Danach schauen wir, ob für diese Seite im Real-URL Cache ein Treffer vorliegt und geben diesen im Link aus. Ist kein Treffer vorhanden, verlinken wir auf die Seite anhand der Typo3-PageID. Zusätzlich wird in dem Link noch das title-tag auf den Seitentitel gesetzt.

Das fertige Ergebnis kann auf http://www.net-publics.de/ angeschaut werden.
Was noch ergänzt werden muß ist ein Schutz gegen das manipulieren der Tag Cloud. Das ist derzeit noch ganz rudimentär über mod_evasive geregelt, dazu in einem anderen Artikel später vielleicht mehr.


Diesen Artikel weiterempfehlen:
mehr Datenschutz durch 2-Klick Buttons! Auf 'i' klicken, um mehr zu erfahren.

Ihren XING-Kontakten zeigen CakePHP

Geschrieben von Hanno Heeskens am 22.04.2008, 20:17 Uhr in PHP
Bisher keine Kommentare »

Schon mehrfach habe ich mir vorgenommen, einmal ein genaueren Blick auf Ruby on Rails zu werden. Leider habe ich das bisher noch nicht geschafft, obwohl das Konzept wirklich einleuchtend und einfach klingt. Zu groß ist aber der gwohnte Umgang mit PHP.
Heute habe ich ein interessantes Framework für PHP gefunden, welches sich an Ruby on Rails orientiert. Es erlaubt die Entwicklung nach dem Modell View Controller Modell (MVC). Die Installation bishin zu ersten Ergebnissen kann sich wirklich sehen lassen, alles ging problemlos und wirklich schnell. Es ist denke ich für jeden, der schnell Anwendungen in PHP schreiben möchte und dabei nicht jede Codezeile einzeln schreiben möchte einen Blick wert.

Mehr Infos gibt es auf der Homepage unter http://cakephp.org/


Diesen Artikel weiterempfehlen:
mehr Datenschutz durch 2-Klick Buttons! Auf 'i' klicken, um mehr zu erfahren.