-
Visitor user online Tag
Hi Bugbuster.
Ich bin gerade dabei mir etwas zu überlegen wie ich user auf eine andere Seite weiterleite sobald mehr als 10 Personen gleichzeitig auf einer Seite sind.
Dazu dachte ich mir ich nutze das Visitormodul doch irgendwie komm ich net weiter:
Ich habe das mod_visitors_fe_all.tpl um folgenden code erweitert:
PHP-Code:
<?php
$count = "{{cache_visitors::1::online}}";
echo $count; ?>
<?php
if ($count > 1 ){
header( 'Location: ./tltest/index.php/index.html' ) ; }
?>
Echo $count gibt auch die Zahl der aktuell aktiven user aus. Jedoch funktioniert das im Zusammenspiel mit der IF schleife nicht wirklich.
Wenn ich statt $count = "{{.....::online}} eine feste Zahl wie z.b. 2 verwende funktioniert meine weiterleitung auch... Verwende ich den Tag so werde ich leider nicht weitergeleitet.
-
Das liegt an der zeitlichen Abarbeitung.
ModuleVisitors generiert im Schritt 1 über das Template die Insert-Tag Angaben, nicht den Inhalt!
Dann kommt Contao und ersetzt zum Schluß die Tags mit den Werten durch Aufruf der registrierten Tag Module. Hier kommt nun ModuleVisitorsTag im Schritt 2 und erstzt die Tags mit aktuellen Werten.
Die Logik im Template ist da schon längst vorbei, war im Schritt 1 ja schon dran.
Kurz, so geht das leider nicht.
Mit meinem Modul sehe ich da keine Möglichkeit, da die Werte wie gesagt erst kurz vor der Auslieferung der Seite eingefügt werden.
-
Ich habe das ganze nun wie folgt gelöst
PHP-Code:
<?php
$daten = "besucher.txt";
$time = time();
$ip = getenv("REMOTE_ADDR");
$ablaufzeit = $time - "300";
$pruefung = @file($daten);
while (list ($line_num, $line) = @each ($pruefung)) {
$zeiten = explode("&&",$line);
if($zeiten[0] <= $ablaufzeit) {
$fp = fopen( "$daten", "r" );
$contents = fread($fp, filesize($daten));
fclose($fp);
$line=quotemeta($line);
$string2 = "";
$replace = ereg_replace($line, $string2, $contents);
$fh=fopen($daten, "w");
@flock($fp,2);
fputs($fh, $replace);
@flock($fp,3);
fclose($fh);
}
}
$ippruefung = @file($daten);
while (list ($line_num, $line) = @each ($ippruefung)) {
$ips = explode("&&",$line);
if($ips[1] == $ip) {
$fp = fopen( "$daten", "r" );
$contents = fread($fp, filesize($daten));
fclose($fp);
$line=quotemeta($line);
$string2 = "";
$replace = ereg_replace($line, $string2, $contents);
$fh=fopen($daten, "w");
@flock($fp,2);
fputs($fh, $replace);
@flock($fp,3);
fclose($fh);
}
}
$fp = fopen("$daten", "a+");
flock($fp,2);
fputs ($fp, "$time&&$ip&&\n");
flock($fp,3);
fclose ($fp);
$anzahldaten = file($daten);
$anzahl = count($anzahldaten);
echo $anzahl." vergebene Lizenzen";
?>
<div class="fpcounter">
<?php
if ($anzahl > 10 ){
header( 'Location: ./tltest/index.php/index.html' ) ; }
?> </div>
Der erste teil ist nen einfacher Counter der einen Besucher 5 Minutenlang als Besucher der aktuellen Seite zählt. Der zweite teil fragt ab wie hoch die Anzahl ist und wenn diese größer als 10 ist leidet er den Besucher auf eine andere Seite weiter.
-
Vorsicht mit ereg_replace ab PHP 5.3.0:
Diese Funktion ist seit PHP 5.3.0 DEPRECATED
Ersatz: preg_replace