klassischer Text Counter

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

klassischer Text Counter

Beitrag von yodatortenboxer » Fr 1. Apr 2005, 22:52

hiho,

ein Kunde wollte von mir einen ganz normalen klassischen Textcounter auf seiner Webseite (im Contenido) haben. Ich habe den als Modul angelegt und dann eingefügt.
Nur falls jemand anderes es ebenfalls haben will:

Als Modul ohne Input (Einstellungen erfolgen im Output des Modules)

Code: Alles auswählen

<?
/////////////////////////////////////////
// Counter + Reloadsperre v1.0 Output
/////////////////////////////////////////

// 0=keine Reloadsperre, 1=Reloadsperre
$aktiv = 1;
// Zeit der Reloadsperre in Minuten
$zeit = 10;
// IP-Datei
$ipdatei = "ips.txt";
// Counterdatei
$datei = "counter.txt";
// Anzahl der führenden Nullen
$stellen = 6;
// Festlegen der Bild-Dimensionen
$breite="15";
$hoehe="19";

/////////////////////////////////////////
// IP-Reloadsperre
/////////////////////////////////////////

function pruf_IP($rem_addr) {
  global $ipdatei,$zeit;
  @$ip_array = file($ipdatei);
  $reload_dat = fopen($ipdatei,"w");
  $this_time = time();
  for ($i=0; $i<count($ip_array); $i++) {
    list($ip_addr,$time_stamp) = explode("|",$ip_array[$i]);
    if ($this_time < ($time_stamp+60*$zeit)) {
      if ($ip_addr == $rem_addr) {
        $gefunden=1;
      }
      else {
        fwrite($reload_dat,"$ip_addr|$time_stamp");
      }
    }
  }
  fwrite($reload_dat,"$rem_addr|$this_time\n");
  fclose($reload_dat);
  return ($gefunden==1) ? 1 : 0;
}

/////////////////////////////////////////
// Abfrage
/////////////////////////////////////////

if (file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Falls die Datei existiert, wird sie ausgelesen und
  // der dort enthaltene Wert um Eins erhöht.
  $fp=fopen($datei,"r+");
  $zahl=fgets($fp,$stellen);
  $zahl++;
  rewind($fp);
  flock($fp,2);
  fputs($fp,$zahl,$stellen);
  flock($fp,3);
  fclose($fp);
}else if (!file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Die Datei counter.txt existiert nicht, sie wird
  // neu angelegt und mit dem Wert 1 gefüllt.
  $fp=fopen($datei,"w");
  $zahl="1";
  fputs($fp,$zahl,$stellen);
  fclose($fp);
} else {
  // Die Datei existiert zwar, jedoch handelt
  // es sich wahrscheinlich um den gleichen Besucher
  $fp=fopen($datei,"r");
  $zahl=fgets($fp,$stellen);
  fclose($fp);
}

$zahl=sprintf("%0".$stellen."d",$zahl);
echo "|| Besucher ingesammt: $zahl";
?>
Als Modul mit Input und Output (Einstellungen erfolgen im Input)
Input

Code: Alles auswählen

/////////////////////////////////////////
// Counter + Reloadsperre v1.0 Input
/////////////////////////////////////////
echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">";

echo "<tr>";
echo "<td width=\"202\">Reloadsperre :</td><td>
<INPUT TYPE=\"radio\" NAME=\"CMS_VAR[0]\" VALUE=\"0\""; if("CMS_VALUE[0]" ==0){echo "checked=checked";};echo"> off
<INPUT TYPE=\"radio\" NAME=\"CMS_VAR[0]\" VALUE=\"1\""; if("CMS_VALUE[0]" ==1){echo "checked=checked";};echo"> on</td></tr>";

echo "<tr>";
echo"<td width=\"202\">Reloadsperre in Minuten: </td>
<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" ></td></tr>";

echo "<tr>";
echo"<td width=\"202\">Anzahl der führenden Nullen :
</td><td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" ></td></tr>";

echo "</table>";
Output

Code: Alles auswählen

<?
/////////////////////////////////////////
// Counter + Reloadsperre v1.0 Output
/////////////////////////////////////////

// 0=keine Reloadsperre, 1=Reloadsperre
$aktiv = CMS_VALUE[0];
// Zeit der Reloadsperre in Minuten
$zeit = CMS_VALUE[1];
// IP-Datei
$ipdatei = "ips.txt";
// Counterdatei
$datei = "counter.txt";
// Anzahl der führenden Nullen
$stellen = CMS_VALUE[2];
// Festlegen der Bild-Dimensionen
$breite="15";
$hoehe="19";

/////////////////////////////////////////
// IP-Reloadsperre
/////////////////////////////////////////

function pruf_IP($rem_addr) {
  global $ipdatei,$zeit;
  @$ip_array = file($ipdatei);
  $reload_dat = fopen($ipdatei,"w");
  $this_time = time();
  for ($i=0; $i<count($ip_array); $i++) {
    list($ip_addr,$time_stamp) = explode("|",$ip_array[$i]);
    if ($this_time < ($time_stamp+60*$zeit)) {
      if ($ip_addr == $rem_addr) {
        $gefunden=1;
      }
      else {
        fwrite($reload_dat,"$ip_addr|$time_stamp");
      }
    }
  }
  fwrite($reload_dat,"$rem_addr|$this_time\n");
  fclose($reload_dat);
  return ($gefunden==1) ? 1 : 0;
}

/////////////////////////////////////////
// Abfrage
/////////////////////////////////////////

if (file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Falls die Datei existiert, wird sie ausgelesen und
  // der dort enthaltene Wert um Eins erhöht.
  $fp=fopen($datei,"r+");
  $zahl=fgets($fp,$stellen);
  $zahl++;
  rewind($fp);
  flock($fp,2);
  fputs($fp,$zahl,$stellen);
  flock($fp,3);
  fclose($fp);
}else if (!file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Die Datei counter.txt existiert nicht, sie wird
  // neu angelegt und mit dem Wert 1 gefüllt.
  $fp=fopen($datei,"w");
  $zahl="1";
  fputs($fp,$zahl,$stellen);
  fclose($fp);
} else {
  // Die Datei existiert zwar, jedoch handelt
  // es sich wahrscheinlich um den gleichen Besucher
  $fp=fopen($datei,"r");
  $zahl=fgets($fp,$stellen);
  fclose($fp);
}

$zahl=sprintf("%0".$stellen."d",$zahl);
echo "|| Besucher ingesammt: $zahl";
?>
gruß yodatortenboxer

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Fr 1. Apr 2005, 23:09

Eine Frage: Zählt der Counter die Besucher insgesamt wie die Contenido Statistik oder nur die Besucher dieser einen Seite?
Sieht aber nicht schlecht aus.
Wenn mein Contenido bei Windoof endlich läuft habe ich eine teststation für sowas.

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Sa 2. Apr 2005, 11:37

Der Counter zählt unabhängig von der Contenidostatistik nur die Besucher die auf die Webseite kommen, und speichert diese in der Datei "counter.txt" die dann hochgezählt wird.

Wenn nun die Reloadsperre auf 0 (nur Output-Modul) bzw auf off (Input- und Output-Modul) steht wird jeder klick auf eine Inhaltsseite gespeichert und der Counter um eins erhöht.

Stellt man die Reloadsperre auf 1 bzw auf on wird die IP der Person die momentan auf der Webseite ist in der Datei ips.txt gespeichert.
Zusätzlich kann man die Zeit der Reloadsperre in Minuten eintragen.

Beispiel:
Wenn man nun die Reloadsperre auf 1 oder on stellt und eine Zeit von 30 einstellt (sind Minuten), wird insgesammt nur ein Klick des momentanen User auf die Seite innerhalb von 30 Minuten gezählt.
Klickt der momentane Benutzen nun wie wild 30 Minuten lang auf der Seite herum oder wenn er innerhalt dieser 30 Minuten wieder auf die Webseite geht, wird der Counter nur um 1 erhöht. Wenn die 30 Minuten überschritten sind wird für diese IP wieder für 30 Minuten der Counter um eins erhöht.
Das funktioniert bei jedem User die gleichzeitig auf der Webseite sind unabhängig voneinander. Wenn sich also momentan 5 User auf der Seite befinden wird der Counter für jeden um eins erhöht (also zusammen um 5) und jeder einzelne bekommt anhand seiner IP und seiner Zeit wann er auf die Seite gekommen ist die 30 Minuten Reloadsperre.

Die Anzahl der führenden Nullen bestimmt die Größe des Counters.
Bei einer 6 sieht der Counter so aus 000123 und bei einer 4 so 0123.
Es werden aber immer nur die gezählten Zahlen gespeichert wie zum Beispiel 123. Ist der Counter momentan auf 0123, steht also auf 4, kann man jederzeit eine 5 oder 6 eintragen und er sieht dann dementsprechent 00123 oder 000123 aus. Die Anzahl der Stellen sind also unabhängig von der gezählten Zahl.

Wenn man möchte kann man folgenden Teil im Output

Code: Alles auswählen

echo "|| Besucher ingesammt: $zahl"; 
(das ist die letzte Zeile) durch folgendes ersetzen

Code: Alles auswählen

for($i=0;$i<$stellen;$i++){
$bild_counter=$bild_counter . "<img src=upload/counterbilder/" . substr($zahl,$i,1) . ".gif align=absmiddle width=$breite height=$hoehe>";
}

echo "|| Besucher ingesammt: $bild_counter";
und der Zähler wird dann sogar aus Bildern angezeigt.
die Bilder müssen dann in einen Ordner upload/counterbilder sein und die Form von 0.gif, 1.gif, 2.gif...haben.
Die Breite und Höhe der Bilder wird im Code oben an folgender Stelle eingetragen

Code: Alles auswählen

// Festlegen der Bild-Dimensionen 
$breite="15"; 
$hoehe="19"; 
Falls die Bilder in ein anderes verzeichnis sollen muss folgender Pfad dementsprechend angepasst werden:
<img src=upload/counterbilder/" . substr($zahl,$i,1) . ".gif

gruß yodatortenboxer 8)

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Sa 2. Apr 2005, 13:57

Klingt super. Mal sehen wann ich dazu komme das einzubauen...
Hat jemand ein Counter für Contenido, der die Besucher insgesamt mit IP-Sperre der ganzen Website zählt?
Denn es kommen ja nur 2/3 über die Startseite...

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Sa 2. Apr 2005, 14:46

das kannst du damit ja machen.

Beispiel: http://www.labrador-vom-stillen-tal.de/

Der Counter ist in einem Modul und das Modul ist in einem Template oder auch in mehreren Templates und dadurch in jeder Inhaltsseite.
Nun ist es egal von wo aus du auf die Seite kommst.

Würdest du als erstes auf diese Seite über http://www.labrador-vom-stillen-tal.de/ ... p?idcat=10 kommen und nicht über die Startseite, würde das Modul deine IP in die ip.txt schreiben, der counter wird um eins erhöht und deine IP ist für die eingestellte Zeit gesperrt. Das Modul muss einfach nur in dieser Inhaltsseite sein.

Wenn nun zum Beispiel die Zeit auf 120 Minuten eingestellt währe und du dann nach 50 Minuten wieder auf die Seite, diesmal aber als erstes auf die Seite http://www.labrador-vom-stillen-tal.de/ ... hp?idcat=3 oder die Startseite http://www.labrador-vom-stillen-tal.de/ gehst würde der Counter nicht hochzählen.

Bei der http://www.labrador-vom-stillen-tal.de/ habe ich einfach nur das oben beschriebene Modul ohne den Input in die beiden Templates eingefügt die ich in dieser Seite benutze. Dann habe ich die Reloadsperre im Output im Quelltext aktiviert und dort auch eine Reloadzeit von 10 Minuten eingestellt.
Das war´s. Nun ist absolut egal welche Inhaltsseite als erstes aufgerufen wird. Diese schreibt die Daten in die Dateien.

Man muss also nur das Modul in jedem Template integrieren, so das es in jeder Inhaltsseite vorhanden ist. Es schreibt dann alles nur in die Dateien counter.txt und ip.txt und ließt sie dann auch aus.
Diese Dateien gibt es nur einmal für die Komplette Webseite und nicht pro Modul oder Template.

Dadurch ist es egal ob die Besucher über die Startseite kommen oder nicht. Wenn nun die Ausgabe nur auf der Startseite sein soll legt man einfach zwei verschiedene Module an. Eins für die Startseite und eins für die Inhaltsseiten. Bei den Inhaltsseiten wird dann einfach nur die Ausgabe

Code: Alles auswählen

echo "|| Besucher ingesammt: $zahl"; 
auskommentiert

Code: Alles auswählen

//echo "|| Besucher ingesammt: $zahl"; 
Dadurch zählt das Modul zwar um eins höher und setzt, wenn aktiviert die Reloadsperre, gibt aber die Daten nicht aus.

gruß yodatortenboxer

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Sa 2. Apr 2005, 16:02

Funktioniert prima, vielen Dank!

duff
Beiträge: 4
Registriert: Mo 18. Apr 2005, 01:39
Kontaktdaten:

Beitrag von duff » Mo 18. Apr 2005, 01:42

Hallo Zusammen,

kann es sein, dass dieses Modul nicht mit der Version 4.4.4 läuft?
Wenn ja, was für Veränderungen müsste ich den Vornehmen.

Schonmal danke im voraus

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Mo 18. Apr 2005, 08:04

nicht das ich wüsste...

kannst du genauer beschreiben was nicht geht bzw. welche der beiden(mit Input/ohne Input)?

gruß yodatortenboxer

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mo 18. Apr 2005, 16:38

Ich benutze es in der 4.4.5. Dort gibt es keine Probleme.

duff
Beiträge: 4
Registriert: Mo 18. Apr 2005, 01:39
Kontaktdaten:

Beitrag von duff » Di 19. Apr 2005, 17:59

Vielen Dank für die schnell Hilfe!
Hab den Fehler gefunden..

Deltapapa
Beiträge: 62
Registriert: Fr 17. Jun 2005, 23:32
Wohnort: Mildtstedt
Kontaktdaten:

geht der counter auch mit 4.4.5 ?

Beitrag von Deltapapa » So 18. Sep 2005, 16:43

yodatortenboxer hat geschrieben:nicht das ich wüsste...
Hi yodatortenboxer,
habe versucht den counter zum laufen zu bringen in 4.4.5.
habe aber folgende fehlermeldung:

Code: Alles auswählen

Warning: fopen(counter.txt): failed to open stream: Permission denied in /home/www/web312/html/cms/front_content.php(567) : eval()'d code on line 84

Warning: fputs(): supplied argument is not a valid stream resource in /home/www/web312/html/cms/front_content.php(567) : eval()'d code on line 86

Warning: fclose(): supplied argument is not a valid stream resource in /home/www/web312/html/cms/front_content.php(567) : eval()'d code on line 87
|| Besucher ingesammt: 01 
habe das gefühl, dass das mit meinem safemode=on zu tun hat.
wo finde ich den die beiden dateien?
in cms oder in contenido?
danke dirk
C 4.4.5 r1
Das Internet wurde von www.bademeister.com erfunden

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » So 18. Sep 2005, 20:17

Hi,

normalerweise müsste das Script die Datei counter.txt wenn sie noch nicht vorhanden ist im Ordner CMS anlegen. Es konnte ein Problem mit den Schreib und Leserechten sein.

Versuch einmal von Hand eine leere counter.txt in den ordner CMS zu kopieren und dann dieser Datei wenn du unter Linux bist die Rechte 777 zu geben.

gruß yodatortenboxer
Schöne Grüße von Usedom
Ralf

Deltapapa
Beiträge: 62
Registriert: Fr 17. Jun 2005, 23:32
Wohnort: Mildtstedt
Kontaktdaten:

Beitrag von Deltapapa » So 18. Sep 2005, 20:51

super, klappt, jedoch wird im moment 00 angezeigt.
habe in die counter.txt ne 1 geschrieben, nun klappt das auch. nach dem reload wird mir ne 02 angezeigt usw...
noch ne frage:
wie machst du es, das angezeigt wird wieviele user im moment online sind? (so wie hier:)
http://www.labrador-vom-stillen-tal.de

danke
schönen wahlabend noch
dirk
C 4.4.5 r1
Das Internet wurde von www.bademeister.com erfunden

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Beitrag von yodatortenboxer » Mo 19. Sep 2005, 07:57

Guckst du hier:

http://www.contenido.org/forum/viewtopi ... =7742#7742

gruß yodatortenboxer
Schöne Grüße von Usedom
Ralf

Deltapapa
Beiträge: 62
Registriert: Fr 17. Jun 2005, 23:32
Wohnort: Mildtstedt
Kontaktdaten:

Beitrag von Deltapapa » Di 20. Sep 2005, 00:15

du, nur mal ne frage fürs verständnis:
muß es nicht insgesamt heißen statt ingesammt?
nur mal ne frage..

vielen dank für den link, werde mich gleich mal ranmachen das einzubauen.....

dp
C 4.4.5 r1
Das Internet wurde von www.bademeister.com erfunden

Gesperrt