PHPackages                             schachbulle/contao-counter-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. schachbulle/contao-counter-bundle

ActiveContao-bundle[Utility &amp; Helpers](/categories/utility)

schachbulle/contao-counter-bundle
=================================

Zählt die Zugriffe auf Seiten, Artikel und Nachrichten, gibt die Zahlen im Frontend aus und wertet sie im Backend mit Diagrammen aus.

2.3.1(1w ago)0121LGPL-3.0-or-laterPHPPHP ^7.4 || ^8.0

Since May 21Pushed 1w ago1 watchersCompare

[ Source](https://github.com/Samson1964/contao-counter-bundle)[ Packagist](https://packagist.org/packages/schachbulle/contao-counter-bundle)[ Docs](https://github.com/Samson1964/contao-counter-bundle)[ RSS](/packages/schachbulle-contao-counter-bundle/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (7)Dependencies (10)Versions (31)Used By (0)

Counter
=======

[](#counter)

Eine Erweiterung für **Contao 4.13 und Contao 5**, die die Zugriffe auf Seiten, Artikel und Nachrichten zählt, die Zahlen im Frontend ausgibt und sie im Backend als Bestenliste mit Verlaufsdiagramm auswertet. Auf Wunsch verschickt ein täglicher Cronjob die Bestenlisten per E-Mail.

Die Erweiterung ist auf schachbund.de seit Jahren im produktiven Einsatz.

Installation
------------

[](#installation)

```
composer require schachbulle/contao-counter-bundle
```

Anschließend den Datenbankabgleich ausführen (Contao-Manager oder `contao:migrate`).

Geprüft mit **Contao 4.13 und Contao 5.7 unter PHP 8.3**; die in der `composer.json` angegebene Untergrenze PHP 7.4 ist statisch mitgeprüft.

Entwicklung
-----------

[](#entwicklung)

Die statische Analyse liegt als `phpstan.neon.dist` bei und läuft auf Level 8 ohne Beanstandung:

```
composer phpstan
```

Zählung einrichten
------------------

[](#zählung-einrichten)

Counter besteht aus einem **Zählermodul** und einem **Ausgabemodul**. Beide finden Sie unter *Themes → Module* im Bereich **Counter**.

Das Zählermodul zählt und gibt selbst nichts aus. Es muss **vor** dem Ausgabemodul im Seitenlayout stehen und wird nur einmal eingebunden. Das Ausgabemodul kann an beliebig vielen Stellen mit unterschiedlichen Templates stehen.

Wer ohne Module auskommen möchte, nimmt stattdessen die Insert-Tags `{{fhcounter}}` (zählt) und `{{fhcounterview}}` (gibt aus). Sie arbeiten mit festen Vorgaben und kennen keine Moduleinstellungen.

Die Zählstände liegen in der Tabelle `tl_fh_counter`; die Werte des aktuellen Aufrufs stehen zusätzlich in `$GLOBALS['fhcounter']`, wo das Ausgabemodul sie abholt.

Statistiken im Backend
----------------------

[](#statistiken-im-backend)

In der **Seitenstruktur**, bei den **Artikeln** und bei den **Nachrichten** führt jeweils der Knopf *Statistik* zur Auswertung. Sie zeigt:

- die Bestenliste der meistbesuchten Inhalte im gewählten Zeitraum,
- ein Verlaufsdiagramm über alle Inhalte zusammen,
- eine Navigation über Tag, Monat und Jahr mit Vor- und Zurückschritt.

Das Diagramm zeigt jeweils die nächstfeinere Einteilung: die 24 Stunden eines Tages, die Tage eines Monats oder die zwölf Monate eines Jahres. Es entsteht als SVG auf dem Server und braucht kein Javascript.

Der Knopf **per E-Mail versenden** schickt genau den angezeigten Zeitraum an die eingestellten Empfänger. Vor dem Abschicken erscheinen die Adressen und lassen sich für diesen einen Versand ändern — die dauerhaften Empfänger bleiben davon unberührt. Weil die Auswertung zu diesem Zeitpunkt bereits errechnet ist, geht die Mail sofort hinaus.

Die Auswertung wird zwischengespeichert — der laufende Zeitraum eine Stunde, abgeschlossene Zeiträume einen Tag.

Statistik per E-Mail
--------------------

[](#statistik-per-e-mail)

Unter *System → Einstellungen → Zähler: Statistik per E-Mail* lässt sich ein täglicher Versand einschalten. Verschickt wird:

- immer die Bestenliste des **Vortags**,
- montags zusätzlich die der **vergangenen Woche** (Montag bis Sonntag),
- am Monatsersten zusätzlich die des **Vormonats**.

Je Inhaltsart geht eine eigene E-Mail an einen **eigenen Verteiler** — wer die Seitenstatistik bekommt, ist selten dieselbe Runde wie beim Nachrichten-Ranking. Empfänger und Kopieempfänger werden deshalb für Seiten, Artikel und Nachrichten getrennt gepflegt; Absender, Betreffzusatz, Vorlage und die Zahl der Listenplätze gelten für alle drei gemeinsam.

**Eine Inhaltsart ohne Empfänger wird übersprungen.** Damit ist zugleich gesagt, welche Statistiken überhaupt hinausgehen: Wer nur die Nachrichtenstatistik braucht, trägt allein dort Adressen ein und lässt die übrigen Felder leer.

Eine Adresse je Zeile, wahlweise nackt (`name@example.org`) oder mit Namen davor (`Name `). Adressen, die offensichtlich unbrauchbar sind, werden beim Versand übergangen und mit Klartext im Systemprotokoll vermerkt — ein Tippfehler in einer Adresse verhindert also nicht mehr, dass die übrigen Empfänger ihre Mail bekommen.

Das Layout steckt im Template `counter_mail_standard`. Eine eigene Fassung legen Sie unter `templates/` mit dem Namensanfang `counter_mail_` ab; sie erscheint dann in der Auswahlliste. Die Zeilenfarbe zeigt das Alter des Inhalts an, von Grün (ganz aktuell) über Gelb bis Rot und Grau (älter als ein Jahr).

Voraussetzung ist ein eingerichteter Contao-Cronjob (Contao-Manager oder ein Aufruf von `contao:cron` durch den Hoster).

Die Zeiträume werden dabei **vom seltensten zum häufigsten** abgearbeitet: erst der Vormonat, dann die Vorwoche, zuletzt der Vortag. Schneidet ein PHP-Zeitlimit den Lauf ab, fällt so die Tagesstatistik aus — die morgen wiederkommt — statt der Monatsstatistik, die dann für immer fehlte. Was trotzdem einmal liegen bleibt, lässt sich über den Versandknopf in der Statistik nachholen.

**Der Cronjob vermerkt jeden Lauf im Systemprotokoll** (System → Systemprotokoll, Kategorie CRON) mit den verschickten Statistiken, der Zahl der Empfänger und der jeweiligen Laufzeit. Fehlt dieser Eintrag, wurde der Lauf vorzeitig abgeschnitten — dann hilft ein Aufruf von `contao:cron` über die Konsole, wo kein Zeitlimit gilt.

Weitere Einstellungen
---------------------

[](#weitere-einstellungen)

Unter *System → Einstellungen → Zähler*:

EinstellungBedeutungAnzahl Seiten / Artikel / NachrichtenLänge der Bestenliste im BackendFehler 404 nicht protokollierenAufrufe nicht vorhandener Seiten nicht ins Systemprotokoll schreibenFehlende Quell-ID nicht protokollierenNicht vermerken, wenn ein Inhalt nicht zugeordnet werden konnteAm Zählermodul selbst werden Onlinezeit (wie lange ein Besucher als „online“ gilt) und Zählsperre (wie lange ein wiederkehrender Besucher nicht erneut zählt) eingestellt, ebenso ob angemeldete Backend-Benutzer mitgezählt werden.

Template-Variablen des Ausgabemoduls
------------------------------------

[](#template-variablen-des-ausgabemoduls)

Mitgeliefert werden die Templates `fhcounter_mini`, `fhcounter_standard`, `fhcounter_full` und `fhcounter_diagramme`. Eigene Fassungen unter `templates/` mit dem Namensanfang `fhcounter_`erscheinen in der Auswahlliste.

VariableInhalt`ViewCounterinfo`Kopfdaten des Zählers vorhanden ja/nein`ViewDiagrams`Diagramme vorhanden ja/nein`CounterSource`Name der Quelltabelle (tl\_page, tl\_article, tl\_news)`CounterPid`ID des Inhalts in seiner Quelltabelle`CounterStarttime`Zeitstempel der ersten Zählung`CounterLastcounting`Zeitstempel der letzten Zählung`CounterLastip`IP-Adresse des letzten Besuchers`CounterOnline`Zahl der aktuellen Besucher dieser Adresse`CounterTopOnlineCount`Bestmarke der gleichzeitigen Besucher`CounterTopOnlineTime`Zeitstempel dieser Bestmarke`CounterAll` / `CounterTotalhits`Gesamtzugriffe`CounterThisYear` / `CounterThisMonth` / `CounterThisDay` / `CounterThisHour`Zugriffe im laufenden Jahr, Monat, Tag, in der laufenden Stunde`CounterYesterday` / `CounterLastMonth`Zugriffe gestern bzw. im Vormonat`CounterAverage`durchschnittliche Zugriffe je Tag`CounterCheck`wurde dieser Besucher gezählt?`CounterHoursChart` / `CounterDaysChart` / `CounterMonthsChart`fertige SVG-Diagramme der letzten 24 Stunden, 30 Tage, 12 MonateDen Namen kann ein Präfix vorangestellt werden: **Page**, **Article** oder **News**. `PageCounterAverage` liefert also die durchschnittliche Besucherzahl der aktiven Seite, egal ob gerade ein Artikel oder eine Nachricht angezeigt wird.

Der Zähler ohne Präfix ist der **Standardzähler**. Er wird in der Reihenfolge Seite, Artikel, Nachricht befüllt — es gewinnt also der speziellste Inhalt, der auf der Seite angezeigt wird.

Voraussetzungen an die Contao-Einstellungen
-------------------------------------------

[](#voraussetzungen-an-die-contao-einstellungen)

Counter arbeitet mit folgenden Frontend-Einstellungen einwandfrei:

- URLs umschreiben = ja
- Auto\_item aktivieren = ja
- Die Sprache zur URL hinzufügen = nein
- Leere URLs nicht umleiten = nein
- Ordner-URLs verwenden = nein
- Keine Seitenaliase verwenden = nein

Andere Kombinationen sind nicht durchgetestet. Solange nur Seiten gezählt werden, ist Counter unempfindlich — die Seiten-ID bekommt ein Modul von Contao geliefert.

Bei Artikeln liest der Zähler den URL-Parameter `articles` aus. Bei Nachrichten ist es aufwendiger, weil Contao einem Modul nicht verrät, welche Nachricht der Nachrichtenleser gerade zeigt: Der Zähler sammelt die Weiterleitungsseiten aller Nachrichtenarchive und schneidet, wenn die aktuelle Seite eine davon ist, den Alias aus der Adresse.

Fehler und Unterstützung
------------------------

[](#fehler-und-unterstützung)

Fragen und Fehlermeldungen gern über die [GitHub-Issues](https://github.com/Samson1964/contao-counter-bundle/issues) oder im Contao-Forum (Samson1964).

**Frank Hoppe**

###  Health Score

51

—

FairBetter than 95% of packages

Maintenance98

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~78 days

Recently: every ~1 days

Total

30

Last Release

13d ago

Major Versions

0.0.3 → 1.0.02020-10-21

1.2.9 → 2.0.02026-07-31

PHP version history (3 changes)0.0.1PHP ^5.6 || ^7.0

1.2.1PHP &gt;=5.6

2.0.0PHP ^7.4 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/53ee29e676dd83ca6683e27788cc7143a46d2bc1e10945ae37730bd4fec0c29c?d=identicon)[Samson1964](/maintainers/Samson1964)

---

Top Contributors

[![Samson1964](https://avatars.githubusercontent.com/u/4542730?v=4)](https://github.com/Samson1964 "Samson1964 (33 commits)")

---

Tags

contaoStatistikzählerzugriffe

###  Code Quality

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/schachbulle-contao-counter-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/schachbulle-contao-counter-bundle/health.svg)](https://phpackages.com/packages/schachbulle-contao-counter-bundle)
```

###  Alternatives

[metamodels/core

MetaModels core

10156.6k68](/packages/metamodels-core)[contao-community-alliance/dc-general

Universal data container for Contao

1581.4k93](/packages/contao-community-alliance-dc-general)[codefog/contao-news_categories

News Categories bundle for Contao Open Source CMS

3290.3k6](/packages/codefog-contao-news-categories)[contao/manager-bundle

Provides the Contao Managed Edition

181.3M83](/packages/contao-manager-bundle)[pdir/social-feed-bundle

Social feed extension for Contao CMS

1415.9k](/packages/pdir-social-feed-bundle)[terminal42/contao-node

Node bundle for Contao Open Source CMS

3078.1k6](/packages/terminal42-contao-node)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
