https://de.contaowiki.org/api.php?action=feedcontributions&user=BugBuster&feedformat=atomContao Community Documentation - Benutzerbeiträge [de]2024-03-29T10:35:29ZBenutzerbeiträgeMediaWiki 1.22.6https://de.contaowiki.org/Bot_StatistikBot Statistik2023-12-21T10:57:59Z<p>BugBuster: </p>
<hr />
<div>Ermittelt die Zugriffe (Besuche, Seiten) der Bots.<br /><br />
Zur Erkennung der Bots wird das Modul [[Bot Detection|Bot Detection]] verwendet (notwendige Abhängigkeit).<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.1.0<br />
| Version=ab 5.2<br />
| TLVersion=keine<br />
| Depending=[[Bot Detection|Bot Detection]]<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-botstatistics-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-botstatistics-bundle/issues<br />
| Comment=Ich brauche mehr Freizeit :-)<br />
}}<br />
<br />
[[en:Bot_Statistic]]<br />
[[Kategorie:Extensions]]<br />
<br />
Nach der Installation ein Frontend Modul anlegen vom Typ "Botstatistik" und dieses im Layout am besten im Footer einbauen. Das Modul gibt außer einem HTML Kommentar nichts zurück und stört somit nicht das Layout.<br />
<br />
<br />
Im Backend gibt es unter "System" den neuen Punkt "Botstatistik".<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 15:50, 13. Mai 2012 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2020-08-31T20:42:55Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
Aktuelle Version als HTML Version nun auf docs.contao.ninja in [https://docs.contao.ninja/de/cron-scheduler.html deutsch] und [https://docs.contao.ninja/en/cron-scheduler.html englisch].<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jedem Backend Seitenaufruf ausgelöst.<br />
<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum Löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum Löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /app/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2020-08-31T20:42:40Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
Aktuelle Version als HTML Version nun auf docs.contao.ninja in [https://docs.contao.ninja/de/cron-scheduler.html deutsch] und [https://docs.contao.ninja/en/cron-scheduler.html englisch].<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jedem Backend Seitenaufruf ausgelöst.<br />
<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum Löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /app/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2020-08-31T20:42:11Z<p>BugBuster: /* Backend */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
Aktuelle Version als HTML Version nun auf docs.contao.ninja in [https://docs.contao.ninja/de/cron-scheduler.html deutsch] und [https://docs.contao.ninja/en/cron-scheduler.html englisch].<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jedem Backend Seitenaufruf ausgelöst.<br />
<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /app/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2020-08-31T20:41:37Z<p>BugBuster: /* Vorwort */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
Aktuelle Version als HTML Version nun auf docs.contao.ninja in [https://docs.contao.ninja/de/cron-scheduler.html deutsch] und [https://docs.contao.ninja/en/cron-scheduler.html englisch].<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /app/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/DlstatsDlstats2020-03-28T21:24:11Z<p>BugBuster: </p>
<hr />
<div>Zählt die Anzahl von Datei-Downloads über die Standard Content Elemente Download und Downloads.<br />
* Download Statistiken für die Standard Content Elemente Download und Downloads.<br />
* Zählt die Anzahl der Downloads pro Datei und protokolliert die letzte Download-Zeit.<br />
* Optionaler Log jedes einzelnen Downloads mit Zeitstempel, IP und Benutzername.<br />
* Anonymisierung der IP-Adresse<br />
* Insert-Tag für Anzahl des Downloads im Frontend<br />
<br />
'''Der Nachfolger für Contao 4: bugbuster/contao-dlstats-bundle'''<br />
<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=2.4.1 / 3.9.2 / 1.0.0<br />
| Version=ab 2.9<br />
| TLVersion=2.7.6 - 2.8.4<br />
| Depending=[[Bot Detection|Bot Detection]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/dlstats.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/dlstats/issues<br />
| Comment=Contao 4 Version verfügbar<br />
}}<br />
[[en:dlstats]]<br />
[[Kategorie:Extensions]]<br />
<br />
==Installation in Contao 4==<br />
Siehe: https://github.com/BugBuster1701/contao-dlstats-bundle/blob/master/INSTALLATION_DE.md<br /><br />
Handbuch für Contao 4 contao-dlstats-bundle: https://docs.contao.ninja/de/download-statistik.html<br />
<br />
==Installation in Contao 3==<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br />
Bei manueller Installation, wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br /><br />
<span style="color:red">'''''Da das Modul "dlstats" abhängig ist (ab 2.1.0) vom Modul "[[Bot Detection|Bot Detection]]", muß dieses bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Erste Schritte==<br />
Im Backend bei "System" - "Einstellungen" in den Bereich "Download-Statistiken" gehen und dort einen Haken setzen bei "Download-Statistiken aktivieren". <br />
Mit nur dieser Einstellung bekommt als Statistik angezeigt, welche Datei wie oft geladen wurde.<br />
Dazu gibt es nach der Installation einen neuen Menüpunkt im Backend unter Inhalte: Download-Statistiken<br />
<br />
Mit setzen eines Hakens bei "Detailierte Download-Statistiken aktivieren" werden zusätzlich Infomationen bereitgestellt wie IP Adresse, Zeitstempel für jeden Download und der Benutzername. Benutzername natürlich nur, wenn der Download von einem angemeldeten Frontend Nutzer erfolgte.<br />
<br />
'''Für dlstats 2.1.x:'''<br />
Über den Punkt "Anonymisierung der IP-Adresse von Besuchern abschalten" kann die Anonymisierung der IP-Adresse abgeschaltet werden, was jedoch nur der Admin darf.<br /><br />
'''Ab dlstats 2.2.0''' ist dieser Punkt nicht mehr vorhanden, da Contao nun selbst ab Version 2.11 die Anonymisierung steuert. Es wird nun diese Einstellung übernommen.<br /><br />
(System - Einstellungen - Datenschutz-Einstellungen - IP-Adressen anonymisieren)<br />
<br />
==Insert-Tag Nutzung==<br />
Der Insert-Tag "cache_dlstats::totaldownloads::..." unterstützt sowohl den Source der Datei (relativer Pfad + Dateiname) wie auch in Verbindung mit dem Artikel Alias wie es in ce_download und ce_downloads generiert wird. Daher ist die Nutzung gut in den Templates der beiden CEs verwendbar, siehe Beispiele.<br />
'''Rückgabe ist nur die Anzahl als Zahl'''.<br />
<source lang="php"><br />
{{cache_dlstats::totaldownloads::tl_files/cdc2010.pdf}}<br />
{{cache_dlstats::totaldownloads::CDC_2010.html?file=tl_files/cdc2010.pdf}}<br />
<br />
// im ce_download template:<br />
{{cache_dlstats::totaldownloads::<?php echo $this->href; ?>}}<br />
<br />
// im ce_downloads template:<br />
{{cache_dlstats::totaldownloads::<?php echo $file['href']; ?>}}<br />
</source><br />
<br />
==IPs ignorieren==<br />
Sollen Downloads von bestimmten IP-Adressen nicht gezählt werden, kann dies definiert werden in der localconfig.php wie folgt:<br />
<source lang="php"><br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.1.2';<br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.0.0/24';<br />
//bzw.<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8::1';<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8:85a3:0800::/56'; <br />
</source><br />
<br />
==Hinweise==<br />
* gezählt werden nur Downloads, die über die Content-Elemente "Datei-Download" oder "Datei-Downloads" erstellt wurden.<br />
* direkte Links auf Dateien werden somit nicht gezählt!<br />
* keine Zählung, wenn man selber im BE eingeloggt ist (ab 2.1.0)<br />
* in den Contao Templates zum Download sind keine rel="nofollow" gesetzt, die Downloads der Crawler werden somit mitgezählt!<br />(ab 2.1.0 erledigt die Verhinderung der Zählung das Modul BotDetection, wovon "dlstats" nun abhängig ist)<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:09, 19. Jun. 2017 (CEST)</div>BugBusterhttps://de.contaowiki.org/StardateStardate2019-05-11T22:09:23Z<p>BugBuster: </p>
<hr />
<div>[[Datei:Module_stardate_all.jpg|right|Stardate]]Das Modul Stardate generiert über Insert-Tags die Star Trek<sup style="font-size: 0.9em;">®</sup> Sternzeit.<br />
Dabei kann über die Insert-Tags ausgewählt werden, welche Berechnungsart verwendet werden soll und ob die Rückgabe als Text oder als Bild erfolgt.<br /><br />
Das Bild rechts zeigt alle Berechnungsarten als Bild vom 17.02.2010 um 15:30 Uhr. <br />
<br />
{{Hinweis|Diese Seite wird vom Entwickler nicht mehr aktualisiert. <br />
Das aktuelle Handbuch zur Erweiterung Stardate (Contao 4) ist hier zu finden: [http://docs.contao.ninja/de/stardate.html docs.contao.ninja]}}<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://www.contao.glen-langer.de<br />
| ExtVersion=0.1.0<br />
| Version=ab 2.9<br />
| TLVersion=2.8.0 - 2.8.4<br />
| Depending=[[GraphicalText|GraphicalText]] (optional)<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/stardate.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=http://dev.typolight-forge.org/projects/stardate/issues<br />
| Comment=Demo zu sehen auf [http://www.ncc1969.de/Sternzeit.html www.ncc1969.de]<br />
}}<br />
[[en:Stardate]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Stardate Modul werden im Forum beantwortet: [http://www.contao-community.de/forumdisplay.php?f=10 Forum]<br />
<br /><br />
Fehler und Wünsche können im [http://www.contao-forge.org/projects/stardate/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [http://www.contao.org/erweiterungsliste/view/stardate.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/stardate angelegt worden sein.<br /><br />
Für die Ausgabe als Grafik ist das Modul "[[GraphicalText|GraphicalText]]" nötig, es muss dieses bei der manuellen Installation mit installiert werden.<br />
<br />
=Nutzung im Frontend=<br />
Die Nutzung erfolgt, wie bereits erwähnt, über Insert-Tags. Dabei kann über Parameter die Darstellung (Text/Bild) und die Berechnungsart gewählt werde. Außerdem ist wählbar, ob die generierten Werte mit in den Seiten Cache (wenn aktiviert) gehen oder jedes mal neu generiert werden (Präfix cache_ = jedesmal neu).<br />
<br />
=Insert-Tag Übersicht=<br />
Die Namen sind nach der Quelle bzw. der Serie gebildet worden.<br />
==Stardate Today==<br />
[[Datei:Module_stardate_today.jpg|left|Stardate]]Nach trekguide.com<br />Ausgabe erfolgt als positive Zahl für die heutige Zeit in der Form: YYYMM.DD , dabei wird YYY aus YYYY-1900 berechnet.<br /><br />
Textausgabe:<br /><br />
<source lang="text"><br />
{{stardate::TODAY}}<br />
{{cache_stardate::TODAY}}<br />
</source><br />
Bildausgabe:<br /><br />
<source lang="text"><br />
{{stardate::TODAYGT}}<br />
{{stardate::TODAYGT::gttagname}}<br />
{{cache_stardate::TODAYGT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Fictional Stardate Today==<br />
[[Datei:Module_stardate_fs.jpg|left|Stardate]]Nach trekguide.com<br />Die Ausgabe erfolgt als positive Zahl für heutige Zeit, Sternzeit 00000.0 beginnt am 14.07.1946, um 18:00 Uhr.<br /><br />
Textausgabe:<br /><br />
<source lang="text"><br />
{{stardate::FS}}<br />
{{cache_stardate::FS}}<br />
</source><br />
Bildausgabe:<br /><br />
<source lang="text"><br />
{{stardate::FSGT}}<br />
{{stardate::FSGT::gttagname}}<br />
{{cache_stardate::FSGT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Fictional Stardate TK==<br />
[[Datei:Module_stardate_tk.jpg|left|Stardate]]Nach TrekConnection.com<br />Die Ausgabe erfolgt als positive Zahl für heutige Zeit. <br /><br />
Textausgabe:<br /><br />
<source lang="text"><br />
{{stardate::TK}}<br />
{{cache_stardate::TK}}<br />
</source><br />
Bildausgabe:<br /><br />
<source lang="text"><br />
{{stardate::TKGT}}<br />
{{stardate::TKGT::gttagname}}<br />
{{cache_stardate::TKGT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Stardate nach Star Trek XI==<br />
[[Datei:Module_stardate_stxi.jpg|left|Stardate]]Nach trekguide.com<br />Die Ausgabe erfolgt als positive Zahl für heutige Zeit in der Form: YYYY.xx , dabei wird YYYY das aktuelles Jahr, xx der 100. Teil des Jahres.<br /><br />
Textausgabe:<br />
<source lang="text"><br />
{{stardate::XI}}<br />
{{cache_stardate::XI}}<br />
</source><br />
Bildausgabe:<br />
<source lang="text"><br />
{{stardate::XIGT}}<br />
{{stardate::XIGT::gttagname}}<br />
{{cache_stardate::XIGT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Stardate TNG (1)==<br />
[[Datei:Module_stardate_tng1.jpg|left|Stardate]]Nach lcars.org.uk<br />Die Ausgabe erfolgt als negative Zahl für heutige Zeit, Sternzeit 00000.0 beginnt am 01.01.2323, um 00:00 Uhr.<br /><br />
Textausgabe:<br />
<source lang="text"><br />
{{stardate::TNG2323}}<br />
{{cache_stardate::TNG2323}}<br />
</source><br />
Bildausgabe:<br />
<source lang="text"><br />
{{stardate::TNG2323GT}}<br />
{{stardate::TNG2323GT::gttagname}}<br />
{{cache_stardate::TNG2323GT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Stardate TNG (2)==<br />
[[Datei:Module_stardate_tng2.jpg|left|Stardate]]Nach trekguide.com<br />Die Ausgabe erfolgt als negative Zahl für heutige Zeit, Sternzeit 00000.0 beginnt am 25.05.2322, um 00:00 Uhr.<br /><br />
Textausgabe:<br />
<source lang="text"><br />
{{stardate::TNG2322}}<br />
{{cache_stardate::TNG2322}}<br />
</source><br />
Bildausgabe:<br />
<source lang="text"><br />
{{stardate::TNG2322GT}}<br />
{{stardate::TNG2322GT::gttagname}}<br />
{{cache_stardate::TNG2322GT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
==Stardate TOS==<br />
[[Datei:Module_stardate_tos.jpg|left|Stardate]]Nach trekguide.com<br />Die Ausgabe erfolgt als negative Zahl für heutige Zeit, Sternzeit 00000.0 beginnt am 01.05.2265, um 00:00 Uhr.<br /><br />
Textausgabe:<br />
<source lang="text"><br />
{{stardate::TOS}}<br />
{{cache_stardate::TOS}}<br />
</source><br />
Bildausgabe:<br />
<source lang="text"><br />
{{stardate::TOSGT}}<br />
{{stardate::TOSGT::gttagname}}<br />
{{cache_stardate::TOSGT::gttagname}}<br />
</source><br />
Dabei ist "[[Stardate#Ermittlung_von_.22gttagname.22|gttagname]]" der gewählte Name im [[GraphicalText]] Modul. Ohne Angabe wird "Stardate" als Default genommen.<br />
<br /><br /><br />
<br />
=Ermittlung von "gttagname"=<br />
Der "gttagname" ist der "Tag" Name wie er im Backend angelegt wurde im Modul [[GraphicalText]].<br />
In der Übersicht ist es der Name in der ersten Spalte, im Edit Modus das Feld "Tag".<br />
[[Datei:Modul_visitors_gt_gttagname.jpg|gttagname ermitteln]]<br />
<br /><br /><br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 16:18, 27. Jun. 2010 (UTC)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-10-05T21:53:19Z<p>BugBuster: /* Funktion bei htpasswd geschützter Domain */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /app/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-10-05T20:24:45Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.3.2<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.3.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /apps/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-10-05T20:23:57Z<p>BugBuster: /* Beispiel Script */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
=Funktion bei htpasswd geschützter Domain=<br />
Wenn man neue Webseiten online unter einer htaccess-geschützten Subdomain aufsetzt, muss das Cron-Bundle davon auch erfahren und die Login Daten mitsenden.<br />
<br />
Ab Version 1.3.2 wurde die Möglichkeit geschaffen, dass über die config.yml bzw. config_dev.yml zu steuern. Das Cron-Bundle bringt im eigenem config Verzeichnis eine Beispiel config_dev.yml gleich mit. Diese greift automatisch wenn die Domain mit app_dev.php aufgerufen wird.<br />
<br />
Datei ist zu finden im Verzeichnis: vendor/bugbuster/contao-cron-bundle/src/Resources/config<br />
<br />
Man kann die Login Daten überschreiben in dem man die config_dev.yml ins das Verzeichnis /apps/config kopiert bzw. mit einer vorhandenen kombiniert. Soll das im normalen Modus sein, dann entsprechend als config.yml.<br />
<br />
----<br />
----[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 22:23, 5. Okt. 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-10-05T19:58:28Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
Ab Version 1.3.1 sind Parameter in alten Stil möglich, hier am Beispiel für BackupDB:<br />
* '''/BackupDB/autobackup?geheim'''<br />Erkannt als Route, wird per Request aufgerufen inkl. Parameter<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/XingXing2018-05-12T15:23:40Z<p>BugBuster: </p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Profil Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Listener kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.2.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz.<br />
<br />
==Datenspeicherung==<br />
Um den Link zum Profil generieren zu können, muss der Profilname über das Backend angegeben werden. Dieser wird gespeichert.<br />
<br />
Ein Klick auf den Xing Profil Button wird nicht erfasst, der Link zeigt direkt zum Profil auf Xing.<br />
<br />
In der Contao 4 Erweiterung, ab Version 1.2.0, werden die Profil Buttons lokal geladen, nicht mehr vom Xing Server (einstellbar).<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 17:19, 12. Mai 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/XingXing2018-05-12T15:19:56Z<p>BugBuster: /* Datenspeicherung */</p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Profil Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Listener kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.2.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz.<br />
<br />
==Datenspeicherung==<br />
Um den Link zum Profil generieren zu können, muss der Profilname über das Backend angegeben werden. Dieser wird gespeichert.<br />
<br />
Ein Klick auf den Xing Profil Button wird nicht erfasst, der Link zeigt direkt zum Profil auf Xing.<br />
<br />
In der Contao 4 Erweiterung, ab Version 1.2.0, werden die Profil Buttons lokal geladen, nicht mehr vom Xing Server (einstellbar).<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 17:19, 12. Mai 2018 (CEST)</div>BugBusterhttps://de.contaowiki.org/XingXing2018-05-12T15:19:21Z<p>BugBuster: /* Datenspeicherung */</p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Profil Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Listener kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.2.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz.<br />
<br />
==Datenspeicherung==<br />
Um den Link zum Profil generieren zu können, muss der Profilname über das Backend angegeben werden. Dieser wird gespeichert.<br />
<br />
Ein Klick auf den Xing Profil Button wird nicht erfasst, der Link zeigt direkt zum Profil auf Xing.<br />
<br />
In der Contao 4 Erweiteung, ab Version 1.2.0 werden die Profil Buttons lokal geladen, nicht mehr vom Xing Server (einstellbar).<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 21:02, 26. Mär. 2016 (CET)</div>BugBusterhttps://de.contaowiki.org/XingXing2018-05-12T15:18:22Z<p>BugBuster: </p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Profil Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Listener kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.2.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz.<br />
<br />
==Datenspeicherung==<br />
Um den Link zum Profil generieren zu können, muss der Profilname über das Backend angegeben werden. Dieser wird gespeichert.<br />
<br />
Ein Klick auf den Xing Profil Button wird nicht erfasst, der Link zeigt direkt zum Profil auf Xing.<br />
<br />
Ab Version 1.2.0 werden die Profil Buttons lokal geladen, nicht mehr vom Xing Server (einstellbar).<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 21:02, 26. Mär. 2016 (CET)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-03-16T19:07:45Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
Ab Version 1.1.0 sind neben PHP Scripte auch Symfony Routen und URLs möglich im Feld Job.<br ><br />
Alle drei Beispiele:<br />
* '''mein/job/in/meinem/relativem/pfad/job.php'''<br />Erkannt als Datei Job, wird relativ zum Installationsverzeichnis per "include" geladen <br />
* '''/BackupDB/autobackup'''<br />Erkannt als Route, wird per Request aufgerufen<br />
* '''<nowiki>http://meine.seite/</nowiki>'''<br />Erkannt als URL, wird per Request aufgerufen<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-03-16T18:57:07Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten, Symfony Routen oder URLs.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/Datei:Cron-bundle-job-einstellungen.jpgDatei:Cron-bundle-job-einstellungen.jpg2018-03-16T18:55:37Z<p>BugBuster: BugBuster lud eine neue Version von „Datei:Cron-bundle-job-einstellungen.jpg“ hoch</p>
<hr />
<div>Cron Bundle - Job Einstellungen</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-16T20:23:54Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
Als Beispiel hier der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
<br />
[[Datei:Cron-bundle-job-einstellungen.jpg]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/Datei:Cron-bundle-job-einstellungen.jpgDatei:Cron-bundle-job-einstellungen.jpg2018-02-16T20:23:27Z<p>BugBuster: Cron Bundle - Job Einstellungen</p>
<hr />
<div>Cron Bundle - Job Einstellungen</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-16T20:21:46Z<p>BugBuster: /* Cron-Jobs definieren */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
<br />
[[Datei:Cron-bundle-job-uebersicht.jpg]]<br />
<br />
<br />
{{Achtung|TODO: Infos folgen}}<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/Datei:Cron-bundle-job-uebersicht.jpgDatei:Cron-bundle-job-uebersicht.jpg2018-02-16T20:20:27Z<p>BugBuster: Cron Bundle - Job Übersicht</p>
<hr />
<div>Cron Bundle - Job Übersicht</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-15T23:06:49Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=1.0.0 ist da.<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
{{Achtung|TODO: Infos folgen}}<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/CronCron2018-02-15T23:06:27Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=3.3.3<br />
| Version=ab 3.2<br />
| TLVersion=2.7.0 - 2.9.5 (siehe Installationshinweise)<br />
| ERLink=https://contao.org/de/extension-list/view/cron.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron<br />
| Comment=Version ab Contao 3.2 verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Erweiterung Cron stammt ursprünglich von Peter Koch (acenes) und wurde von mir übernommen mit dem Ziel, diese für Contao 3 kompatibel zu machen. Die Beschreibung hier bezieht sich nur auf die Cron Version ab 3.0.0 für Contao 3.<br />
<br />
Eine Version für Contao 4 ist veröffentlicht, eine extra Beschreibung ist [http://de.contaowiki.org/Cron-Bundle hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/extension-list/view/cron.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Danach wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br />
<br /><br />
<br />
==Hinweis für ältere TYPOlight Versionen==<br />
Nutzer von TYPOlight 2.9/2.8/2.7 nutzen bitte Cron Version 1.1.0 ([http://www.contao.org/erweiterungsliste/view/cron.10010009.de.html Direktlink])<br />
<br /><br />
<br />
=Installation als Update=<br />
Ein Update erfolgt identisch der Installation.<br /><br /><br />
{{Achtung|Beim Update von Contao 2 auf Contao 3 muss die Erweiterung vollständig deinstalliert/gelöscht werden, da Contao 3 intern die Tabelle tl_cron nutzt, die bisher die Erweiterung Cron nutzte.}}<br />
'''Für die Profis''': Deinstallation ohne Löschung der Tabelle tl_cron, diese umbenennen nach tl_crontab, dann Update nach Contao 3 und die neue Version von Cron für Contao 3 installieren. So sollten die eingerichteten Cron-Jobs erhalten bleiben. Job Pfade müssen aber geprüft werden, falls der Demo Job genutzt wurde.<br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul (ab Cron 3.1.0), welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
In einer der nächsten Versionen wird es dazu eine Verbesserung geben, entweder auf die Art und Weise wie der Contao interne Frontend-Cron funktioniert oder als Job für diesen. Evaluierung erfolgt demnächst dazu.<br />
<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/system/modules/cron/public/CronFeController.php >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs. Als Beispiel hier ein Job zum löschen der Music Academy Demo Dateien und der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
[[Datei:Scheduler_overview_de.png]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
[[Datei:Scheduler_purge_system_log_de.png]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Unterverzeichnis "jobs". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter system/modules/cron/jobs/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2015 <http://www.contao.glen-langer.de><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from CronController<br />
<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
$this->Database->prepare("DELETE FROM `tl_log`")->executeUncached();<br />
if ($cronJob['logging'])<br />
{<br />
$this->log('System log purged by cron job.', 'PurgeLog run()', TL_GENERAL);<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
==Weitere Cron-Jobs==<br />
Weitere Cron-Jobs werden in einem extra Wiki Artikel gezeigt: [[Cron-Jobs_für_Erweiterung_Cron]]<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:47, 10. Mai 2016 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-15T23:02:47Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=In Kürze verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs.<br />
{{Achtung|TODO: Infos folgen}}<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Verzeichnis "web/bundles/bugbustercron/". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter web/bundles/bugbustercron/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
use Psr\Log\LogLevel;<br />
use Contao\CoreBundle\Monolog\ContaoContext;<br />
<br />
/**<br />
* Contao Open Source CMS, Copyright (C) 2005-2017 Leo Feyer<br />
*<br />
* Contao Module "Cron Scheduler"<br />
* Sample PHP script to execute by cron: Purges the system log<br />
* Job: web/bundles/bugbustercron/PurgeLog.php<br />
*<br />
* @copyright Glen Langer 2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
* @license LGPL<br />
* @filesource<br />
* @see https://github.com/BugBuster1701/contao-cron-bundle<br />
*/<br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2018 <http://contao.ninja><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from BugBuster\Cron\ContaoBackendController Class<br />
<br />
//no directly call<br />
if (!is_array($cronJob))<br />
{<br />
die('You can not access this file directly!');<br />
}<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
\Database::getInstance()->prepare("DELETE FROM `tl_log`")->execute();<br />
if ($cronJob['logging'])<br />
{<br />
\System::getContainer()<br />
->get('monolog.logger.contao')<br />
->log(LogLevel::INFO,<br />
'System log purged by cron job.',<br />
array('contao' => new ContaoContext('PurgeLog run()', TL_GENERAL)));<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:02, 16. Feb. 2018 (CET)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-15T22:50:41Z<p>BugBuster: /* Installation */</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=In Kürze verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source></div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-15T22:50:06Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=In Kürze verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron-bundle/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über Composer bzw- Contao Manager.<br /><br /><br />
==Contao Manager==<br />
Paket "bugbuster/contao-cron-bundle" suchen und installieren.<br />
==Composer==<br />
<source lang="bash"><br />
composer require bugbuster/contao-cron-bundle<br />
</source><br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul "Scheduler", welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Bundle Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/bbcron/startjobs >/dev/null 2>&1<br />
</source></div>BugBusterhttps://de.contaowiki.org/CronCron2018-02-15T20:43:48Z<p>BugBuster: Link zum Contao 4 Cron Bundle Eintrag</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=3.3.3<br />
| Version=ab 3.2<br />
| TLVersion=2.7.0 - 2.9.5 (siehe Installationshinweise)<br />
| ERLink=https://contao.org/de/extension-list/view/cron.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron<br />
| Comment=Version ab Contao 3.2 verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Erweiterung Cron stammt ursprünglich von Peter Koch (acenes) und wurde von mir übernommen mit dem Ziel, diese für Contao 3 kompatibel zu machen. Die Beschreibung hier bezieht sich nur auf die Cron Version ab 3.0.0 für Contao 3.<br />
<br />
Eine Version für Contao 4 ist im Test, eine extra Beschreibung wird [http://de.contaowiki.org/Cron-Bundle hier] folgen.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/extension-list/view/cron.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Danach wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br />
<br /><br />
<br />
==Hinweis für ältere TYPOlight Versionen==<br />
Nutzer von TYPOlight 2.9/2.8/2.7 nutzen bitte Cron Version 1.1.0 ([http://www.contao.org/erweiterungsliste/view/cron.10010009.de.html Direktlink])<br />
<br /><br />
<br />
=Installation als Update=<br />
Ein Update erfolgt identisch der Installation.<br /><br /><br />
{{Achtung|Beim Update von Contao 2 auf Contao 3 muss die Erweiterung vollständig deinstalliert/gelöscht werden, da Contao 3 intern die Tabelle tl_cron nutzt, die bisher die Erweiterung Cron nutzte.}}<br />
'''Für die Profis''': Deinstallation ohne Löschung der Tabelle tl_cron, diese umbenennen nach tl_crontab, dann Update nach Contao 3 und die neue Version von Cron für Contao 3 installieren. So sollten die eingerichteten Cron-Jobs erhalten bleiben. Job Pfade müssen aber geprüft werden, falls der Demo Job genutzt wurde.<br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul (ab Cron 3.1.0), welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
In einer der nächsten Versionen wird es dazu eine Verbesserung geben, entweder auf die Art und Weise wie der Contao interne Frontend-Cron funktioniert oder als Job für diesen. Evaluierung erfolgt demnächst dazu.<br />
<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/system/modules/cron/public/CronFeController.php >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs. Als Beispiel hier ein Job zum löschen der Music Academy Demo Dateien und der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
[[Datei:Scheduler_overview_de.png]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
[[Datei:Scheduler_purge_system_log_de.png]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Unterverzeichnis "jobs". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter system/modules/cron/jobs/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2015 <http://www.contao.glen-langer.de><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from CronController<br />
<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
$this->Database->prepare("DELETE FROM `tl_log`")->executeUncached();<br />
if ($cronJob['logging'])<br />
{<br />
$this->log('System log purged by cron job.', 'PurgeLog run()', TL_GENERAL);<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
==Weitere Cron-Jobs==<br />
Weitere Cron-Jobs werden in einem extra Wiki Artikel gezeigt: [[Cron-Jobs_für_Erweiterung_Cron]]<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:47, 10. Mai 2016 (CEST)</div>BugBusterhttps://de.contaowiki.org/Cron-BundleCron-Bundle2018-02-15T20:42:13Z<p>BugBuster: Die Seite wurde neu angelegt: „Automatisierung von Batch Programmen mittels Zeitsteuerung * Automatische zeitgesteuerte Ausführung von PHP Skripten. * Zeitsteuerungs-Syntax von UNIX cron/cr…“</p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 4.4<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-cron-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron-bundle/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron-bundle<br />
| Comment=In Kürze verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Beschreibung hier bezieht sich nur auf die Cron Bundle Version ab 1.0.0. für Contao 4. Für Contao 3 ist die Beschreibung [http://de.contaowiki.org/Cron hier] zu finden.<br />
<br />
Mehr folgt hier in Kürze.</div>BugBusterhttps://de.contaowiki.org/CronCron2018-02-15T20:21:51Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=3.3.3<br />
| Version=ab 3.2<br />
| TLVersion=2.7.0 - 2.9.5 (siehe Installationshinweise)<br />
| ERLink=https://contao.org/de/extension-list/view/cron.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron<br />
| Comment=Version ab Contao 3.2 verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Erweiterung Cron stammt ursprünglich von Peter Koch (acenes) und wurde von mir übernommen mit dem Ziel, diese für Contao 3 kompatibel zu machen. Die Beschreibung hier bezieht sich nur auf die Cron Version ab 3.0.0 für Contao 3.<br />
<br />
Eine Version für Contao 4 ist im Test, eine extra Beschreibung wird hier folgen.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/extension-list/view/cron.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Danach wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br />
<br /><br />
<br />
==Hinweis für ältere TYPOlight Versionen==<br />
Nutzer von TYPOlight 2.9/2.8/2.7 nutzen bitte Cron Version 1.1.0 ([http://www.contao.org/erweiterungsliste/view/cron.10010009.de.html Direktlink])<br />
<br /><br />
<br />
=Installation als Update=<br />
Ein Update erfolgt identisch der Installation.<br /><br /><br />
{{Achtung|Beim Update von Contao 2 auf Contao 3 muss die Erweiterung vollständig deinstalliert/gelöscht werden, da Contao 3 intern die Tabelle tl_cron nutzt, die bisher die Erweiterung Cron nutzte.}}<br />
'''Für die Profis''': Deinstallation ohne Löschung der Tabelle tl_cron, diese umbenennen nach tl_crontab, dann Update nach Contao 3 und die neue Version von Cron für Contao 3 installieren. So sollten die eingerichteten Cron-Jobs erhalten bleiben. Job Pfade müssen aber geprüft werden, falls der Demo Job genutzt wurde.<br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul (ab Cron 3.1.0), welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
In einer der nächsten Versionen wird es dazu eine Verbesserung geben, entweder auf die Art und Weise wie der Contao interne Frontend-Cron funktioniert oder als Job für diesen. Evaluierung erfolgt demnächst dazu.<br />
<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/system/modules/cron/public/CronFeController.php >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs. Als Beispiel hier ein Job zum löschen der Music Academy Demo Dateien und der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
[[Datei:Scheduler_overview_de.png]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
[[Datei:Scheduler_purge_system_log_de.png]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Unterverzeichnis "jobs". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter system/modules/cron/jobs/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2015 <http://www.contao.glen-langer.de><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from CronController<br />
<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
$this->Database->prepare("DELETE FROM `tl_log`")->executeUncached();<br />
if ($cronJob['logging'])<br />
{<br />
$this->log('System log purged by cron job.', 'PurgeLog run()', TL_GENERAL);<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
==Weitere Cron-Jobs==<br />
Weitere Cron-Jobs werden in einem extra Wiki Artikel gezeigt: [[Cron-Jobs_für_Erweiterung_Cron]]<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:47, 10. Mai 2016 (CEST)</div>BugBusterhttps://de.contaowiki.org/DlstatsDlstats2017-06-18T22:13:53Z<p>BugBuster: </p>
<hr />
<div>Zählt die Anzahl von Datei-Downloads über die Standard Content Elemente Download und Downloads.<br />
* Download Statistiken für die Standard Content Elemente Download und Downloads.<br />
* Zählt die Anzahl der Downloads pro Datei und protokolliert die letzte Download-Zeit.<br />
* Optionaler Log jedes einzelnen Downloads mit Zeitstempel, IP und Benutzername.<br />
* Anonymisierung der IP-Adresse<br />
* Insert-Tag für Anzahl des Downloads im Frontend<br />
<br />
'''Der Nachfolger für Contao 4: bugbuster/contao-dlstats-bundle'''<br />
<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=2.4.1 / 3.9.2 / 1.0.0<br />
| Version=ab 2.9<br />
| TLVersion=2.7.6 - 2.8.4<br />
| Depending=[[Bot Detection|Bot Detection]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/dlstats.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/dlstats/issues<br />
| Comment=Contao 4 Version verfügbar<br />
}}<br />
[[en:dlstats]]<br />
[[Kategorie:Extensions]]<br />
<br />
==Installation in Contao 4==<br />
Siehe: https://github.com/BugBuster1701/contao-dlstats-bundle/blob/master/INSTALLATION_DE.md<br />
<br />
==Installation in Contao 3==<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br />
Bei manueller Installation, wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br /><br />
<span style="color:red">'''''Da das Modul "dlstats" abhängig ist (ab 2.1.0) vom Modul "[[Bot Detection|Bot Detection]]", muß dieses bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Erste Schritte==<br />
Im Backend bei "System" - "Einstellungen" in den Bereich "Download-Statistiken" gehen und dort einen Haken setzen bei "Download-Statistiken aktivieren". <br />
Mit nur dieser Einstellung bekommt als Statistik angezeigt, welche Datei wie oft geladen wurde.<br />
Dazu gibt es nach der Installation einen neuen Menüpunkt im Backend unter Inhalte: Download-Statistiken<br />
<br />
Mit setzen eines Hakens bei "Detailierte Download-Statistiken aktivieren" werden zusätzlich Infomationen bereitgestellt wie IP Adresse, Zeitstempel für jeden Download und der Benutzername. Benutzername natürlich nur, wenn der Download von einem angemeldeten Frontend Nutzer erfolgte.<br />
<br />
'''Für dlstats 2.1.x:'''<br />
Über den Punkt "Anonymisierung der IP-Adresse von Besuchern abschalten" kann die Anonymisierung der IP-Adresse abgeschaltet werden, was jedoch nur der Admin darf.<br /><br />
'''Ab dlstats 2.2.0''' ist dieser Punkt nicht mehr vorhanden, da Contao nun selbst ab Version 2.11 die Anonymisierung steuert. Es wird nun diese Einstellung übernommen.<br /><br />
(System - Einstellungen - Datenschutz-Einstellungen - IP-Adressen anonymisieren)<br />
<br />
==Insert-Tag Nutzung==<br />
Der Insert-Tag "cache_dlstats::totaldownloads::..." unterstützt sowohl den Source der Datei (relativer Pfad + Dateiname) wie auch in Verbindung mit dem Artikel Alias wie es in ce_download und ce_downloads generiert wird. Daher ist die Nutzung gut in den Templates der beiden CEs verwendbar, siehe Beispiele.<br />
'''Rückgabe ist nur die Anzahl als Zahl'''.<br />
<source lang="php"><br />
{{cache_dlstats::totaldownloads::tl_files/cdc2010.pdf}}<br />
{{cache_dlstats::totaldownloads::CDC_2010.html?file=tl_files/cdc2010.pdf}}<br />
<br />
// im ce_download template:<br />
{{cache_dlstats::totaldownloads::<?php echo $this->href; ?>}}<br />
<br />
// im ce_downloads template:<br />
{{cache_dlstats::totaldownloads::<?php echo $file['href']; ?>}}<br />
</source><br />
<br />
==IPs ignorieren==<br />
Sollen Downloads von bestimmten IP-Adressen nicht gezählt werden, kann dies definiert werden in der localconfig.php wie folgt:<br />
<source lang="php"><br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.1.2';<br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.0.0/24';<br />
//bzw.<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8::1';<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8:85a3:0800::/56'; <br />
</source><br />
<br />
==Hinweise==<br />
* gezählt werden nur Downloads, die über die Content-Elemente "Datei-Download" oder "Datei-Downloads" erstellt wurden.<br />
* direkte Links auf Dateien werden somit nicht gezählt!<br />
* keine Zählung, wenn man selber im BE eingeloggt ist (ab 2.1.0)<br />
* in den Contao Templates zum Download sind keine rel="nofollow" gesetzt, die Downloads der Crawler werden somit mitgezählt!<br />(ab 2.1.0 erledigt die Verhinderung der Zählung das Modul BotDetection, wovon "dlstats" nun abhängig ist)<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:09, 19. Jun. 2017 (CEST)</div>BugBusterhttps://de.contaowiki.org/DlstatsDlstats2017-06-18T22:09:26Z<p>BugBuster: </p>
<hr />
<div>Zählt die Anzahl von Datei-Downloads über die Standard Content Elemente Download und Downloads.<br />
* Download Statistiken für die Standard Content Elemente Download und Downloads.<br />
* Zählt die Anzahl der Downloads pro Datei und protokolliert die letzte Download-Zeit.<br />
* Optionaler Log jedes einzelnen Downloads mit Zeitstempel, IP und Benutzername.<br />
* Anonymisierung der IP-Adresse<br />
* Insert-Tag für Anzahl des Downloads im Frontend<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=2.4.1 / 3.9.2 / 1.0.0<br />
| Version=ab 2.9<br />
| TLVersion=2.7.6 - 2.8.4<br />
| Depending=[[Bot Detection|Bot Detection]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/dlstats.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/dlstats/issues<br />
| Comment=Contao 4 Version verfügbar<br />
}}<br />
[[en:dlstats]]<br />
[[Kategorie:Extensions]]<br />
<br />
==Installation in Contao 4==<br />
Siehe: https://github.com/BugBuster1701/contao-dlstats-bundle/blob/master/INSTALLATION_DE.md<br />
<br />
==Installation in Contao 3==<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br />
Bei manueller Installation, wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br /><br />
<span style="color:red">'''''Da das Modul "dlstats" abhängig ist (ab 2.1.0) vom Modul "[[Bot Detection|Bot Detection]]", muß dieses bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Erste Schritte==<br />
Im Backend bei "System" - "Einstellungen" in den Bereich "Download-Statistiken" gehen und dort einen Haken setzen bei "Download-Statistiken aktivieren". <br />
Mit nur dieser Einstellung bekommt als Statistik angezeigt, welche Datei wie oft geladen wurde.<br />
Dazu gibt es nach der Installation einen neuen Menüpunkt im Backend unter Inhalte: Download-Statistiken<br />
<br />
Mit setzen eines Hakens bei "Detailierte Download-Statistiken aktivieren" werden zusätzlich Infomationen bereitgestellt wie IP Adresse, Zeitstempel für jeden Download und der Benutzername. Benutzername natürlich nur, wenn der Download von einem angemeldeten Frontend Nutzer erfolgte.<br />
<br />
'''Für dlstats 2.1.x:'''<br />
Über den Punkt "Anonymisierung der IP-Adresse von Besuchern abschalten" kann die Anonymisierung der IP-Adresse abgeschaltet werden, was jedoch nur der Admin darf.<br /><br />
'''Ab dlstats 2.2.0''' ist dieser Punkt nicht mehr vorhanden, da Contao nun selbst ab Version 2.11 die Anonymisierung steuert. Es wird nun diese Einstellung übernommen.<br /><br />
(System - Einstellungen - Datenschutz-Einstellungen - IP-Adressen anonymisieren)<br />
<br />
==Insert-Tag Nutzung==<br />
Der Insert-Tag "cache_dlstats::totaldownloads::..." unterstützt sowohl den Source der Datei (relativer Pfad + Dateiname) wie auch in Verbindung mit dem Artikel Alias wie es in ce_download und ce_downloads generiert wird. Daher ist die Nutzung gut in den Templates der beiden CEs verwendbar, siehe Beispiele.<br />
'''Rückgabe ist nur die Anzahl als Zahl'''.<br />
<source lang="php"><br />
{{cache_dlstats::totaldownloads::tl_files/cdc2010.pdf}}<br />
{{cache_dlstats::totaldownloads::CDC_2010.html?file=tl_files/cdc2010.pdf}}<br />
<br />
// im ce_download template:<br />
{{cache_dlstats::totaldownloads::<?php echo $this->href; ?>}}<br />
<br />
// im ce_downloads template:<br />
{{cache_dlstats::totaldownloads::<?php echo $file['href']; ?>}}<br />
</source><br />
<br />
==IPs ignorieren==<br />
Sollen Downloads von bestimmten IP-Adressen nicht gezählt werden, kann dies definiert werden in der localconfig.php wie folgt:<br />
<source lang="php"><br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.1.2';<br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.0.0/24';<br />
//bzw.<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8::1';<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8:85a3:0800::/56'; <br />
</source><br />
<br />
==Hinweise==<br />
* gezählt werden nur Downloads, die über die Content-Elemente "Datei-Download" oder "Datei-Downloads" erstellt wurden.<br />
* direkte Links auf Dateien werden somit nicht gezählt!<br />
* keine Zählung, wenn man selber im BE eingeloggt ist (ab 2.1.0)<br />
* in den Contao Templates zum Download sind keine rel="nofollow" gesetzt, die Downloads der Crawler werden somit mitgezählt!<br />(ab 2.1.0 erledigt die Verhinderung der Zählung das Modul BotDetection, wovon "dlstats" nun abhängig ist)<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:09, 19. Jun. 2017 (CEST)</div>BugBusterhttps://de.contaowiki.org/DlstatsDlstats2016-06-19T19:22:42Z<p>BugBuster: </p>
<hr />
<div>Zählt die Anzahl von Datei-Downloads über die Standard Content Elemente Download und Downloads.<br />
* Download Statistiken für die Standard Content Elemente Download und Downloads.<br />
* Zählt die Anzahl der Downloads pro Datei und protokolliert die letzte Downloadzeit.<br />
* Optionaler Log jedes einzelnen Downloads mit Zeitstempel, IP und Benutzername.<br />
* Anonymisierung der IP-Adresse (ab 2.1.0)<br />
* Insert-Tag für Anzahl des Downloads im Frontend (ab 2.1.0)<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=2.4.1 / 3.4.0<br />
| Version=ab 2.9<br />
| TLVersion=2.7.6 - 2.8.4<br />
| Depending=[[Bot Detection|Bot Detection]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/dlstats.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/dlstats/issues<br />
| Comment=Contao 3.1 Version verfügbar<br />
}}<br />
[[en:dlstats]]<br />
[[Kategorie:Extensions]]<br />
<br />
==Installation==<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br />
Bei manueller Installation, wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br /><br />
<span style="color:red">'''''Da das Modul "dlstats" abhängig ist (ab 2.1.0) vom Modul "[[Bot Detection|Bot Detection]]", muß dieses bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Erste Schritte==<br />
Im Backend bei "System" - "Einstellungen" in den Bereich "Download-Statistiken" gehen und dort einen Haken setzen bei "Download-Statistiken aktivieren". <br />
Mit nur dieser Einstellung bekommt als Statistik angezeigt, welche Datei wie oft geladen wurde.<br />
Dazu gibt es nach der Installation einen neuen Menüpunkt im Backend unter Inhalte: Download-Statistiken<br />
<br />
Mit setzen eines Hakens bei "Detailierte Download-Statistiken aktivieren" werden zusätzlich Infomationen bereitgestellt wie IP Adresse, Zeitstempel für jeden Download und der Benutzername. Benutzername natürlich nur, wenn der Download von einem angemeldeten Frontend Nutzer erfolgte.<br />
<br />
'''Für dlstats 2.1.x:'''<br />
Über den Punkt "Anonymisierung der IP-Adresse von Besuchern abschalten" kann die Anonymisierung der IP-Adresse abgeschaltet werden, was jedoch nur der Admin darf.<br /><br />
'''Ab dlstats 2.2.0''' ist dieser Punkt nicht mehr vorhanden, da Contao nun selbst ab Version 2.11 die Anonymisierung steuert. Es wird nun diese Einstellung übernommen.<br /><br />
(System - Einstellungen - Datenschutz-Einstellungen - IP-Adressen anonymisieren)<br />
<br />
==Insert-Tag Nutzung==<br />
Der Insert-Tag "cache_dlstats::totaldownloads::..." unterstützt sowohl den Source der Datei (relativer Pfad + Dateiname) wie auch in Verbindung mit dem Artikel Alias wie es in ce_download und ce_downloads generiert wird. Daher ist die Nutzung gut in den Templates der beiden CEs verwendbar, siehe Beispiele.<br />
'''Rückgabe ist nur die Anzahl als Zahl'''.<br />
<source lang="php"><br />
{{cache_dlstats::totaldownloads::tl_files/cdc2010.pdf}}<br />
{{cache_dlstats::totaldownloads::CDC_2010.html?file=tl_files/cdc2010.pdf}}<br />
<br />
// im ce_download template:<br />
{{cache_dlstats::totaldownloads::<?php echo $this->href; ?>}}<br />
<br />
// im ce_downloads template:<br />
{{cache_dlstats::totaldownloads::<?php echo $file['href']; ?>}}<br />
</source><br />
<br />
==IPs ignorieren==<br />
Sollen Downloads von bestimmten IP-Adressen nicht gezählt werden, kann dies definiert werden in der localconfig.php wie folgt:<br />
<source lang="php"><br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.1.2';<br />
$GLOBALS['DLSTATS']['BOT_IPV4'][] = '192.168.0.0/24';<br />
//bzw.<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8::1';<br />
$GLOBALS['DLSTATS']['BOT_IPV6'][] = '2001:0db8:85a3:0800::/56'; <br />
</source><br />
<br />
==Hinweise==<br />
* gezählt werden nur Downloads, die über die Content-Elemente "Datei-Download" oder "Datei-Downloads" erstellt wurden.<br />
* direkte Links auf Dateien werden somit nicht gezählt!<br />
* keine Zählung, wenn man selber im BE eingeloggt ist (ab 2.1.0)<br />
* in den Contao Templates zum Download sind keine rel="nofollow" gesetzt, die Downloads der Crawler werden somit mitgezählt!<br />(ab 2.1.0 erledigt die Verhinderung der Zählung das Modul BotDetection, wovon "dlstats" nun abhängig ist)<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 20:43, 28. Jul. 2012 (CEST)</div>BugBusterhttps://de.contaowiki.org/Enhanced_error.logEnhanced error.log2016-05-12T15:02:34Z<p>BugBuster: Die Seite wurde neu angelegt: „"Enhanced error.log" generiert die Contao error.log mit vollständigen relativen Dateipfaden. {{ExtInfo | Dev=Glen Langer (BugBuster) | Dev…“</p>
<hr />
<div>"Enhanced error.log" generiert die Contao error.log mit vollständigen relativen Dateipfaden.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=https://contao.ninja<br />
| ExtVersion=1.0.0<br />
| Version=ab 3.5<br />
| ERLink=https://contao.org/de/erweiterungsliste/view/errorlog_enhanced.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/errorlog_enhanced/issues<br />
| VCSLink=https://github.com/BugBuster1701/errorlog_enhanced<br />
| Comment=Version für Contao 3.5 verfügbar<br />
}}<br />
[[en:Enhanced_error.log]]<br />
[[Kategorie:Extensions]]<br />
<br />
{{Hinweis|Diese Seite wird vom Entwickler nicht mehr aktualisiert. <br />
Das aktuelle Handbuch zur Erweiterung "Enhanced error.log" ist hier zu finden: [https://docs.contao.ninja/de/enhanced-error-log.html docs.contao.ninja]}}</div>BugBusterhttps://de.contaowiki.org/CronCron2016-05-09T22:47:54Z<p>BugBuster: </p>
<hr />
<div>Automatisierung von Batch Programmen mittels Zeitsteuerung<br />
* Automatische zeitgesteuerte Ausführung von PHP Skripten.<br />
* Zeitsteuerungs-Syntax von UNIX cron/crontab.<br />
* Benötigt kein “richtiges” cron, wird bei Backend Seitenaufrufen ausgeführt<br />
* Frontend Auslösung mittels Frontend Modul möglich<br />
* Alternative Auslösung mittels “echtem” cron möglich.<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=3.3.3<br />
| Version=ab 3.2<br />
| TLVersion=2.7.0 - 2.9.5 (siehe Installationshinweise)<br />
| ERLink=https://contao.org/de/extension-list/view/cron.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-cron/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-cron<br />
| Comment=Version ab Contao 3.2 verfügbar<br />
}}<br />
[[Kategorie:Extensions]]<br />
<br />
<br />
=Vorwort=<br />
Die Erweiterung Cron stammt ursprünglich von Peter Koch (acenes) und wurde von mir übernommen mit dem Ziel, diese für Contao 3 kompatibel zu machen. Die Beschreibung hier bezieht sich nur auf die Cron Version ab 3.0.0 für Contao 3.<br />
<br />
=Forum=<br />
Fragen zur Cron Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Forum - Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/contao-cron/issues Tracking System] gemeldet werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/extension-list/view/cron.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Danach wie dabei üblich /contao/install.php aufrufen um ein eventuelles Update der Datenbank durchführen.<br /><br />
<br /><br />
<br />
==Hinweis für ältere TYPOlight Versionen==<br />
Nutzer von TYPOlight 2.9/2.8/2.7 nutzen bitte Cron Version 1.1.0 ([http://www.contao.org/erweiterungsliste/view/cron.10010009.de.html Direktlink])<br />
<br /><br />
<br />
=Installation als Update=<br />
Ein Update erfolgt identisch der Installation.<br /><br /><br />
{{Achtung|Beim Update von Contao 2 auf Contao 3 muss die Erweiterung vollständig deinstalliert/gelöscht werden, da Contao 3 intern die Tabelle tl_cron nutzt, die bisher die Erweiterung Cron nutzte.}}<br />
'''Für die Profis''': Deinstallation ohne Löschung der Tabelle tl_cron, diese umbenennen nach tl_crontab, dann Update nach Contao 3 und die neue Version von Cron für Contao 3 installieren. So sollten die eingerichteten Cron-Jobs erhalten bleiben. Job Pfade müssen aber geprüft werden, falls der Demo Job genutzt wurde.<br />
<br />
=Auslösen des Schedulers=<br />
==Backend==<br />
Standardmäßig wird der Scheduler bei jeder Backend Seitenaktualisierung ausgelöst.<br />
==Frontend==<br />
Über ein Frontend Modul (ab Cron 3.1.0), welches aber keine Ausgabe erzeugt und somit das Layout nicht stört, ist die Auslösung auch über Seitenaufrufe des Frontends möglich. Bei Jobs die längere Zeit benötigen ist diese Art der Auslösung ungeeignet.<br />
In einer der nächsten Versionen wird es dazu eine Verbesserung geben, entweder auf die Art und Weise wie der Contao interne Frontend-Cron funktioniert oder als Job für diesen. Evaluierung erfolgt demnächst dazu.<br />
<br />
==Luxus Lösung mit realem Cron==<br />
Hat man einen Server zur Verfügung in dem Cron-Jobs eingerichtet werden können, kann man diesen System Cron nutzen um die Cron Erweiterung darüber auszulösen.<br />
Der Vorteil ist, dass der Cron-Job genau zur geplanten Zeit gestartet wird, auch wenn niemand auf die Website zugreift. Auch bei Seiten mit sehr hohem Traffic, wird diese Art der Auslösung die Webserver Last etwas senken. (im Vergleich zur FE-Modul Auslösung)<br />
<br />
Folgende Zeile in die crontab eintragen, vorher anpassen mit der eigenen Domain natürlich.<br />
<source lang="bash"><br />
* * * * * wget -t 1 -O - http://www.example.com/system/modules/cron/public/CronFeController.php >/dev/null 2>&1<br />
</source><br />
<br />
=Cron-Jobs definieren=<br />
Über Backend - System - Scheduler sieht man zunächst die Übersicht bereits eingerichteter Cron-Jobs. Als Beispiel hier ein Job zum löschen der Music Academy Demo Dateien und der mitgelieferte Demo Job zum löschen der Einträge im System-Log.<br />
[[Datei:Scheduler_overview_de.png]]<br />
<br />
Der Job zum löschen der System-Log Einträge im Detail:<br />
[[Datei:Scheduler_purge_system_log_de.png]]<br />
<br />
=Benutzerdefinierte Cron-Job Scripte=<br />
Die Erweiterung bringt ein Beispielskript "PurgeLog.php" mit im Unterverzeichnis "jobs". Hier kann man schon einiges erkennen wie es läuft. Weiter unten folgt ein weiteres kleines Beispiel.<br />
<br />
==Allgemeine Überlegungen==<br />
Generell sollte man versuchen, kleine Jobs wann immer möglich zu schaffen, die nicht lange laufen. Zum Beispiel statt der Schaffung eines großen Jobs, das 3 Dinge tut, ist es besser, 3 kleinere Jobs zu schaffen. Auf diese Weise kann die Last in 3 verschiedenen Seitenaufrufe vom Scheduler verteilt werden.<br><br />
Die Laufzeit eines Jobs sollte kurz bleiben, weil der Benutzer eine Sanduhr so lange zu sehen bekommt bis dieser fertig ist. Wenn es zu lange dauert wird man denken, es gibt ein Problem mit der Website oder mit dem Computer und bricht die Anfrage ab oder schließt gar den Browser.<br />
<br />
==Das globale Array $cronJob==<br />
Es gibt eine globales Array $cronjob die einem hilft den Job in sinnvolle Stücke aufzuteilen, und einige Informationen und Kontrolle bietet:<br />
<br />
===$cronJob['id']===<br />
<br />
ID in der Job Table tl_crontab.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['title']===<br />
<br />
Titel des Jobs.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['lastrun']===<br />
<br />
Zeitstempel der letzten Ausführung. Der Wert ist 0 wenn unbekannt bzw. noch nie ein Start erfolgte.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['endtime']===<br />
<br />
Ab dieser Zeit sollt der Job stoppen, z.B. in dem keine neuen Aktionen mehr ausgeführt werden.<br><br />
Dieser Parameter kann nur gelesen werden, eine Änderung hat keine Auswirkung.<br />
<br />
===$cronJob['runonce']===<br />
<br />
"true": der Job wird nach komplettem Durchlauf deaktiviert.<br><br />
Das kann im Job selbst geändert werden:<br><br />
* Setzen auf "true" : der Job wird nach komplettem Durchlauf deaktiviert..<br />
* Setzen auf "false": der Job wird nach komplettem Durchlauf nicht deaktiviert.<br />
Setzt man $cronJob['completed'] auf "false", wird der Job nicht deaktiviert auch wenn $cronJob['runonce'] auf "true" gesetzt ist. <br />
<br />
===$cronJob['logging']===<br />
<br />
"true": die Protokollierung des Jobs ist eingeschaltet, für Testzwecke gedacht.<br><br />
"false": nur Fehler werden protokolliert, so sollte der Job im Normalfall eingestellt sein.<br><br />
Dieser Wert kann vom Job geändert werden, führt aber eventuell zur Verwirrung der Nutzer:<br />
* Setzen auf "true" : die Protokollierung des Jobs ist eingeschaltet.<br />
* Setzen auf "false": die Protokollierung des Jobs ist abgeschaltet, bis auf Fehlermeldungen.<br />
<br />
===$cronJob['completed']===<br />
<br />
Dieser Status ist per Default "true" und bedeutet, wenn der Job fertig ist wird dieser als erledigt markiert und wird neu geplant.<br />
<br><br />
Benötigt der Job zu viel Zeit und man hat die Möglichkeit diesen abzubrechen und beim nächsten Aufruf an der Stelle weiter zu machen, setzt man diesen Status auf "false" und beendet den Job. Dadurch wird der alte Zeitplan beibehalten und beim nächsten Scheduler Aufruf der Job wieder gestartet, um die Arbeit abzuschließen.<br />
<br />
==Beispiel Script==<br />
Script liegt hier unter system/modules/cron/jobs/PurgeLog.php<br />
<br />
<source lang="php"><br />
<?php <br />
<br />
/**<br />
* Initialize the system<br />
*/<br />
if (!defined('TL_MODE')) <br />
{<br />
define('TL_MODE', 'BE');<br />
<br />
$dir = __DIR__;<br />
<br />
while ($dir != '.' && $dir != '/' && !is_file($dir . '/system/initialize.php'))<br />
{<br />
$dir = dirname($dir);<br />
}<br />
<br />
if (!is_file($dir . '/system/initialize.php'))<br />
{<br />
echo 'Could not find initialize.php!';<br />
exit(1);<br />
}<br />
require($dir . '/system/initialize.php');<br />
}<br />
<br />
<br />
/**<br />
* Class PurgeLog<br />
* <br />
* @copyright Glen Langer 2012..2015 <http://www.contao.glen-langer.de><br />
* @author Glen Langer (BugBuster)<br />
* @package Cron<br />
*/<br />
class PurgeLog extends Backend<br />
{<br />
<br />
/**<br />
* Initialize the controller<br />
*/<br />
public function __construct()<br />
{<br />
parent::__construct();<br />
} // __construct<br />
<br />
/**<br />
* Implement the commands to run by this batch program<br />
*/<br />
public function run()<br />
{<br />
global $cronJob; // from CronController<br />
<br />
//At this time the job should be defered,<br />
//no new actions should be started after this time.<br />
if (time() >= $cronJob['endtime'])<br />
{<br />
$cronJob['completed'] = false;<br />
return;<br />
}<br />
<br />
$this->Database->prepare("DELETE FROM `tl_log`")->executeUncached();<br />
if ($cronJob['logging'])<br />
{<br />
$this->log('System log purged by cron job.', 'PurgeLog run()', TL_GENERAL);<br />
}<br />
} // run<br />
<br />
} // class PurgeLog<br />
<br />
/**<br />
* Instantiate log purger<br />
*/<br />
$objPurge = new PurgeLog();<br />
$objPurge->run();<br />
</source><br />
<br />
==Weitere Cron-Jobs==<br />
Weitere Cron-Jobs werden in einem extra Wiki Artikel gezeigt: [[Cron-Jobs_für_Erweiterung_Cron]]<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:47, 10. Mai 2016 (CEST)</div>BugBusterhttps://de.contaowiki.org/XingXing2016-03-26T20:14:10Z<p>BugBuster: /* Installation in Contao 3 */</p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Lister kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.0.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [https://contao.org/de/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 21:02, 26. Mär. 2016 (CET)</div>BugBusterhttps://de.contaowiki.org/XingXing2016-03-26T20:02:11Z<p>BugBuster: </p>
<hr />
<div>[[Datei:Modul_Xing_Team.jpg|right|Xing Team]]Normalerweise braucht man dazu kein richtiges Modul um einen Xing Banner auf die Webseite zu bringen, da es sich ja nur um ein verlinktes Bild handelt. Aber das Bild sollte wählbar sein, die Position bestimmbar, auch mehrere davon auf einer Seite, oder verteilt auf mehrere Domains.<br />
Mit dem Modul können Kategorien angelegt werden, in diesen dann das XING Profil. Über den XING Lister kann man dann die Kategorien auswählen, die angezeigt werden sollen. Jedem Frontend Modul kann ein eigenes Template zugeordnet werden. Drei unterschiedliche Templates + eines für ein Firmen Profil werden mitgeliefert, dazu später mehr.<br />
Somit ist es dann möglich, die Kategorien auf mehrere Layouts bzw. Domains zu verteilen. Wenn man mehrere Profile in einer Kategorie anlegt, werden alle aus der Kategorie angezeigt. Damit wäre es z.B. möglich, die Profile eines ganzen Teams anzuzeigen.<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=C3 3.1.0 / C4 1.0.0<br />
| Version=ab 2.9<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/gl_xing.html / https://github.com/BugBuster1701/contao-xing-bundle<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao_xing/issues / https://github.com/BugBuster1701/contao-xing-bundle/issues<br />
| Comment=Version für Contao 3 und Contao 4 verfügbar<br />
}}<br />
[[en:Xing]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Xing Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119 Sonstige-Erweiterungen]<br />
<br /><br />
Fehler und Wünsche können im Tracking System (Links siehe oben) gemeldet werden.<br />
<br />
=Installation in Contao 3=<br />
Installation erfolgt über das Extension Repository im Backend der Contao Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [http://www.contao.org/erweiterungsliste/view/gl_xing.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/gl_xing angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
<br />
=Installation in Contao 4=<br />
Installation erfolgt über Composer. Details siehe [https://github.com/BugBuster1701/contao-xing-bundle/blob/master/README.md Readme auf GitHub].<br />
<br />
<br />
==Contao 3: Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Xing_Update_v1_auf_v2|'''Xing Update Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Xing Modul bringt ein Backend und ein Frontend Modul mit.<br /><br />
Im Backend gibt es "Xing", für das Frontend "Xing Anzeige".<br />
<br />
==Backend==<br />
<br />
===Xing===<br />
[[Datei:Xing_de_backend.jpg|Xing Modul Backend]]<br />
<br />
==Frontend==<br />
Für das Frontend Modul wird als Beispiel eine CSS Datei mitgeliefert:<br />
*mod_xing_fe.css für die normale, zeilenweise Ausgabe<br />
<br />
===Xing Anzeige===<br />
Die einfachste Variante, nur das verlinkte Bild:<br /><br />
[[Datei:Modul_Xing_List.tpl.jpg|Xing Banner]]<br />
<br /><br /><br />
Die komplexere Variante, mehrere Xing Banner eines Teams, mit Teamname und Namen der Team Mitglieder.<br /><br />
[[Datei:Modul_Xing_Team.jpg|Xing Team]]<br />
<br /><br /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Xing eine neue Kategorie an. In dieser dann das Xing Profil / die Xing Profile.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Xing#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Xing'. Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br /><br />
[[Datei:Xing_de_backend_kategorie.jpg|Xing - Neue Kategorie]]<br /><br /><br />
Dort gibt man der Kategorie einen Namen, auf diesem wird später das Frontend Modul zurückgreifen. Anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Profils==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neues Profil' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie: <br /><br />
[[Datei:Xing_de_backend_profil_neu.jpg|Xing - neues Profil]]<br /><br /><br />
Nun sind einige Angaben nötig: <br />
* XING Profil eingeben, z.B.: Max_Mustermann bzw. meinefirma , Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* XING Layout wählen, Erläuterungen dazu in der Hilfe (Help Wizard)<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Xing' - 'Xing Anzeige' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Xing Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie bereits erwähnt, wird für die Darstellung eine CSS-Datei mitgeliefert.<br />
Für die ersten Tests sollte die Datei mod_xing_fe.css aus dem Verzeichnis /system/modules/gl_xing kopiert werden nach /tl_files bzw. /files und dann über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind innerhalb der Kategorie sowie im selbst angelegtem Frontend Modul machbar/einstellbar.<br />
<br />
==Feinheiten innerhalb der Kategorie==<br />
===Team Profile===<br />
In den Einstellungen in der Kategorie selbst gibt es nichts weiter, aber man kann in der Kategorie mehrere Xing-Profile anlegen.<br ><br />
Einsatz wäre z.B. eine Übersicht von allen Team Mitgliedern.<br /><br />
Je nach Template Auswahl im Frontend-Modul wird der Kategorie-Name zum Team-Name.<br /><br />
Siehe nächsten Abschnitt wie das Ganze dann aussehen kann.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
===Templates===<br />
Ist nur ein Xing-Profil in der Kategorie definiert, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list , es wird nur die verlinkte Grafik gezeigt<br />[[Datei:Modul_Xing_List.tpl.jpg|mod_xing_list]]<br />
* mod_xing_list_profile, es wird die verlinkte Grafik gezeigt, darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile.tpl.jpg|mod_xing_profile]]<br />
<br />
<br /><br />
Sind mehrere Xing-Profile in der Kategorie definiert um ein Team darzustellen, sind folgende zwei Templates sinnvoll einzusetzen:<br />
* mod_xing_list_profile, es werden untereinander die verlinkten Grafiken angezeigt, jeweils darunter der Profile Name (Unterstrich wird dabei entfernt)<br />[[Datei:Modul_Xing_Profile-2.tpl.jpg|mod_xing_profile]] <br />
* mod_xing_list_team, wie bei mod_xing_list_profile, zusätzlich erscheint über der ersten Grafik der Team-Name (Kategorie Name) <br />[[Datei:Modul_Xing_Team.jpg|mod_xing_team]]<br />
<br /><br />
Sie können eigene Templates im Ordner /templates bzw. im Template Ordner des verwendetem Themes speichern.<br /><br />
Templates müssen mit '''''mod_xing_list''''' beginnen und die Dateiendung '''''.tpl''''' / '''''.xhtml''''' / '''''.html5''''' haben. ( z.B.: '''''mod_xing_list_club47.xhtml''''' )<br />
<br /><br />
<br />
===Company Template===<br />
Da bei XING ein Firmenprofil eine andere Ziel-URL hat, wurde für ein Firmenprofil ein eigenes Template erstellt.<br />
Daher bitte bei einem Firmenprofil das Template "mod_xing_list_company" auswählen.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen angemeldet sind.<br />
<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 21:02, 26. Mär. 2016 (CET)</div>BugBusterhttps://de.contaowiki.org/SystemdiagnosetoolSystemdiagnosetool2015-09-01T19:09:01Z<p>BugBuster: </p>
<hr />
<div>[[Category:Installation und Updates]]<br />
[[Category:Fehlersuche]]<br />
{{msgInfo|Es gibt nun ein einheitliches [https://docs.contao.org/books/manual/current/de/01-installation/den-live-server-konfigurieren.html#der-contao-check Contao Check Tool], welches für alle Versionen ab 2.9.0 bis zu aktuellsten Contao Version diverse Tests durchführen kann.<br>Die nachfolgenden Hinweise und Grafiken beziehen sich auf die alten einzelnen Systemdiagnosetools.}}<br />
Das Systemdiagnosetool bietet auf einfache Weise die Möglichkeit zu prüfen,<br />
*ob diverse Mindestsystemvoraussetzungen erfüllt werden.<br />
*ob der [[Safemode Hack]] benötigt wird.<br />
*ob alle Dateien korrekt vorhanden sind und diese die richtigen Berechtigungen haben.<br />
<br />
Das Systemdiagnosetool konnte auf der Contao Webseite heruntergeladen werden. Anhand seines Dateinamens war zu erkennen, zu welcher TYPOlight- bzw. Contao-Version es gehört.<br /><br />
Eine Sammlung der alten Systemdiagnosetools für ältere TYPOlight- bzw Contao-Versionen wurde von [[Benutzer:BugBuster|BugBuster]] auf seiner [http://www.contao.glen-langer.de/contao-check-tools.html Webseite] veröffentlicht.<br />
{{msgImportant | Es gibt für jede Contao-Version ein eigenes Systemdiagnosetool. Es ist bei der Verwendung darauf zu achten, dass die Version des Systemdiagnosetools mit der Version der Contao-Version übereinstimmt.}}<br />
<br />
=Verwendung=<br />
Die Verwendung des Tools ist sehr einfach: Nachdem es von der Contao Homepage heruntergeladen und entpackt wurde, kopiert man die in dem Ordner enthaltene Datei ''contao-check.php'' per FTP in das Root-Verzeichnis der Contao-Installation und ruft diese im Webbrowser auf. Daraufhin öffnet sich eine sehr lange Webseite. Zuerst klickt man auf dem unter ''Files'' plazierten Link ''Click here to show only warnings''.<br />
<br />
Das Rootverzeichnis ist dasjenige, in dem auch die Datei CHANGELOG.txt liegt.<br />
<br />
[[Datei:checktool-showonlywarnings.png|Nur Warnungen anzeigen|center|frame]]<br />
<br />
Im Idealfall sollte die Seite nun wie folgt aussehen:<br />
<br />
[[Datei:checktool-noerrors.png|Keine Fehlermeldungen|frame|center]]<br />
<br />
=PHP configuration=<br />
In diesem Abschnitt werden diverse Mindestvoraussetzungen geprüft. Je nach Hosting- bzw Serverpacket können diese Werte entweder selbst, vom Serveradmin oder gar nicht geändert werden. Ob und wie die Einstellungen geändert werden können, ist beim Hoster / Serveradmin zu erfragen.<br />
<br />
Die Parameter haben Einfluss auf unterschiedliche Funktionen in Contao:<br />
*'''Safe mode:''' Legt fest, ob PHP Dateien verändern kann.<br />
*'''Maximum execution time:''' Dieser Wert legt fest, wie lange z.B. Scripte laufen, bevor sie abgebrochen werden, wenn sie noch nicht fertig ausgeführt sind.<br />
*'''Memory Limit:''' Speicherbegrenzung von PHP für einen Seitenabruf<br />
*'''Register globals:''' Erhöht die Sicherheit. Siehe auch [http://php.net/manual/de/security.globals.php Anleitung für globals von php.net]. Wie aus dem Link ersichtlich, ist dies veraltet. Sollte es bei einem Hoster noch auf ''ON'' sein, ist es empfehlenswert, aus Sicherheitsgründen eine Abschaltung zu erbeten.<br />
*'''File uploads:''' Regelt, ob Dateien hochgeladen werden dürfen.<br />
*'''Upload maximum filesize:''' Legt fest, wie gross die Dateien bei einem Datei-Upload sein dürfen.<br />
*'''SOAP extension:''' Die SOAP-Extension wird benötigt, um die in Contao integrierte Erweiterungsverwaltung nutzen zu können.<br />
<br />
=File permissions=<br />
Dieser Abschnitt gibt Auskunft, ob der sogenannte Safemode-Hack benötigt wird.<br /><br />
Siehe dazu die Anleitungen: [[Safemode Hack]]<br />
<br />
[[Datei:checktool-smh.png|SafeMode-Hack|frame|center]]<br />
<br />
=Files=<br />
Im Abschnitt ''Files'' wird das Dateisystem der Contao-Installation geprüft. Dateien von event. installierten Erweiterungen und selbst erstellte Dateien (z.B. in /templates/ oder /tl_files/) werden nicht berücksichtigt.<br /><br />
Da man Dateien, bei denen alles korrekt ist, zu Beginn ausgeblendet hat, werden im Idealfall keine Dateien angezeigt. Sollten Fehler vorhanden sein, werden diese Dateien angezeigt.<br /><br />
Folgende Fehler können auftreten:<br />
<br />
==Korrupte Dateien==<br />
Korrupt bedeutet, dass die Datei zwar vorhanden ist, aber nicht zur verwendeten Version gehört bzw nicht den korrekten Inhalt hat. Dies kann mehrere Gründe haben:<br />
*Die Datei wurde bei der Installation / einem Update nicht korrekt ersetzt bzw übertragen. (Dies ist in den meisten Fällen der Grund, warum eine Datei korrupt ist.)<br />
*Die Datei wurde absichtlich vom Administrator verändert.<br />
*Die Webseite / der Webserver wurde [[Contao_gehackt|gehackt]].<br />
<br />
Lösung: Die betroffenen Dateien erneut auf den Webserver kopieren und darauf achten, dass die Dateien aus der korrekten Contao-Version stammen. Eine Ausnahme ist eine gehackte Webseite. Hier sind weitere Massnahmen nötig (siehe: [[Contao_gehackt]]).<br />
<br />
[[Datei:checktool-corruptfiles.png|Korrupte Dateien|frame|center]]<br />
<br />
==Fehlende Dateien==<br />
Wie der Name schon sagt, fehlen die aufgelistete Dateien. Die Gründe hierfür ist, dass die aufgelistete Datei bei der Installation / einem Update nicht übertragen worden ist.<br />
<br />
Lösung: Die betroffenen Dateien erneut auf den Webserver kopieren und darauf achten, dass die Dateien aus der korrekten Contao-Version stammen.<br />
<br />
[[Datei:checktool-missingfiles.png|Fehlende Dateien|frame|center]]<br />
<br />
==Dateien mit falschen Besitzrechten==<br />
Bei diesem Fehler handelt es sich um Dateien, welche falsche Besitzrechte aufweisen. Dateien mit zuviele Rechten können ein Sicherheitsrisiko darstellen; Dateien mit zuwenig Rechten können dazu führen, dass das Contao-System nicht korrekt funktioniert. Prinzipiell gilt: So wenig wie möglich, so viel wie nötig.<br /><br />
Ein Grund dafür kann z.B. sein, dass die Besitzrechte bei der Installation / dem Update nicht korrekt gesetzt wurden.<br />
<br />
Lösung: Je nach Zugriffsmöglichkeit auf den Webserver z.B. per FTP oder SSH die Besitzrechte entsprechend ändern. Das Tool zeigt in der Spalte ''CHMOD'' die aktuellen Besitzrechte an; in der Spalte ''Recommended'' die empfohlenen Besitzrechte.<br />
<br />
[[Datei:checktool-wrongpermissions.png|Dateien mit falschen Besitzrechten|frame|center]]<br />
<br />
=Tool entfernen=<br />
Wenn das Systemdiagnosetool nicht mehr benötigt wird, kann die Datei ''contao-check.php'' einfach wieder gelöscht werden. Normalerweise wird von dem Tool eine Datei ''contao-check.txt'' und ein Ordner ''contao-check'' im Root-Verzeichnis angelegt. Auch diese Datei bzw dieser Ordner kann gelöscht werden.</div>BugBusterhttps://de.contaowiki.org/SystemdiagnosetoolSystemdiagnosetool2015-09-01T18:53:34Z<p>BugBuster: Link zum Contao Check aktualisiert</p>
<hr />
<div>[[Category:Installation und Updates]]<br />
[[Category:Fehlersuche]]<br />
{{msgInfo|Es gibt nun ein einheitliches [https://docs.contao.org/books/manual/current/de/01-installation/den-live-server-konfigurieren.html#der-contao-check Contao Check Tool], welches für alle Versionen ab 2.9.0 bis zu aktuellsten Contao Version diverse Tests durchführen kann.<br>Die nachfolgenden Hinweise und Grafiken beziehen sich auf die alten einzelnen Systemdiagnosetools.}}<br />
Das Systemdiagnosetool bietet auf einfache Weise die Möglichkeit zu prüfen,<br />
*ob diverse Mindestsystemvoraussetzungen erfüllt werden.<br />
*ob der [[Safemode Hack]] benötigt wird.<br />
*ob alle Dateien korrekt vorhanden sind und diese die richtigen Berechtigungen haben.<br />
Das Systemdiagnosetool kann auf der [http://www.contao.org/den-live-server-konfigurieren.html#system-check-tool Contao Webseite] heruntergeladen werden. Anhand seines Dateinamens ist zu erkennen, zu welcher TYPOlight- bzw. Contao-Version es gehört.<br /><br />
Eine Sammlung von Systemdiagnosetools für ältere TYPOlight- bzw Contao-Versionen wurde von [[Benutzer:BugBuster|BugBuster]] auf seiner [http://www.contao.glen-langer.de/contao-check-tools.html Webseite] veröffentlich.<br />
{{msgImportant | Es gibt für jede Contao-Version ein eigenes Systemdiagnosetool. Es ist bei der Verwendung darauf zu achten, dass die Version des Systemdiagnosetools mit der Version der Contao-Version übereinstimmt.}}<br />
=Verwendung=<br />
Die Verwendung des Tools ist sehr einfach: Nachdem es von der Contao Homepage heruntergeladen und entpackt wurde, kopiert man die in dem Ordner enthaltene Datei ''contao-check.php'' per FTP in das Root-Verzeichnis der Contao-Installation und ruft diese im Webbrowser auf. Daraufhin öffnet sich eine sehr lange Webseite. Zuerst klickt man auf dem unter ''Files'' plazierten Link ''Click here to show only warnings''.<br />
<br />
Das Rootverzeichnis ist dasjenige, in dem auch die Datei CHANGELOG.txt liegt.<br />
<br />
[[Datei:checktool-showonlywarnings.png|Nur Warnungen anzeigen|center|frame]]<br />
<br />
Im Idealfall sollte die Seite nun wie folgt aussehen:<br />
<br />
[[Datei:checktool-noerrors.png|Keine Fehlermeldungen|frame|center]]<br />
<br />
=PHP configuration=<br />
In diesem Abschnitt werden diverse Mindestvoraussetzungen geprüft. Je nach Hosting- bzw Serverpacket können diese Werte entweder selbst, vom Serveradmin oder gar nicht geändert werden. Ob und wie die Einstellungen geändert werden können, ist beim Hoster / Serveradmin zu erfragen.<br />
<br />
Die Parameter haben Einfluss auf unterschiedliche Funktionen in Contao:<br />
*'''Safe mode:''' Legt fest, ob PHP Dateien verändern kann.<br />
*'''Maximum execution time:''' Dieser Wert legt fest, wie lange z.B. Scripte laufen, bevor sie abgebrochen werden, wenn sie noch nicht fertig ausgeführt sind.<br />
*'''Memory Limit:''' Speicherbegrenzung von PHP für einen Seitenabruf<br />
*'''Register globals:''' Erhöht die Sicherheit. Siehe auch [http://php.net/manual/de/security.globals.php Anleitung für globals von php.net]. Wie aus dem Link ersichtlich, ist dies veraltet. Sollte es bei einem Hoster noch auf ''ON'' sein, ist es empfehlenswert, aus Sicherheitsgründen eine Abschaltung zu erbeten.<br />
*'''File uploads:''' Regelt, ob Dateien hochgeladen werden dürfen.<br />
*'''Upload maximum filesize:''' Legt fest, wie gross die Dateien bei einem Datei-Upload sein dürfen.<br />
*'''SOAP extension:''' Die SOAP-Extension wird benötigt, um die in Contao integrierte Erweiterungsverwaltung nutzen zu können.<br />
<br />
=File permissions=<br />
Dieser Abschnitt gibt Auskunft, ob der sogenannte Safemode-Hack benötigt wird.<br /><br />
Siehe dazu die Anleitungen: [[Safemode Hack]]<br />
<br />
[[Datei:checktool-smh.png|SafeMode-Hack|frame|center]]<br />
<br />
=Files=<br />
Im Abschnitt ''Files'' wird das Dateisystem der Contao-Installation geprüft. Dateien von event. installierten Erweiterungen und selbst erstellte Dateien (z.B. in /templates/ oder /tl_files/) werden nicht berücksichtigt.<br /><br />
Da man Dateien, bei denen alles korrekt ist, zu Beginn ausgeblendet hat, werden im Idealfall keine Dateien angezeigt. Sollten Fehler vorhanden sein, werden diese Dateien angezeigt.<br /><br />
Folgende Fehler können auftreten:<br />
<br />
==Korrupte Dateien==<br />
Korrupt bedeutet, dass die Datei zwar vorhanden ist, aber nicht zur verwendeten Version gehört bzw nicht den korrekten Inhalt hat. Dies kann mehrere Gründe haben:<br />
*Die Datei wurde bei der Installation / einem Update nicht korrekt ersetzt bzw übertragen. (Dies ist in den meisten Fällen der Grund, warum eine Datei korrupt ist.)<br />
*Die Datei wurde absichtlich vom Administrator verändert.<br />
*Die Webseite / der Webserver wurde [[Contao_gehackt|gehackt]].<br />
<br />
Lösung: Die betroffenen Dateien erneut auf den Webserver kopieren und darauf achten, dass die Dateien aus der korrekten Contao-Version stammen. Eine Ausnahme ist eine gehackte Webseite. Hier sind weitere Massnahmen nötig (siehe: [[Contao_gehackt]]).<br />
<br />
[[Datei:checktool-corruptfiles.png|Korrupte Dateien|frame|center]]<br />
<br />
==Fehlende Dateien==<br />
Wie der Name schon sagt, fehlen die aufgelistete Dateien. Die Gründe hierfür ist, dass die aufgelistete Datei bei der Installation / einem Update nicht übertragen worden ist.<br />
<br />
Lösung: Die betroffenen Dateien erneut auf den Webserver kopieren und darauf achten, dass die Dateien aus der korrekten Contao-Version stammen.<br />
<br />
[[Datei:checktool-missingfiles.png|Fehlende Dateien|frame|center]]<br />
<br />
==Dateien mit falschen Besitzrechten==<br />
Bei diesem Fehler handelt es sich um Dateien, welche falsche Besitzrechte aufweisen. Dateien mit zuviele Rechten können ein Sicherheitsrisiko darstellen; Dateien mit zuwenig Rechten können dazu führen, dass das Contao-System nicht korrekt funktioniert. Prinzipiell gilt: So wenig wie möglich, so viel wie nötig.<br /><br />
Ein Grund dafür kann z.B. sein, dass die Besitzrechte bei der Installation / dem Update nicht korrekt gesetzt wurden.<br />
<br />
Lösung: Je nach Zugriffsmöglichkeit auf den Webserver z.B. per FTP oder SSH die Besitzrechte entsprechend ändern. Das Tool zeigt in der Spalte ''CHMOD'' die aktuellen Besitzrechte an; in der Spalte ''Recommended'' die empfohlenen Besitzrechte.<br />
<br />
[[Datei:checktool-wrongpermissions.png|Dateien mit falschen Besitzrechten|frame|center]]<br />
<br />
=Tool entfernen=<br />
Wenn das Systemdiagnosetool nicht mehr benötigt wird, kann die Datei ''contao-check.php'' einfach wieder gelöscht werden. Normalerweise wird von dem Tool eine Datei ''contao-check.txt'' und ein Ordner ''contao-check'' im Root-Verzeichnis angelegt. Auch diese Datei bzw dieser Ordner kann gelöscht werden.</div>BugBusterhttps://de.contaowiki.org/Benutzer:BugBusterBenutzer:BugBuster2015-08-25T19:15:50Z<p>BugBuster: </p>
<hr />
<div>'''Nick:''' <br />
* BugBuster (auch im Contao Forum)<br />
<br />
'''Real Name:''' <br />
* Glen Langer<br />
<br />
'''Arbeit''': <br />
* Angestellter bei T-Systems International GmbH<br />
<br />
'''Tätigkeit:''' <br />
* Technology Consultant, Linux Admin, Firewall Admin, PHP Coder als ZCE<br />
<br />
'''Hobby:'''<br />
* Contao Open Source CMS Modulentwicklung<br />
* Star Trek<br />
* The Big Bang Theory<br />
* Tauchen<br />
* Digitalfotografie<br />
<br />
'''Webseiten:'''<br />
* [http://www.Glen-Langer.de www.Glen-Langer.de]<br />
* [http://Contao.Ninja Contao.Ninja]<br />
* [http://docs.contao.ninja Docs.Contao.Ninja]<br />
* [http://www.ncc1969.de =/\= www.NCC1969.de =/\= ] <br />
<br /><br /><br /><br />
----<br />
<br />
Nur so für mich, Bilder float abschalten im Wiki mit <nowiki><br style="clear: both" /></nowiki><br />
<br />
----</div>BugBusterhttps://de.contaowiki.org/VisitorsVisitors2015-08-25T19:07:18Z<p>BugBuster: </p>
<hr />
<div>[[File:Modul_visitors_fe_all.jpg|right|Besucher]]Ein kleines Modul welches die Zugriffe (Hits) und Besucher (Visits) zählt und zur Anzeige bringt.<br /><br />
Dabei wird in der Anzeige getrennt angezeigt die Zugriffe/Besucher vom aktuellem Tag sowie die jeweilige Gesamtzahl.<br /><br />
Der Zugriffszähler wird, wie der Name schon sagt, bei jedem Zugriff erhöht. Der Besucherzähler zeigt die Zahl der unterschiedlichen IP-Adressen, die innerhalb von 30 Minuten eine oder mehrere Seiten angefordert haben auf dem sich das Modul befindet. (siehe dazu auch [[Visitors#Blockzeit|Blockzeit]])<br />
<br />
{{Hinweis|Diese Seite wird vom Entwickler nicht mehr aktualisiert. <br />
Das aktuelle Handbuch zur Erweiterung Visitors ist hier zu finden: [http://docs.contao.ninja/de/visitors.html docs.contao.ninja]}}<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://www.contao.glen-langer.de<br />
| ExtVersion=2.8.2 / 3.2.1<br />
| Version=ab 2.10<br />
| TLVersion=2.7 - 2.9 (siehe Installationshinweise)<br />
| Depending=[[Bot Detection|Bot Detection]],[[xls_export|Excel 95 Erzeuger (xls_export)]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/visitors.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/visitors/issues<br />
| VCSLink=https://github.com/BugBuster1701/visitors<br />
| Comment=Version für Contao 3.2 verfügbar<br />
}}<br />
[[en:Visitors]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Visitors-Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?28-visitors Forum - Subforen beliebter Third-Party-Erweiterungen (Extensions) - Visitors]<br />
<br /><br />
Fehler und Wünsche können auf GitHub im [https://github.com/BugBuster1701/visitors/issues Tracking System] gemeldet werden.{{msgInfo|'''Hinweis bei gleichzeitiger Nutzung von chShop und Visitors:'''<br>Durch einen Bug in chShop funktionierte Visitors nicht. Festgestellt bei Version 0.1.1 beta1 von chShop. Mittlerweile dort behoben (ohne jedoch die Versionsnummer anzupassen)}}<br />
[http://www.contao-community.de/showthread.php?202-chShop-Integriertes-Bestellsystem-ohne-feste-Artikelverwaltung&p=157260&viewfull=1#post157260 Forum Beitrag zur Lösung]<br />
<br />
=Übersetzungen=<br />
Übersetzungen können auf [https://www.transifex.com/projects/p/contao-visitors/ Transifex] durchgeführt werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao-Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP-Datei [http://www.contao.org/erweiterungsliste/view/visitors.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/visitors angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
( /typolight/install.php bei älteren TYPOlight Installationen )<br /><br /><br />
<span style="color:red">'''''Da das Visitors-Modul abhängig ist von den Modulen "[[Bot Detection|Bot Detection]]" und "[[xls_export|Excel 95 Erzeuger (xls_export)]]", müssen diese bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Hinweis für ältere TYPOlight/Contao-Versionen==<br />
===Contao 2.9===<br />
Nutzer von Contao 2.9.x nutzen bitte Visitors-Modul-Version 2.7.1 ([http://www.contao.org/erweiterungsliste/view/visitors.20070019.de.html Direktlink])<br />
===TYPOlight 2.8===<br />
Nutzer von TYPOlight 2.8.x nutzen bitte Visitors-Modul-Version 1.7.2 ([http://www.contao.org/erweiterungsliste/view/visitors.10070029.de.html Direktlink])<br />
===TYPOlight 2.7===<br />
Nutzer von TYPOlight 2.7.x nutzen bitte Visitors-Modul-Version 1.4.1 ([http://www.contao.org/erweiterungsliste/view/visitors.10040019.de.html Direktlink])<br />
<br /><br /><br />
==Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Visitors_Update_v1_auf_v2|'''Visitors-Update-Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Visitors-Modul bringt 2 Backend- und ein Frontend-Modul mit.<br /><br />
Im Backend gibt es "Besucher" und "Besucher Statistik", für das Frontend ebenfalls "Besucher".<br />
<br />
==Backend==<br />
<br />
===Besucher===<br />
[[Datei:Visitors_de_backend_besucher.jpg]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Visitors_de_backend_besucherstatistik.jpg]]<br />
<br />
zeigt dann im Detail: (Klick aufs Bild für höhere Auflösung)<br />
<gallery widths="240" heights="180" caption="Besucher Statistik"><br />
File:Visitors_de_backend_besucherstatistikdetail.jpg|Besucher Statistik im Detail<br />
File:Visitors_de_backend_besucherstatistikdetailBrowser.jpg|Browser Statistik<br />
File:Visitors_de_backend_besucherstatistikdetailSearchEngine.jpg|Search Engine Referer Statistik<br />
</gallery><br />
<br />
==Frontend==<br />
Für das Frontend werden als Beispiel zwei CSS-Dateien mitgeliefert:<br />
*mod_visitors_fe.css für die normale, zeilenweise Ausgabe<br />
*mod_visitors_fe_horizontal.css für die horizontale Ausgabe<br />
Ab der Version 3 liegen die css Dateien im Unterverzeichnis "css_demo". Zur Verwendung siehe [[Visitors#CSS-Datei|CSS-Datei]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Modul_visitors_fe_all.jpg]]<br />
<br />
===Besucher-Statistik horizontal===<br />
[[Datei:Modul_visitors_fe_all_horizontal.jpg]]<br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Besucher eine neue Besucher-Kategorie an. In dieser dann den Besucherzähler.<br /><br />
Danach legt man ein Frontend-Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default-Angaben. Feinheiten werden [[Visitors#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Besucher-Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Besucher'.<br /><br />
Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br />
[[Datei:Visitors_de_backend_kategorie_neu.jpg]]<br />
<br />
Am Anfang reicht es einen Kategorie-Namen anzugeben, anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Besucherzählers==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neuer Besucherzähler' und dann das Pfeil-Symbol oder auf das Plus im Kopf der Kategorie:<br />
[[Datei:Visitors_de_backend_besucherzaehler_neu.jpg]]<br />
<br />
Nun sind einige Angaben nötig:<br />
* Namen angeben (wird über den Zahlen als Überschrift angezeigt).<br />
* Start-Datum, ist optional, dient nur zur Anzeige im Frontend<br />
* Optional: 'Startwerte für Zähler' eingeben<br />
* Optional: 'Besucher pro Tag' Anzeige aktivieren<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend-Modul==<br />
Ein neues Frontend-Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
* Layout -> Module -> Neues Modul (TYPOlight bis 2.8.x)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Verschiedenes'-'Besucher' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Besucher-Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend-Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
* Layout -> Seitenlayout -> Edit des genutzte Layouts (TYPOlight bis 2.8.x)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend-Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie erwähnt sind 2 CSS-Dateien mitgeliefert für die Darstellung.<br /><br />
Für die ersten Tests sollte die Datei <code>mod_visitors_fe.css</code> aus dem Verzeichnis<br><br />
*Contao 2.x: <code>/system/modules/visitors</code> kopiert werden nach <code>/tl_files</code> <br><br />
*Contao 3.x: <code>/system/modules/visitors/css_demo</code> auf den lokalem PC kopiert werden <br><br />
und dann über das Backend importiert (Themes - CSS - Import) und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind einstellbar in der Kategorie, im Besucherzähler selbst sowie im selbst angelegtem Frontend-Modul. <br />
<br />
==Feinheiten in der Kategorie Definition==<br />
===Zählweise===<br />
Seit Version 1.6.0 kann die Zählweise bei eingeschaltetem Seitencache gewählt werden:<br />
* Last Zählung, serverseitig durch Contao<br />
* Lese Zählung, clientseitig durch Browser<br />
** (nur im Contao cacheModus: Server- und Browsercache / Nur Browsercache)<br />
<br />
Mit dem zweiten Punkt kann damit auch gezählt werden, wenn die Seite im Browsercache liegt und daraus aufgerufen wird.<br />
Die System-Einstellung 'Cache-Modus' wird dabei beachtet.<br />
<br />
{{Anmerkung|Die Anzeige der aktuellen Werte erfolgt aber weiterhin nur wenn die Seite vom Server angefordert wird.}}<br />
<br />
==Feinheiten in der Besucherzähler-Definition==<br />
===Blockzeit===<br />
Die Blockzeit wird in Sekunden angegeben. Nach Zugriffspause dieser Zeit wird ein Zugriff als weiterer Besucher gezählt.<br /><br />
Voreingetragen sind 1800 Sekunden, d.h. 30 Minuten.<br />
<br />
==Feinheiten in der Frontend-Modul-Definition==<br />
===Templates===<br />
Jedem Modul kann per Auswahl ein Template zugeordnet werden. Zur Auswahl stehen 4 Templates.<br />
* mod_visitors_fe_all<br />
** Liefert alle Felder die möglich sind (siehe Beispielbild oben)<br />
* mod_visitors_fe_hits<br />
** Hier wurden die beiden Besucherzeilen entfernt<br />
* mod_visitors_fe_visits<br />
** Hier wurden die beiden Zugriffszeilen entfernt<br />
* mod_visitors_fe_invisible<br />
** Hier wird nichts angezeigt. Dieses Template dient dadurch zur reinen Zählung.<br />
<br />
Es können eigene Templates erstellt werden. Diese müssen als Dateiname anfangen mit 'mod_visitors_fe_' und die Endung '.tpl' (Contao <2.10) bzw. '.xhtml' oder '.html5' haben.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend-Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen online sind.<br />
<br />
===Selbstzählung verhindern===<br />
Es gab einige Ideen, wie man noch verhindern kann, eigene Zugriffe nicht zu zählen. Besonders, wenn man mit dynamischen IPs ankommt.<br />
Hier ist nun eine Möglichkeit umgesetzt, dieses über einen angepassten User Agent String des Browsers zu tun.<br />
<br /><br />
Über: <br />
* Layout -> Themes -> Frontend-Module -> Modul-Name (Contao ab 2.9)<br />
* Layout -> Module -> Modul-Name (TYPOlight bis 2.8.x)<br />
vom angelegtem Besucher-Modul kann im neuem Feld "Keine Zählung bei HTTP_USER_AGENT Teilkennung:" einen String eingegeben werden, dieser sollte eindeutig sein.<br /><br />
Beispiel: CTISOK<br /><br />
Es sind, wozu auch immer, auch mehrere Strings dort möglich, diese dann durch Komma getrennt eingeben.<br /><br />
Im Firefox ergänzt man nun den Agent String wie folgt:<br /><br />
# Tippe '''about:config''' in der Adresszeile ein und drücke ENTER<br />
# Tippe '''general.useragent.extra.firefox''' in der Filter Zeile<br />
# Doppelklick auf die gefunde Zeile<br />
# Hier nun den Beispiel String von oben mit Leerzeichen getrennt anhängen, OK<br />
<br />
z.B. wird so aus "Firefox/3.5.2" nun "Firefox/3.5.2 CTISOK"<br /><br />
<br /><br />
Die Kennung kann man sich dann durch Eingabe von '''about:''' + Enter anzeigen lassen. (letzte Zeile)<br /><br />
<br /><br />
Weitere Browser sind hier erläutert (eng):<br />
[http://www.walkernews.net/2007/07/05/how-to-change-user-agent-string/ walkernews.net - how to change user agent string]<br />
{{Hinweis|Ab Firefox 4 funktioniert das so nicht mehr. Als Alternative gibt es das Add-On [https://addons.mozilla.org/de/firefox/addon/user-agent-switcher/ User-Agent-Switcher]}}<br />
<br />
=Insert-Tags=<br />
Die Insert-Tags werden vom Frontend Modul selbst benutzt. Ein Nutzer benötigt diese nur, wenn das Frontend Modul nicht eingesetzt wird.<br />
==Anzeige==<br />
Seit der Version 1.2.0 gibt es Insert-Tags zum Anzeigen der Werte.<br />
<source lang="text"><br />
{{visitors::katid::name}}<br />
{{visitors::katid::online}}<br />
{{visitors::katid::start}}<br />
{{visitors::katid::totalvisit}}<br />
{{visitors::katid::totalhit}}<br />
{{visitors::katid::todayvisit}}<br />
{{visitors::katid::todayhit}}<br />
{{visitors::katid::averagevisits}}<br />
</source><br />
Seit der Version 1.5.0 und ab TYPOlight 2.8 können die Insert-Tags um den Präfix 'cache_' erweitert werden, damit sind diese dann auch cachesicher.<br />
<source lang="text"><br />
{{cache_visitors::katid::name}}<br />
...<br />
</source><br />
Das Modul zählt und zeigt normalerweise die Werte an. Wer für die Anzeige die Insert-Tags nutzen will, braucht das Modul weiterhin, aber nur zum Zählen. Mittels des Templates mod_visitors_fe_invisible kann es dazu unsichtbar geschaltet werden.<br /><br />
Die "katid" ist die Kategorie-ID, in dem der Zähler angelegt wurde. Zur Ermittlung in der Kategorieübersicht des Moduls mit der Maus über das "i" gehen.<br />
<br />
[[Datei:Visitors_de_backend_kategorie_id.jpg|Besucherzähler Kategorie-ID]]<br />
<br />
Dabei wird als Tooltipp die ID angezeigt.<br /><br />
Ab Version 2.3.1 steht die ID direkt hinter dem Kategorie-Namen.<br /><br />
Bei Kategorie-ID = 1 wäre das dann also beispielsweise:<br /><br />
<source lang="text"><br />
{{visitors::1::online}}<br />
</source><br />
<br />
<br /><br />
<br />
==Zählung==<br />
Eine Alternative für "nur zählen" wäre, den Insert-Tag zu nutzen, den es ab Version 1.5.0 gibt, das Modul selbst verwendet diesen ebenfalls:<br />
<source lang="text"><br />
{{cache_visitors::katid::count}}<br />
</source><br />
Beispiel für Einbau in einen Artikel (für Kategorie-ID = 1):<br />
<source lang="html4strict"><br />
<span style="width:0px;height:0px;">{{cache_visitors::1::count}}</span><br />
</source><br />
<br />
{{Achtung|Dabei muss drauf geachtet werden, dass der Insert-Tag für die Zählung als erstes auf der Seite eingebaut wird, damit die Zählung vor der Ermittlung der Anzeigewerte erfolgt.}}<br />
<br />
<br /><br />
<br />
==Weitere Insert-Tags==<br />
Seit der Version 2.1.0 gibt es Insert-Tags zum Anzeigen der Werte vom Tag an dem die meisten Besucher gezählt wurden.<br />
<source lang="text"><br />
{{visitors::katid::bestday::date}} - Tag (Datum) mit den meisten Besuchern<br />
{{visitors::katid::bestday::visits}} - Anzahl Besucher vom Tag mit den meisten Besuchern<br />
{{visitors::katid::bestday::hits}} - Anzahl Zugriffe vom Tag mit den meisten Besuchern<br />
bzw.<br />
{{cache_visitors::katid::bestday::date}}<br />
{{cache_visitors::katid::bestday::visits}}<br />
{{cache_visitors::katid::bestday::hits}}<br />
</source><br />
Beim "date" Insert-Tag ist noch ein optionaler Parameter möglich, um die Datumsausgabe zu formatieren.(m.d.Y , Y-m-d, etc.)<br /><br />
Als default wird die Systemeinstellung verwendet. Als Trennzeichen muss ein "::" verwendet werden.<br /><br />
Ein komplettes Beispiel (hier mit Kategorie 1):<br />
<source lang="text"><br />
BestDay: {{visitors::1::bestday::date::j. F Y}} mit {{visitors::1::bestday::visits}} Besuchern (bei {{visitors::1::bestday::hits}} Hits)<br />
</source><br />
ergibt:<br />
BestDay: 31. August 2010 mit 25 Besuchern (bei 123 Hits)<br />
<br />
<br /><br />
<br />
=Besonderheiten=<br />
==Keine Zählung==<br />
Es wird kein Frontend-Aufruf gezählt, wenn man dabei gleichzeitig im Backend angemeldet ist.<br /><br />
Es muss ein Frontend Modul angelegt und eingebunden werden, bzw. als Alternative der Insert-Tag für die Zählung (nur für Profis), sonst kann natürlich nicht gezählt werden.<br />
<br /><br />
<br />
==Besucher pro Tag: Ø = 0==<br />
Der Durschnittswert pro Tag wird pro vollständigem Kalendertag berechnet.<br /><br />
Hat man nun nur von einem Tag vorher oder gar nur vom aktuellem Tag eine Zählung, kann kein sinnvoller Wert berechnet werden.<br /><br />
(Durschnitt = Anzahl Besucher)<br /><br />
In diesen Fällen wird "0" angezeigt.<br />
<br /><br />
<br />
==Bot Detection abschalten==<br />
Wer die Zugriffe von Bots und Suchmaschinen mitzählen möchte, kann die Bot Detection abschalten. Das geht allerdings nicht über das Backend, sondern muss über die localconfig.php passieren.<br />
{{Achtung|Das gilt dann für alle Visitors-Module, falls mehrere Frontend Module angelegt wurden!}}<br />
Folgender Eintrag ans Ende der localconfig.php (nach: ### INSTALL SCRIPT STOP ### ) bewirkt das Ausschalten:<br /><br />
<source lang="php"><br />
$GLOBALS['TL_CONFIG']['mod_visitors_bot_check'] = false;<br />
</source><br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz. Im Gegensatz zu den meisten anderen Besucherstatistik-Tools, speichert Visitors nicht die Rohdaten und wertet diese später aus. Die notwendigen Auswertungen werden sofort ausgeführt. Gespeichert werden also die fertigen Statistik Daten, mit Ausnahme der IP-Adresse, siehe dazu die Hinweise in den weiteren Kapiteln.<br />
Somit ist das Ziel der Datenvermeidung und Datenminimierung bestmöglich erreicht.<br />
==Datenerfassung==<br />
===IP-Adresse===<br />
Zur Erkennung von unterschiedlichen Besuchern wird ausschließlich die IP-Adresse genommen, kein JavaScript, keine Cookies.<br />
===Browser-Agent und Referrer===<br />
Für zusätzliche Statistiken wird der Browser-Agent ausgelesen und der Referrer sofern vorhanden. Beides wird unabhängig von der IP-Adresse getrennt gespeichert und kann somit auch nicht in Verbindung gebracht werden. (reine Zählung)<br />
==Datenspeicherung==<br />
===IP-Adresse===<br />
Gespeichert wird nicht die IP-Adresse des Besuchers. Mit Ausnahme zur Erkennung von Bots/Crawler/Spider wird die IP-Adresse auch nicht zu weiteren Analysezwecken verwendet. Aus der IP-Adresse und weiteren internen Daten wird ein Pseudonym generiert in Form eines Hashwertes. Ein Rückrechnen ist denkbar, aber nur mit erheblichem Aufwand. Der Hashwert wird mit keiner anderen statistischen Auswertung in Verbindung gebracht.<br />
<br />
===Browser-Agent und Referrer===<br />
Für den Browser-Agent werden die Kombinationen aus Browser,Sprache,OS mit einem Zählstand gespeichert, nicht der komplette Agent String. <br />
Beim Referrer wird die URL gespeichert mit Zählstand und Zeitstempel des letzten Auftretens, ohne Verbindung zur IP-Adresse oder Browser-Agent.<br />
==Datenhaltung==<br />
Die Hashwerte zur Erkennung von unterschiedlichen Besuchern werden bei jedem Aufruf geprüft, zeitlich abgelaufende werden dabei gelöscht. Haltezeit entspricht dabei der Blockzeit, Default-Wert ist 1800 Sekunden, d.h. 30 Minuten.<br />
Referrer Werte werden je nach Art derzeit nach 90 bzw. 120 Tagen gelöscht.<br />
<br />
Die Anzahl der Besucher/Zugriffe je Tag wird dauerhaft gespeichert, daraus werden die weiteren Anzeigen generiert. Diese Speicherung kann über das Backend gelöscht werden, der Zähler fängt dann wieder bei 0 an.<br />
<br />
<br /><br /><br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 12:24, 22. Nov. 2011 (CET)</div>BugBusterhttps://de.contaowiki.org/BannerBanner2015-08-25T18:59:05Z<p>BugBuster: </p>
<hr />
<div>Ein kleines Banner Modul mit einer einfachen Form der Gewichtung über Prioritäten.<br /><br />
Im Backend Bereich ist eine Bannerstatistik integriert im System Menü. Die Statistik wird erst sichtbar, wenn mindestens ein Banner angezeigt wurde.<br /><br />
<br /><br />
Eine ReKlick Sperre ist integriert (5 Minuten), die Weiterleitung funktioniert in der Zeitspanne, es wird aber nicht gezählt.<br /><br />
Ebenso werden die Views innerhalb einer Zeitspanne von 10 Minuten nicht neu gezählt falls derselbe Banner angezeigt wird.<br /><br />
Die Zeitspanne zum Blocken der View Zählung kann geändert werden.<br /><br />
<br /><br />
Durch die Nutzung vom Modul "[[Bot Detection|Bot Detection]]" werden Zugriffe von Bots und Suchmaschinen nicht gezählt.<br /><br />
<br /><br />
Im Modulverzeichnis in der Datei '''mod_banner_fe.css''' sind Beispiel CSS Angaben vorhanden. Diese können im eigenem Layout eingearbeitet werden oder man importiert die Datei und aktiviert diese im Layout.<br />
<br />
{{Hinweis|Diese Seite wird vom Entwickler nicht mehr aktualisiert. <br />
Das aktuelle Handbuch zur Erweiterung Banner ist hier zu finden: [http://docs.contao.ninja/de/banner.html docs.contao.ninja]}}<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=3.5.0<br />
| Version=ab 2.9<br />
| TLVersion=2.6.2 - 2.8.4 (siehe Installationshinweise)<br />
| Depending=[[Bot Detection|Bot Detection]],[[xls_export|Excel 95 Erzeuger (xls_export)]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/banner.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/banner/issues<br />
| VCSLink=https://github.com/BugBuster1701/banner<br />
| Comment=Version für Contao 3.4 verfügbar<br />
}}<br />
[[en:Banner]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Banner Modul werden im Forum beantwortet: [http://www.contao-community.de/forumdisplay.php?24-banner Forum - Banner Subforum]<br />
<br /><br />
Fehler und Wünsche können im [https://github.com/BugBuster1701/banner/issues Tracking System] gemeldet werden.<br />
<br />
=Übersetzungen=<br />
Übersetzungen können auf [https://www.transifex.com/projects/p/contao-banner/ Transifex] durchgeführt werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository bzw. die Paketverwaltung (composer) im Backend der Contao Installation.<br /><br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP Datei [http://www.contao.org/erweiterungsliste/view/banner.de.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/bannner angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php aufrufen, um ein eventuelles Update der Datenbank durchführen.<br /><br />
<br /><br />
<span style="color:red">'''''Da das Banner Modul abhängig ist von den Modulen "[[Bot Detection|Bot Detection]]" und "[[xls_export|Excel 95 Erzeuger (xls_export)]]", müssen diese bei der manuellen Installation mit installiert werden.'''''</span><br />
<br /><br />
==Hinweis für ältere TYPOlight Versionen==<br />
===TYPOlight 2.8===<br />
Nutzer von TYPOlight 2.8.x nutzen bitte Banner Modul Version 1.11.2 ([http://www.contao.org/erweiterungsliste/view/banner.10110029.de.html Direktlink])<br />
===TYPOlight 2.7===<br />
Nutzer von TYPOlight 2.7.x nutzen bitte Banner Modul Version 1.9.2 ([http://www.contao.org/erweiterungsliste/view/banner.10090029.de.html Direktlink])<br />
===TYPOlight 2.6===<br />
Nutzer von TYPOlight 2.6.x nutzen bitte Banner Modul Version 1.6.5 ([http://www.contao.org/erweiterungsliste/view/banner.10060059.de.html Direktlink])<br />
<br /><br />
<br />
=Installation als Update=<br />
Ein Update erfolgt identisch der Installation.<br /><br /><br />
'''Achtung beim Update von Banner Version < 1.10.0 auf aktuelle Version:'''<br /><br />
In der CSS Datei mod_banner_fe.css die als Beispiel mitgeliefert wird, hat sich die Gross- Kleinschreibung geändert.<br /><br />
Wer diese Datei importiert hat oder selber das Design erstellt hat, muss die Klasse ".mod_Banner" ändern in ".mod_banner".<br /><br />
<br />
==Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Banner_Update_v1_auf_v2|'''Banner Update Version 1 auf Version 2''']]<br />
<br />
=Übersicht=<br />
Das Banner Modul bringt 2 Backend- und ein Frontend-Modul mit.<br /><br />
Im Backend gibt es "Banner" und "Bannerstatistik", für das Frontend ebenfalls "Banner".<br />
<br />
==Backend==<br />
<br />
===Banner===<br />
[[Datei:Banner_de_backend_banner.jpg|Backend-Module Banner]]<br />
<br />
===Banner Statistik===<br />
[[Datei:Banner_de_backend_bannerstatistik.jpg|Backend-Modul Bannerstatistik]]<br />
<br />
==Frontend==<br />
<br />
===Anzeige eines Banners===<br />
[[Datei:Banner_de_frontend_ein_banner.jpg|Frontend-Modul Banner]]<br />
# Modul Überschrift<br />
# Banner Bild<br />
# Banner Kommentar<br />
# Banner Name<br />
<br />
Genaueres dazu siehe bei "[[Banner#Erste_Schritte|Erste Schritte]]" oder "[[Banner#Feinheiten|Feinheiten]]".<br />
<br />
===Anzeige alle Banner===<br />
Mit 'alle Banner' ist hier gemeint, alle Banner der gewählten Kategorie.<br /><br />
[[Datei:Banner_de_frontend_alle_banner.jpg|Frontend alle Banner|left]]<br />
In diesem Beispiel sind 3 Banner definiert worden, <br /><br />
# einmal Grafik<br />
# einmal Flash <br />
# einmal ein Text Banner.<br /><br /><br />
Genaueres dazu siehe bei "[[Banner#Erste_Schritte|Erste Schritte]]" oder "[[Banner#Feinheiten|Feinheiten]]".<br />
<br style="clear: both" /><br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Banner eine neue Banner Kategorie an. In dieser dann die Banner.<br /><br />
Danach legt man ein Frontend Modul an und baut es in das Layout ein der Seite.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default Angaben. Feinheiten werden [[Banner#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Banner Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Banner'. Im Hauptbereich dann auf den Button 'Neue Kategorie'.<br />
[[Datei:Banner_de_backend_kategorie_neu.jpg|Neue Banner Kategorie anlegen]]<br />
<br />
Am Anfang reicht es einen Kategorie Namen anzugeben, anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen der Banner==<br />
Aus der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br ><br />
Dort entweder auf 'Banner neu' und dann das Pfeil Symbol oder auf das Plus im Kopf der Kategorie:<br /><br />
[[Datei:Banner_de_backend_banner_neu.jpg|Einen neuen Banner anlegen]]<br />
<br />
Als erstes muss nun die Banner Quelle gewählt werden:<br />
* interner Banner (Grafik / Flash Dateien liegen auf dem Server)<br />
* externer Banner (Grafik / Flash Dateien werden über URL eingebunden)<br />
* Text Banner<br />
<br><br />
Bei der Auswahl kommen die entsprechenden passenden Formularfelder dafür.<br />
<br />
===Grafik Banner===<br />
# Banner Name<br />
#* Der Banner Name wird in der Banner Übersicht angezeigt und im mitgelieferten Template unterhalb der Banner Grafik angezeigt.<br />
# Banner Gewichtung<br />
#* Damit kann die Häufigkeit der Anzeige gesteuert werden. Je höher die Gewichtung desto häufiger wird dieser Banner angezeigt.<br />
# Banner Ziel URL<br />
#* Die URL des Zieles bei Klick auf die Banner Grafik. Die Eingabe muss inklusive http:// erfolgen. <br />
#* Kein Pflichtfeld. <br />
#* Ohne URL wird die Banner Grafik ohne Verlinkung angezeigt.<br />
#* Alternative kann auch ein internes Ziel ausgewählt werden (Banner Ziel Seite )<br />
# Banner Datei<br />
#* Hier kann nun die Datei ausgewählt werden.<br />
# Banner Breite und Höhe sowie der Skalierungsmodus<br />
#* Um die Bannergröße anzupassen, kann man hier die Bannerbreite und/oder die Bannerhöhe in Pixel angeben.<br />
#* '''ACHTUNG''': Animierte GIFs werden bei Größen-Angaben durch die GD-Neuberechnung leider zum Standbild.<br />
# Banner Kommentar<br />
#* Die erste Zeile wird als "title" Tag im HTML Quellcode eingebaut und angezeigt, wenn man den Mauszeiger über die Banner Grafik bewegt.<br />
# Domain Filter<br />
#* Mit Angabe einer Domain, wird dieser Banner nur für diese Domain genutzt. <br />
# CSS-ID/Klasse<br />
#* ID und beliebig viele Klassen für das Wrapper Element. Ein Präfix "banner_" wird automatisch hinzugefügt.<br />
# Veröffentlicht<br />
#* Solange diese Option nicht aktiviert ist, wird dieser Banner nicht für die Anzeige berücksichtigt.<br />
# Begrenzung der Views und Klicks<br />
#* Definition maximale View und/oder Klicks<br />
<br />
===Flash Banner===<br />
# Banner Name<br />
#* Der Banner Name wird nur in der Banner Übersicht angezeigt.<br />
# Banner Gewichtung<br />
#* Damit kann die Häufigkeit der Anzeige gesteuert werden. Je höher die Gewichtung desto häufiger wird dieser Banner angezeigt.<br />
# Banner Ziel URL<br />
#* Die URL des Zieles bei Klick auf den Flash Banner. Die Eingabe muss inklusive http:// erfolgen. <br />
#* Kein Pflichtfeld. <br />
#* Ohne URL wird der Flash Banner ohne Verlinkung angezeigt.<br />
#* Alternative kann auch ein internes Ziel ausgewählt werden (Banner Ziel Seite )<br />
# Banner Datei<br />
#* Hier kann nun die Datei ausgewählt werden.<br />
# Banner Breite und Höhe<br />
#* Um die Bannergröße anzupassen, kann man hier die Bannerbreite und/oder die Bannerhöhe in Pixel angeben.<br />
# Banner Kommentar<br />
#* Eingabe nicht nötig, wird im Frontend nicht verwendet,<br />
# Domain Filter<br />
#* Mit Angabe einer Domain, wird dieser Banner nur für diese Domain genutzt. <br />
# CSS-ID/Klasse<br />
#* ID und beliebig viele Klassen für das Wrapper Element. Ein Präfix "banner_" wird automatisch hinzugefügt.<br />
# Veröffentlicht<br />
#* Solange diese Option nicht aktiviert ist, wird dieser Banner nicht für die Anzeige berücksichtigt.<br />
# Begrenzung der Views und Klicks<br />
#* Definition maximale View und/oder Klicks<br />
Ein Flash Fallback auf eine Bilddatei ist möglich, siehe im Abschnitt [[Banner#Flash_Fallback_Bild|Feinheiten Flash Fallback]]<br />
<br />
===Text Banner===<br />
# Banner Name<br />
#* Der Banner Name wird in der Banner Übersicht angezeigt und im mitgelieferten Template als Überschrift, die gleichzeitig mit der Ziel URL verlinkt wird.<br />
# Banner Gewichtung<br />
#* Damit kann die Häufigkeit der Anzeige gesteuert werden. Je höher die Gewichtung desto häufiger wird dieser Banner angezeigt.<br />
# Banner Ziel URL<br />
#* Die URL des Zieles bei Klick. Die Eingabe muss inklusive http:// erfolgen. Kein Pflichtfeld. <br />
#* Ohne URL wird der Banner ohne Verlinkung angezeigt. <br />
#* Im mitgelieferten Template wird nur die Domain als Kurzform angezeigt. (3. Zeile, siehe Bild weiter oben)<br />
# Banner Kommentar<br />
#* Dies wird die Textzeile. (2. Zeile, siehe Bild weiter oben)<br />
# Domain Filter<br />
#* Mit Angabe einer Domain, wird dieser Banner nur für diese Domain genutzt. <br />
# CSS-ID/Klasse<br />
#* ID und beliebig viele Klassen für das Wrapper Element. Ein Präfix "banner_" wird automatisch hinzugefügt.<br />
# Veröffentlicht<br />
#* Solange diese Option nicht aktiviert ist, wird dieser Banner nicht für die Anzeige berücksichtigt.<br />
# Begrenzung der Views und Klicks<br />
#* Definition maximale View und/oder Klicks<br />
<br />
==Frontend Modul==<br />
Ein neues Frontend Modul wird angelegt über:<br /><br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
* Layout -> Module -> Neues Modul (TYPOlight bis 2.8.x)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel eingeben''', erst dann bei Modultyp: ''Verschiedenes -> Banner'' auswählen.<br />
Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Banner Kategorien' nun die vorher angelegt Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend Modul noch im Layout eingebunden werden:<br /><br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
* Layout -> Seitenlayout -> Edit des genutzte Layouts (TYPOlight bis 2.8.x)<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Für die ersten Tests sollte die mitgelieferte Datei mod_banner_fe.css aus dem Verzeichnis /system/modules/banner/assets/ über das Backend importiert und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind einstellbar in der Kategorie, im Banner selbst sowie im selbst angelegtem Frontend Modul.<br />
<br />
==Feinheiten in der Kategorie Definition==<br />
===Anzeige Definition===<br />
* Alle Banner anzeigen<br />
Wenn diese Option gewählt ist, werden alle aktiven Banner der Kategorie angezeigt im Frontend, statt nur eines.<br /><br />
Zusätzlich kann dann noch ausgewählt werden:<br />
* Anzahl limitieren<br />
Hier kann die Anzahl noch begrenzt werden. Default ist 0: alle Banner anzeigen, sonst die maximale Anzahl der Banner die angezeigt werden sollen.<br />
* Zufällige Reihenfolge<br />
Nun werden die Banner zusätzlich in zufälliger Reihenfolge angezeigt.<br />
===Anzeige der Statistik===<br />
* Schutz der Statistik<br />
Den Inhalt der Bannerstatistik kann damit nur bestimmten Gruppen im Backend angezeigt werden. Administratoren haben uneingeschränkten Zugriff auf alle Bannerstatistiken.<br />
<br />
==Feinheiten in der Banner Definition==<br />
===Flash Fallback Bild===<br />
Hat ein Browser kein Flash-Plugin installiert oder ist JavaScript inaktiv oder ist bedingt durch die Hardware kein Flash möglich, kann ab Version 2.2.0 ein Bild statt dessen angezeigt werden. Es wird bei einer lokalen (internen) Flash Datei im selben Pfad eine Bilddatei gesucht mit dem selben Namen, aber mit der Endung jpg, png oder gif.<br /><br />
Beispiel: für "meinflash.swf" wäre ein passendes Fallback Image: "meinflash.jpg"<br />
<br /><br />
Ist nun ein solches Ersatzbild zu finden, wird das Bild statt dessen angezeigt. Es wird dabei auf die definierten Abmaße der Flashdatei umgerechnet falls nötig.<br />
<br />
===Begrenzung mittels Start- Stop- Datumsangaben und Uhrzeit===<br />
* Anzeigen ab<br />
** Wenn man hier Datum mit Uhrzeit erfasst, wird dieser Banner erst ab diesem Zeitpunkt angezeigt.<br />Die gesetzte Uhrzeit kann überschrieben werden. Beispiel: 24.12.2007 20:15<br />
* Anzeigen bis<br />
** Wenn man hier Datum mit Uhrzeit erfasst, wird dieser Banner nur bis zu diesem Zeitpunkt angezeigt.<br />Die gesetzte Uhrzeit kann überschrieben werden. Beispiel: 24.12.2007 23:59<br />
<br />
===Begrenzung der Views / Klicks===<br />
* Begrenzung der Views und Klicks<br />
Wenn man diese Option wählt, können in zwei weiteren Feldern eine maximale View Anzahl und/oder maximale Klick Anzahl definiert werden.<br />
* Begrenzung der View Anzahl<br />
** Wenn man hier eine Zahl eingibt, wird dieser Banner nach dieser Anzahl von Views nicht mehr angezeigt.<br />Die Option "Begrenzung der Views und Klicks" muss dabei aktiviert bleiben.<br />
* Begrenzung der Klick Anzahl<br />
** Wenn Sie hier eine Zahl eingeben, wird dieser Banner nach dieser Anzahl von Klicks nicht mehr angezeigt.<br />Die Option "Begrenzung der Views und Klicks" muss dabei aktiviert bleiben.<br />
<br />
===Domain Filter===<br />
Wird hier eine Domain eingeben, wird dieser Banner nur für diese Domain genutzt. Ohne Angabe wird dieser Banner für alle Domains genutzt.<br />Beispiel: '''meinedomain.de'''<br /><br />
<br /><br />
Dieser Banner wird angezeigt, wenn die Domain übereinstimmt, aber auch bei Teilübereinstimmung von rechts beginnend. Damit bei diesem Beispiel auch der Zugriff über "'''sub.meinedomain.de'''". Ein Eintrag in "Seitenstruktur" - "Domain Name" ist nicht notwendig für die Filterung.<br />
<br />
==Feinheiten in der Frontend Modul Definition==<br />
<br />
===Erster Banner für neue Besucher===<br />
Ist diese Option aktiviert, wird für jeden neuen Besucher zunächst der erste veröffentlichte Banner in der Kategorie angezeigt. Danach erfolgt die Auswahl wieder nach Zufall. Somit kann eine Art Wiedererkennung erreicht werden.<br />
<br />
===Templates===<br />
Jedem Frontend Modul kann per Auswahl ein Template zugeordnet werden. Zur Auswahl stehen 2 Templates. <br /><br />
* mod_banner_list_all<br />
** Liefert alle Felder die möglich sind<br />
* mod_banner_list_min<br />
** Hier sind die Überschrift und der Name (unter dem Bild) entfernt worden, es wird also nur das Banner selbst angezeigt.<br />
<br />
Beide Templates unterstützen Bild, Flash und Textbanner.<br /><br />
Es können eigene Templates erstellt werden. Diese müssen als Dateiname anfangen mit "mod_banner_list_" und die Endung ".tpl" haben (Contao 2.9 und älter) bzw. ".xhmtl" / ".html5" (ab Contao 2.10). Beispiel: "mod_banner_list_special.xhtml"<br />
<br />
Am besten legt man sich über das Backend eine Kopie eines der Templates "mod_banner_list_..." an und nennt es dabei um, z.B. in "mod_banner_list_special" (die Endung wird automatisch angehangen, so wie beim Original)<br />
<br />
{{Hinweis|In Banner Version 1.x ist diese Auswahl noch im Bereich der Banner Kategorie möglich.}}<br />
<br /><br />
<br />
===Selbstzählung verhindern===<br />
Es gab einige Ideen, wie man noch verhindern kann, eigene Zugriffe nicht zu zählen. Besonders, wenn man mit dynamischen IPs ankommt.<br />
Hier ist nun eine Möglichkeit umgesetzt, dieses über einen angepassten User Agent String des Browsers zu tun.<br />
<br /><br /><br />
Über: <br />
* Layout -> Themes -> Frontend Module -> Modul Name (Contao ab 2.9)<br />
* Layout -> Module -> Modul Name (TYPOlight bis 2.8.x)<br />
vom angelegtem Banner Modul kann im neuem Feld "Keine Zählung bei HTTP_USER_AGENT Teilkennung:" einen String eingegeben werden, dieser sollte eindeutig sein.<br /><br />
Beispiel: CTISOK<br /><br />
Es sind, wozu auch immer, auch mehrere Strings dort möglich, diese dann durch Komma getrennt eingeben.<br /><br /><br />
Im aktuellem Firefox seine Agent Kennung zu ändern geht das am besten mit einem Add-on wie "User Agent Switcher"<br /><br />
Dort kopiert man sich seine aktuelle Agent Kennung rein und ändert z.B. "Firefox/35.0.1" zu "Firefox/35.0.1 CTISOK" und aktiviert diese.<br />
<br /><br />
<br />
=Tutorials=<br />
==Bot Detection abschalten==<br />
Wer die Zugriffe von Bots und Suchmaschinen auf die Banner mitzählen möchte, kann die Bot Detection abschalten. Das geht allerdings nicht über das Backend sondern muss über die localconfig.php passieren.<br />
{{Achtung|Das gilt dann für alle Banner Module falls mehrere Frontend Module angelegt wurden!}}<br />
Folgender Eintrag ans Ende der localconfig.php (nach: ### INSTALL SCRIPT STOP ### ) bewirkt das Ausschalten:<br /><br />
<source lang="php"><br />
$GLOBALS['TL_CONFIG']['mod_banner_bot_check'] = false;<br />
</source><br />
<br />
<br /><br />
<br />
==Banner Block Time für Views ändern==<br />
Wie ganz am Anfang geschrieben, wird ein Banner der mehrmals innerhalb von 10 Minuten (C3: 5 Minuten) angezeigt wird, nur einmal gezählt.<br /> <br />
Durch einen Eintrag in der localconfig.php kann man das ändern, Angaben dort erfolgen in Minuten, dabei muss die Zahl > 0 sein, sonst wird automatisch wieder der Defaultwert (10) genommen.<br />
{{Achtung|Das gilt dann für alle Banner Module falls mehrere Frontend Module angelegt wurden!}}<br />
Folgender Eintrag ans Ende der localconfig.php (nach: ### INSTALL SCRIPT STOP ### ) bewirkt eine Änderung auf 5 Minuten:<br><br />
<source lang="php"><br />
$GLOBALS['TL_CONFIG']['mod_banner_block_time'] = 5;<br />
</source><br />
<br /><br />
<br />
==Sonderfall: Keine aktiven Banner und kein Standard Banner definiert==<br />
Wenn in diesem Fall auch "Ausblenden wenn leer" nicht aktiviert ist, wurde bisher ein leeres Image Tag generiert was vom IE als Broken Image dargestellt wurde. Ab Version 1.11.2 wird nun ein DIV-Tag mit class="banner_empty" generiert:<br />
<source lang="html4strict"><br />
<div class="mod_banner"><br />
<div class="banner_empty"><br />
<!-- no banner, no default banner --><br />
</div><br />
</div><br />
</source><br />
Mittels css kann nun erreicht werden, dass (in diesem Beispiel) die Höhe erhalten bleibt und dadurch das Layout der Seite nicht verändert wird:<br />
<source lang="css"><br />
.mod_banner .banner_empty {<br />
height:90px;<br />
}<br />
</source><br />
Der dabei erzeugte Text kann überschrieben werden, durch setzen in langconfig.php, hier nun als Beispiel ein Leertext:<br />
<source lang="php"><br />
$GLOBALS['TL_LANG']['MSC']['tl_banner']['noBanner'] = '';<br />
</source><br />
<br />
<br /><br />
==Sonderfall: mehrere Banner Module pro Seite==<br />
Hier einige Hinweise und Tipps für bekannte Anwendungsszenarien und deren Besonderheiten.<br />
<br />
===Eine Kategorie - Zwei Frontend Module auf einer Seite===<br />
In der aktuellen Version gibt es die Möglichkeit alle Banner einer Kategorie anzuzeigen.<br /><br />
Die alte Variante mehrere Banner auf einer Webseite anzeigen zu können war, mehrere Frontend Module anzulegen und in die Webseite einzubinden. Vom Modul wird dabei verhindert, dass ein Banner nicht mehrmals angezeigt wird. <br /><br /><br />
Nun wurde davon ausgegangen, dass alle untereinander angezeigt werden, wodurch es Sinn machte, die Modul Überschrift nur einmal anzuzeigen.<br /><br />
Will man nun aber bei allen Banner Frontend Modulen die Überschrift anzeigen lassen, weil diese z.B. auf der Seite verteilt sind, muss hierzu eine kleine [[Templates_bearbeiten|Anpassung am Template]] vorgenommen werden. Dazu legt man über das Backend eine Kopie des Templates "mod_banner_list_all" an und nennt es dabei um, z.B. in "mod_banner_list_special" (die Endung wird automatisch angehangen, so wie beim Original).<br /><br />
Dort ändert man nun die dritte Zeile wie folgt:<br /><br />
Original:<br /><br />
<source lang="php"> <br />
<?php if (($this->headline) && (!$this->headline_stop)): ?><br />
</source><br />
Spezial:<br /><br />
<source lang="php"><br />
<?php if ($this->headline) : ?><br />
</source><br />
Nun die Banner Frontend Module editieren und das neue Template auswählen.<br /><br />
Fertig.<br />
<br /><br />
Das gilt natürlich auch für mehr als zwei Frontend Module.<br />
<br /><br />
<br />
===Zwei Kategorien - Zwei Frontend Module auf einer Seite===<br />
Hier hat jedes Frontend Modul seine eigene Kategorie. Auch hier wird aber trotzdem nur beim ersten Modul die Überschrift angezeigt aus den selben Gründen wie im Abschnitt zuvor.<br /><br />
Falls in diesem Szenario auch alle Modul Überschriften angezeigt werden sollen, ist die Lösung dieselbe.<br /><br /><br />
Das gilt natürlich auch für mehr als zwei Kategorien und Frontend Module.<br />
<br /><br />
<br /><br /><br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 00:33, 17. Feb. 2015 (CET)</div>BugBusterhttps://de.contaowiki.org/EasyupdateEasyupdate2015-08-01T14:34:22Z<p>BugBuster: /* Weiterführende Links */</p>
<hr />
<div>{{stub}}<br />
<br />
'''easyUpdate3'''<br />
<br />
<br />
'''Tickets / Bugs'''<br />
https://github.com/BugBuster1701/privat-easyupdate3.git<br />
<br />
{{AppliesTo<br />
|Version=3.2.14<br />
}}<br />
<br />
{{ExtInfo<br />
| Dev=Lutz Schoening und Glen Larger<br />
| ExtVersion=3.0.1 stable<br />
| Version=3.0.6 - 3.3.1<br />
| ERLink=https://contao.org/de/extension-list/view/easyupdate3.de.html<br />
}}<br />
[[Kategorie:Installation_und_Updates]]<br />
[[Kategorie:Extensions]]<br />
<br />
== Was ist easyUpdate3? ==<br />
easyUpdate3 ist eine Erweiterung um Contao3 mit speziellen ZIP-Dateien aus dem Backend heraus zu aktualisieren<br />
<br />
<br />
<br />
== Funktionsweise und Erläuterungen ==<br />
<br />
=== easyUpdate3 installieren ===<br />
<br />
Nach der normalen Installation unter Contao erscheint im Backend ein neuer Menüeintrag, links unter System.<br />
<br />
[[Datei:Easyupdate_install_0040.png|Installation von easyUpdate, Schritt 1]]<br />
<br />
<br />
=== Sicherheitshinweise ===<br />
<br />
Folgend der Sicherheitshinweis des Autors von "easyUpdate3". <br />
{{Achtung|Hinweistext nach der easyUpdate3 Installation:<br />
Es gibt keine 100%-ige Sicherheit, dass alles einwandfrei funktioniert. Seien Sie sich also bewusst, was Sie tun!<br />
Machen Sie bei der ersten Verwendung dieses Tools ruhig eine zusätzliche Sicherung der Datenbank.<br />
Das Tool greift auf das Dateisystem zu, das kann zu DATENVERLUST führen!<br />
Alles was Sie machen, tun Sie auf eigene Gefahr.}}<br />
Das ist ist sehr guter und richtiger Hinweis, sollte jedoch, beim Einhalten dieser Vorgehensweise, den Anwender nicht Abschrecken "easyUpdate3" zu verwenden<br />
<br />
=== Kompatibilität ===<br />
<br />
*Getestete und funktionierende Vorgänge:<br />
Getestet wurde eine Installation bis zur Contao Version 3.0.1. ( in der hier dargestellten Fassung auch bis 3.2.14 )<br />
<br />
3.0.6 ====> 3.3.1<br />
<br />
<br />
*Getestete und fehlerhafte Vorgänge:<br />
<br />
2.x.x ====> 2.x.x ( Nicht mit Contao 2.x möglich! )<br />
<br />
<br />
=== Update vorbereiten - ZIP Dateien Downloaden und Ablegen ===<br />
<br />
*Download der richtigen ZIP-Dateien<br />
<br />
Die entsprechenden ZIP-Dateien finden sich unter folgendem Link:<br />
[http://ea3server.contao.ninja/ Webseite von Glen Langer]<br />
<br />
Nach dem Download der ZIP-Dateien werden diese über die Dateiverwaltung im Verzeichnis "easyupdate3" abgelegt.<br />
<br />
[[Datei:Easyupdate setfolder.png|Backend-Ablage im Verzeichnis]]<br />
<br />
=== Update durchführen ===<br />
<br />
*Auswahl der Zip-Datei<br />
<br />
Durch Klick auf den Menüpunkt "Easyupdate" wird folgendes Dialogfeld angezeigt.<br />
<br />
[[Datei:Easyupdate select file.png|Auswahl der ZIP-Datei]]<br />
<br />
{{Hinweis| Wenn eine Versionsnummer X.X.X erscheint, dann ist wahrscheinlich die ZIP-Datei beschädigt}}<br />
<br />
Nach Auswahl der ZIP-Datei wird mitgeteilt welche Dateien nicht im folgenden Update aktualisiert werden<br />
<br />
[[Datei:Easyupdate selectfiles noupdate.png|Anzeige der Dateien die nicht aktualisiert werden]]<br />
<br />
<br />
Im weiteren Verlauf werden diverse Dialoggrafiken dargestellt, diese werden jeweils mit der Schaltfläche "Nächsten Schritt ausführen" bestätigt.<br />
<br />
[[Datei:Easyupdate changelog view.png|Anzeige des Changelog zwischen den Versionen]]<br />
<br />
[[Datei:Easyupdate data contant view.png|Anzeige der Inhalte der Archivdatei]]<br />
<br />
[[Datei:Easyupdate save data.png|Anzeige der Dateien die gesichert werden]]<br />
<br />
<br />
=== Update überprüfen - Install-Tool ===<br />
<br />
<br />
<br />
== Autor der Erweiterung eaysupdate3 ==<br />
<br />
Glen Larger [[Benutzer:BugBuster|BugBuster]]<br />
<br />
== Weiterführende Links ==<br />
<br />
[https://contao.org/de/extension-list/view/easyupdate3.de.html easyUpdate3 in der Erweiterungsliste]<br />
<br />
[http://contao.ninja Webseite von BugBuster]<br />
<br />
[https://community.contao.org/de/showthread.php?1607-easyUpdate-Updates-noch-einfacher&highlight=easyupdate easyUpdate im Contao-Forum]</div>BugBusterhttps://de.contaowiki.org/EasyupdateEasyupdate2015-08-01T14:33:13Z<p>BugBuster: /* Update vorbereiten - ZIP Dateien Downloaden und Ablegen */</p>
<hr />
<div>{{stub}}<br />
<br />
'''easyUpdate3'''<br />
<br />
<br />
'''Tickets / Bugs'''<br />
https://github.com/BugBuster1701/privat-easyupdate3.git<br />
<br />
{{AppliesTo<br />
|Version=3.2.14<br />
}}<br />
<br />
{{ExtInfo<br />
| Dev=Lutz Schoening und Glen Larger<br />
| ExtVersion=3.0.1 stable<br />
| Version=3.0.6 - 3.3.1<br />
| ERLink=https://contao.org/de/extension-list/view/easyupdate3.de.html<br />
}}<br />
[[Kategorie:Installation_und_Updates]]<br />
[[Kategorie:Extensions]]<br />
<br />
== Was ist easyUpdate3? ==<br />
easyUpdate3 ist eine Erweiterung um Contao3 mit speziellen ZIP-Dateien aus dem Backend heraus zu aktualisieren<br />
<br />
<br />
<br />
== Funktionsweise und Erläuterungen ==<br />
<br />
=== easyUpdate3 installieren ===<br />
<br />
Nach der normalen Installation unter Contao erscheint im Backend ein neuer Menüeintrag, links unter System.<br />
<br />
[[Datei:Easyupdate_install_0040.png|Installation von easyUpdate, Schritt 1]]<br />
<br />
<br />
=== Sicherheitshinweise ===<br />
<br />
Folgend der Sicherheitshinweis des Autors von "easyUpdate3". <br />
{{Achtung|Hinweistext nach der easyUpdate3 Installation:<br />
Es gibt keine 100%-ige Sicherheit, dass alles einwandfrei funktioniert. Seien Sie sich also bewusst, was Sie tun!<br />
Machen Sie bei der ersten Verwendung dieses Tools ruhig eine zusätzliche Sicherung der Datenbank.<br />
Das Tool greift auf das Dateisystem zu, das kann zu DATENVERLUST führen!<br />
Alles was Sie machen, tun Sie auf eigene Gefahr.}}<br />
Das ist ist sehr guter und richtiger Hinweis, sollte jedoch, beim Einhalten dieser Vorgehensweise, den Anwender nicht Abschrecken "easyUpdate3" zu verwenden<br />
<br />
=== Kompatibilität ===<br />
<br />
*Getestete und funktionierende Vorgänge:<br />
Getestet wurde eine Installation bis zur Contao Version 3.0.1. ( in der hier dargestellten Fassung auch bis 3.2.14 )<br />
<br />
3.0.6 ====> 3.3.1<br />
<br />
<br />
*Getestete und fehlerhafte Vorgänge:<br />
<br />
2.x.x ====> 2.x.x ( Nicht mit Contao 2.x möglich! )<br />
<br />
<br />
=== Update vorbereiten - ZIP Dateien Downloaden und Ablegen ===<br />
<br />
*Download der richtigen ZIP-Dateien<br />
<br />
Die entsprechenden ZIP-Dateien finden sich unter folgendem Link:<br />
[http://ea3server.contao.ninja/ Webseite von Glen Langer]<br />
<br />
Nach dem Download der ZIP-Dateien werden diese über die Dateiverwaltung im Verzeichnis "easyupdate3" abgelegt.<br />
<br />
[[Datei:Easyupdate setfolder.png|Backend-Ablage im Verzeichnis]]<br />
<br />
=== Update durchführen ===<br />
<br />
*Auswahl der Zip-Datei<br />
<br />
Durch Klick auf den Menüpunkt "Easyupdate" wird folgendes Dialogfeld angezeigt.<br />
<br />
[[Datei:Easyupdate select file.png|Auswahl der ZIP-Datei]]<br />
<br />
{{Hinweis| Wenn eine Versionsnummer X.X.X erscheint, dann ist wahrscheinlich die ZIP-Datei beschädigt}}<br />
<br />
Nach Auswahl der ZIP-Datei wird mitgeteilt welche Dateien nicht im folgenden Update aktualisiert werden<br />
<br />
[[Datei:Easyupdate selectfiles noupdate.png|Anzeige der Dateien die nicht aktualisiert werden]]<br />
<br />
<br />
Im weiteren Verlauf werden diverse Dialoggrafiken dargestellt, diese werden jeweils mit der Schaltfläche "Nächsten Schritt ausführen" bestätigt.<br />
<br />
[[Datei:Easyupdate changelog view.png|Anzeige des Changelog zwischen den Versionen]]<br />
<br />
[[Datei:Easyupdate data contant view.png|Anzeige der Inhalte der Archivdatei]]<br />
<br />
[[Datei:Easyupdate save data.png|Anzeige der Dateien die gesichert werden]]<br />
<br />
<br />
=== Update überprüfen - Install-Tool ===<br />
<br />
<br />
<br />
== Autor der Erweiterung eaysupdate3 ==<br />
<br />
Glen Larger [[Benutzer:BugBuster|BugBuster]]<br />
<br />
== Weiterführende Links ==<br />
<br />
[https://contao.org/de/extension-list/view/easyupdate3.de.html easyUpdate3 in der Erweiterungsliste]<br />
<br />
[http://www.contao.glen-langer.de Webseite von BugBuster]<br />
<br />
[https://community.contao.org/de/showthread.php?1607-easyUpdate-Updates-noch-einfacher&highlight=easyupdate easyUpdate im Contao-Forum]</div>BugBusterhttps://de.contaowiki.org/Benutzer:BugBusterBenutzer:BugBuster2015-07-12T20:12:40Z<p>BugBuster: </p>
<hr />
<div>'''Nick:''' <br />
* BugBuster (auch im Contao Forum)<br />
<br />
'''Real Name:''' <br />
* Glen Langer<br />
<br />
'''Arbeit''': <br />
* Angestellter bei T-Systems International GmbH<br />
<br />
'''Tätigkeit:''' <br />
* Technology Consultant, Linux Admin, Firewall Admin, PHP Coder als ZCE<br />
<br />
'''Hobby:'''<br />
* Contao Open Source CMS Modulentwicklung<br />
* Star Trek<br />
* The Big Bang Theory<br />
* Tauchen<br />
* Digitalfotografie<br />
<br />
'''Webseiten:'''<br />
* [http://www.Glen-Langer.de www.Glen-Langer.de]<br />
* [http://Contao.Ninja Contao.Ninja]<br />
* [http://www.ncc1969.de =/\= www.NCC1969.de =/\= ] <br />
<br /><br /><br /><br />
----<br />
<br />
Nur so für mich, Bilder float abschalten im Wiki mit <nowiki><br style="clear: both" /></nowiki><br />
<br />
----</div>BugBusterhttps://de.contaowiki.org/Add_Language_To_UrlAdd Language To Url2015-07-12T19:01:09Z<p>BugBuster: Die Seite wurde neu angelegt: „"Add Language To Url" ist eine Erweiterung die nur für individuelle Domains das Sprachkürzel in die URL generieren lässt. Sinnvoll bei Multidomain Installat…“</p>
<hr />
<div>"Add Language To Url" ist eine Erweiterung die nur für individuelle Domains das Sprachkürzel in die URL generieren lässt. Sinnvoll bei Multidomain Installationen, wo nicht jede Domain die Sprachkürzel bekommen soll. In Contao selbst ist diese Möglichkeit nur pro Installation möglich.<br />
<br ><br />
Individuell angepasst werden dabei auch die Sitemaps und der Suchindex.<br />
<br ><br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://contao.ninja<br />
| ExtVersion=1.0.3<br />
| Version=ab 3.4.0<br />
| ERLink=https://packagist.org/packages/bugbuster/contao-lang_to_url<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/contao-lang_to_url/issues<br />
| VCSLink=https://github.com/BugBuster1701/contao-lang_to_url<br />
| Comment=wird nicht im ER2 veröffentlicht<br />
}}<br />
[[en:Add_Language_To_Url]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zur Erweiterung werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?119-Sonstige-Erweiterungen - Sonstige Erweiterungen]<br />
<br />
=Übersetzungen=<br />
Übersetzungen können auf [https://www.transifex.com/projects/p/contao-lang_to_url/ Transifex] durchgeführt werden.<br />
<br />
=Handbuch=<br />
Das Handbuch ist auf [http://docs.contao.ninja/de/add-language-to-url.html docs.contao.ninja] zu finden.<br />
<br />
<br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] ([[Benutzer Diskussion:BugBuster|Diskussion]]) 21:01, 12. Jul. 2015 (CEST)</div>BugBusterhttps://de.contaowiki.org/VisitorsVisitors2015-06-27T23:51:03Z<p>BugBuster: /* IP-Adresse */</p>
<hr />
<div>[[File:Modul_visitors_fe_all.jpg|right|Besucher]]Ein kleines Modul welches die Zugriffe (Hits) und Besucher (Visits) zählt und zur Anzeige bringt.<br /><br />
Dabei wird in der Anzeige getrennt angezeigt die Zugriffe/Besucher vom aktuellem Tag sowie die jeweilige Gesamtzahl.<br /><br />
Der Zugriffszähler wird, wie der Name schon sagt, bei jedem Zugriff erhöht. Der Besucherzähler zeigt die Zahl der unterschiedlichen IP-Adressen, die innerhalb von 30 Minuten eine oder mehrere Seiten angefordert haben auf dem sich das Modul befindet. (siehe dazu auch [[Visitors#Blockzeit|Blockzeit]])<br ><br />
<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://www.contao.glen-langer.de<br />
| ExtVersion=2.8.2 / 3.2.1<br />
| Version=ab 2.10<br />
| TLVersion=2.7 - 2.9 (siehe Installationshinweise)<br />
| Depending=[[Bot Detection|Bot Detection]],[[xls_export|Excel 95 Erzeuger (xls_export)]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/visitors.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/visitors/issues<br />
| VCSLink=https://github.com/BugBuster1701/visitors<br />
| Comment=Version für Contao 3.2 verfügbar<br />
}}<br />
[[en:Visitors]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Visitors-Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?28-visitors Forum - Subforen beliebter Third-Party-Erweiterungen (Extensions) - Visitors]<br />
<br /><br />
Fehler und Wünsche können auf GitHub im [https://github.com/BugBuster1701/visitors/issues Tracking System] gemeldet werden.{{msgInfo|'''Hinweis bei gleichzeitiger Nutzung von chShop und Visitors:'''<br>Durch einen Bug in chShop funktionierte Visitors nicht. Festgestellt bei Version 0.1.1 beta1 von chShop. Mittlerweile dort behoben (ohne jedoch die Versionsnummer anzupassen)}}<br />
[http://www.contao-community.de/showthread.php?202-chShop-Integriertes-Bestellsystem-ohne-feste-Artikelverwaltung&p=157260&viewfull=1#post157260 Forum Beitrag zur Lösung]<br />
<br />
=Übersetzungen=<br />
Übersetzungen können auf [https://www.transifex.com/projects/p/contao-visitors/ Transifex] durchgeführt werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao-Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP-Datei [http://www.contao.org/erweiterungsliste/view/visitors.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/visitors angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
( /typolight/install.php bei älteren TYPOlight Installationen )<br /><br /><br />
<span style="color:red">'''''Da das Visitors-Modul abhängig ist von den Modulen "[[Bot Detection|Bot Detection]]" und "[[xls_export|Excel 95 Erzeuger (xls_export)]]", müssen diese bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Hinweis für ältere TYPOlight/Contao-Versionen==<br />
===Contao 2.9===<br />
Nutzer von Contao 2.9.x nutzen bitte Visitors-Modul-Version 2.7.1 ([http://www.contao.org/erweiterungsliste/view/visitors.20070019.de.html Direktlink])<br />
===TYPOlight 2.8===<br />
Nutzer von TYPOlight 2.8.x nutzen bitte Visitors-Modul-Version 1.7.2 ([http://www.contao.org/erweiterungsliste/view/visitors.10070029.de.html Direktlink])<br />
===TYPOlight 2.7===<br />
Nutzer von TYPOlight 2.7.x nutzen bitte Visitors-Modul-Version 1.4.1 ([http://www.contao.org/erweiterungsliste/view/visitors.10040019.de.html Direktlink])<br />
<br /><br /><br />
==Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Visitors_Update_v1_auf_v2|'''Visitors-Update-Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Visitors-Modul bringt 2 Backend- und ein Frontend-Modul mit.<br /><br />
Im Backend gibt es "Besucher" und "Besucher Statistik", für das Frontend ebenfalls "Besucher".<br />
<br />
==Backend==<br />
<br />
===Besucher===<br />
[[Datei:Visitors_de_backend_besucher.jpg]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Visitors_de_backend_besucherstatistik.jpg]]<br />
<br />
zeigt dann im Detail: (Klick aufs Bild für höhere Auflösung)<br />
<gallery widths="240" heights="180" caption="Besucher Statistik"><br />
File:Visitors_de_backend_besucherstatistikdetail.jpg|Besucher Statistik im Detail<br />
File:Visitors_de_backend_besucherstatistikdetailBrowser.jpg|Browser Statistik<br />
File:Visitors_de_backend_besucherstatistikdetailSearchEngine.jpg|Search Engine Referer Statistik<br />
</gallery><br />
<br />
==Frontend==<br />
Für das Frontend werden als Beispiel zwei CSS-Dateien mitgeliefert:<br />
*mod_visitors_fe.css für die normale, zeilenweise Ausgabe<br />
*mod_visitors_fe_horizontal.css für die horizontale Ausgabe<br />
Ab der Version 3 liegen die css Dateien im Unterverzeichnis "css_demo". Zur Verwendung siehe [[Visitors#CSS-Datei|CSS-Datei]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Modul_visitors_fe_all.jpg]]<br />
<br />
===Besucher-Statistik horizontal===<br />
[[Datei:Modul_visitors_fe_all_horizontal.jpg]]<br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Besucher eine neue Besucher-Kategorie an. In dieser dann den Besucherzähler.<br /><br />
Danach legt man ein Frontend-Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default-Angaben. Feinheiten werden [[Visitors#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Besucher-Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Besucher'.<br /><br />
Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br />
[[Datei:Visitors_de_backend_kategorie_neu.jpg]]<br />
<br />
Am Anfang reicht es einen Kategorie-Namen anzugeben, anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Besucherzählers==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neuer Besucherzähler' und dann das Pfeil-Symbol oder auf das Plus im Kopf der Kategorie:<br />
[[Datei:Visitors_de_backend_besucherzaehler_neu.jpg]]<br />
<br />
Nun sind einige Angaben nötig:<br />
* Namen angeben (wird über den Zahlen als Überschrift angezeigt).<br />
* Start-Datum, ist optional, dient nur zur Anzeige im Frontend<br />
* Optional: 'Startwerte für Zähler' eingeben<br />
* Optional: 'Besucher pro Tag' Anzeige aktivieren<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend-Modul==<br />
Ein neues Frontend-Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
* Layout -> Module -> Neues Modul (TYPOlight bis 2.8.x)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Verschiedenes'-'Besucher' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Besucher-Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend-Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
* Layout -> Seitenlayout -> Edit des genutzte Layouts (TYPOlight bis 2.8.x)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend-Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie erwähnt sind 2 CSS-Dateien mitgeliefert für die Darstellung.<br /><br />
Für die ersten Tests sollte die Datei <code>mod_visitors_fe.css</code> aus dem Verzeichnis<br><br />
*Contao 2.x: <code>/system/modules/visitors</code> kopiert werden nach <code>/tl_files</code> <br><br />
*Contao 3.x: <code>/system/modules/visitors/css_demo</code> auf den lokalem PC kopiert werden <br><br />
und dann über das Backend importiert (Themes - CSS - Import) und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind einstellbar in der Kategorie, im Besucherzähler selbst sowie im selbst angelegtem Frontend-Modul. <br />
<br />
==Feinheiten in der Kategorie Definition==<br />
===Zählweise===<br />
Seit Version 1.6.0 kann die Zählweise bei eingeschaltetem Seitencache gewählt werden:<br />
* Last Zählung, serverseitig durch Contao<br />
* Lese Zählung, clientseitig durch Browser<br />
** (nur im Contao cacheModus: Server- und Browsercache / Nur Browsercache)<br />
<br />
Mit dem zweiten Punkt kann damit auch gezählt werden, wenn die Seite im Browsercache liegt und daraus aufgerufen wird.<br />
Die System-Einstellung 'Cache-Modus' wird dabei beachtet.<br />
<br />
{{Anmerkung|Die Anzeige der aktuellen Werte erfolgt aber weiterhin nur wenn die Seite vom Server angefordert wird.}}<br />
<br />
==Feinheiten in der Besucherzähler-Definition==<br />
===Blockzeit===<br />
Die Blockzeit wird in Sekunden angegeben. Nach Zugriffspause dieser Zeit wird ein Zugriff als weiterer Besucher gezählt.<br /><br />
Voreingetragen sind 1800 Sekunden, d.h. 30 Minuten.<br />
<br />
==Feinheiten in der Frontend-Modul-Definition==<br />
===Templates===<br />
Jedem Modul kann per Auswahl ein Template zugeordnet werden. Zur Auswahl stehen 4 Templates.<br />
* mod_visitors_fe_all<br />
** Liefert alle Felder die möglich sind (siehe Beispielbild oben)<br />
* mod_visitors_fe_hits<br />
** Hier wurden die beiden Besucherzeilen entfernt<br />
* mod_visitors_fe_visits<br />
** Hier wurden die beiden Zugriffszeilen entfernt<br />
* mod_visitors_fe_invisible<br />
** Hier wird nichts angezeigt. Dieses Template dient dadurch zur reinen Zählung.<br />
<br />
Es können eigene Templates erstellt werden. Diese müssen als Dateiname anfangen mit 'mod_visitors_fe_' und die Endung '.tpl' (Contao <2.10) bzw. '.xhtml' oder '.html5' haben.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend-Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen online sind.<br />
<br />
===Selbstzählung verhindern===<br />
Es gab einige Ideen, wie man noch verhindern kann, eigene Zugriffe nicht zu zählen. Besonders, wenn man mit dynamischen IPs ankommt.<br />
Hier ist nun eine Möglichkeit umgesetzt, dieses über einen angepassten User Agent String des Browsers zu tun.<br />
<br /><br />
Über: <br />
* Layout -> Themes -> Frontend-Module -> Modul-Name (Contao ab 2.9)<br />
* Layout -> Module -> Modul-Name (TYPOlight bis 2.8.x)<br />
vom angelegtem Besucher-Modul kann im neuem Feld "Keine Zählung bei HTTP_USER_AGENT Teilkennung:" einen String eingegeben werden, dieser sollte eindeutig sein.<br /><br />
Beispiel: CTISOK<br /><br />
Es sind, wozu auch immer, auch mehrere Strings dort möglich, diese dann durch Komma getrennt eingeben.<br /><br />
Im Firefox ergänzt man nun den Agent String wie folgt:<br /><br />
# Tippe '''about:config''' in der Adresszeile ein und drücke ENTER<br />
# Tippe '''general.useragent.extra.firefox''' in der Filter Zeile<br />
# Doppelklick auf die gefunde Zeile<br />
# Hier nun den Beispiel String von oben mit Leerzeichen getrennt anhängen, OK<br />
<br />
z.B. wird so aus "Firefox/3.5.2" nun "Firefox/3.5.2 CTISOK"<br /><br />
<br /><br />
Die Kennung kann man sich dann durch Eingabe von '''about:''' + Enter anzeigen lassen. (letzte Zeile)<br /><br />
<br /><br />
Weitere Browser sind hier erläutert (eng):<br />
[http://www.walkernews.net/2007/07/05/how-to-change-user-agent-string/ walkernews.net - how to change user agent string]<br />
{{Hinweis|Ab Firefox 4 funktioniert das so nicht mehr. Als Alternative gibt es das Add-On [https://addons.mozilla.org/de/firefox/addon/user-agent-switcher/ User-Agent-Switcher]}}<br />
<br />
=Insert-Tags=<br />
Die Insert-Tags werden vom Frontend Modul selbst benutzt. Ein Nutzer benötigt diese nur, wenn das Frontend Modul nicht eingesetzt wird.<br />
==Anzeige==<br />
Seit der Version 1.2.0 gibt es Insert-Tags zum Anzeigen der Werte.<br />
<source lang="text"><br />
{{visitors::katid::name}}<br />
{{visitors::katid::online}}<br />
{{visitors::katid::start}}<br />
{{visitors::katid::totalvisit}}<br />
{{visitors::katid::totalhit}}<br />
{{visitors::katid::todayvisit}}<br />
{{visitors::katid::todayhit}}<br />
{{visitors::katid::averagevisits}}<br />
</source><br />
Seit der Version 1.5.0 und ab TYPOlight 2.8 können die Insert-Tags um den Präfix 'cache_' erweitert werden, damit sind diese dann auch cachesicher.<br />
<source lang="text"><br />
{{cache_visitors::katid::name}}<br />
...<br />
</source><br />
Das Modul zählt und zeigt normalerweise die Werte an. Wer für die Anzeige die Insert-Tags nutzen will, braucht das Modul weiterhin, aber nur zum Zählen. Mittels des Templates mod_visitors_fe_invisible kann es dazu unsichtbar geschaltet werden.<br /><br />
Die "katid" ist die Kategorie-ID, in dem der Zähler angelegt wurde. Zur Ermittlung in der Kategorieübersicht des Moduls mit der Maus über das "i" gehen.<br />
<br />
[[Datei:Visitors_de_backend_kategorie_id.jpg|Besucherzähler Kategorie-ID]]<br />
<br />
Dabei wird als Tooltipp die ID angezeigt.<br /><br />
Ab Version 2.3.1 steht die ID direkt hinter dem Kategorie-Namen.<br /><br />
Bei Kategorie-ID = 1 wäre das dann also beispielsweise:<br /><br />
<source lang="text"><br />
{{visitors::1::online}}<br />
</source><br />
<br />
<br /><br />
<br />
==Zählung==<br />
Eine Alternative für "nur zählen" wäre, den Insert-Tag zu nutzen, den es ab Version 1.5.0 gibt, das Modul selbst verwendet diesen ebenfalls:<br />
<source lang="text"><br />
{{cache_visitors::katid::count}}<br />
</source><br />
Beispiel für Einbau in einen Artikel (für Kategorie-ID = 1):<br />
<source lang="html4strict"><br />
<span style="width:0px;height:0px;">{{cache_visitors::1::count}}</span><br />
</source><br />
<br />
{{Achtung|Dabei muss drauf geachtet werden, dass der Insert-Tag für die Zählung als erstes auf der Seite eingebaut wird, damit die Zählung vor der Ermittlung der Anzeigewerte erfolgt.}}<br />
<br />
<br /><br />
<br />
==Weitere Insert-Tags==<br />
Seit der Version 2.1.0 gibt es Insert-Tags zum Anzeigen der Werte vom Tag an dem die meisten Besucher gezählt wurden.<br />
<source lang="text"><br />
{{visitors::katid::bestday::date}} - Tag (Datum) mit den meisten Besuchern<br />
{{visitors::katid::bestday::visits}} - Anzahl Besucher vom Tag mit den meisten Besuchern<br />
{{visitors::katid::bestday::hits}} - Anzahl Zugriffe vom Tag mit den meisten Besuchern<br />
bzw.<br />
{{cache_visitors::katid::bestday::date}}<br />
{{cache_visitors::katid::bestday::visits}}<br />
{{cache_visitors::katid::bestday::hits}}<br />
</source><br />
Beim "date" Insert-Tag ist noch ein optionaler Parameter möglich, um die Datumsausgabe zu formatieren.(m.d.Y , Y-m-d, etc.)<br /><br />
Als default wird die Systemeinstellung verwendet. Als Trennzeichen muss ein "::" verwendet werden.<br /><br />
Ein komplettes Beispiel (hier mit Kategorie 1):<br />
<source lang="text"><br />
BestDay: {{visitors::1::bestday::date::j. F Y}} mit {{visitors::1::bestday::visits}} Besuchern (bei {{visitors::1::bestday::hits}} Hits)<br />
</source><br />
ergibt:<br />
BestDay: 31. August 2010 mit 25 Besuchern (bei 123 Hits)<br />
<br />
<br /><br />
<br />
=Besonderheiten=<br />
==Keine Zählung==<br />
Es wird kein Frontend-Aufruf gezählt, wenn man dabei gleichzeitig im Backend angemeldet ist.<br /><br />
Es muss ein Frontend Modul angelegt und eingebunden werden, bzw. als Alternative der Insert-Tag für die Zählung (nur für Profis), sonst kann natürlich nicht gezählt werden.<br />
<br /><br />
<br />
==Besucher pro Tag: Ø = 0==<br />
Der Durschnittswert pro Tag wird pro vollständigem Kalendertag berechnet.<br /><br />
Hat man nun nur von einem Tag vorher oder gar nur vom aktuellem Tag eine Zählung, kann kein sinnvoller Wert berechnet werden.<br /><br />
(Durschnitt = Anzahl Besucher)<br /><br />
In diesen Fällen wird "0" angezeigt.<br />
<br /><br />
<br />
==Bot Detection abschalten==<br />
Wer die Zugriffe von Bots und Suchmaschinen mitzählen möchte, kann die Bot Detection abschalten. Das geht allerdings nicht über das Backend, sondern muss über die localconfig.php passieren.<br />
{{Achtung|Das gilt dann für alle Visitors-Module, falls mehrere Frontend Module angelegt wurden!}}<br />
Folgender Eintrag ans Ende der localconfig.php (nach: ### INSTALL SCRIPT STOP ### ) bewirkt das Ausschalten:<br /><br />
<source lang="php"><br />
$GLOBALS['TL_CONFIG']['mod_visitors_bot_check'] = false;<br />
</source><br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz. Im Gegensatz zu den meisten anderen Besucherstatistik-Tools, speichert Visitors nicht die Rohdaten und wertet diese später aus. Die notwendigen Auswertungen werden sofort ausgeführt. Gespeichert werden also die fertigen Statistik Daten, mit Ausnahme der IP-Adresse, siehe dazu die Hinweise in den weiteren Kapiteln.<br />
Somit ist das Ziel der Datenvermeidung und Datenminimierung bestmöglich erreicht.<br />
==Datenerfassung==<br />
===IP-Adresse===<br />
Zur Erkennung von unterschiedlichen Besuchern wird ausschließlich die IP-Adresse genommen, kein JavaScript, keine Cookies.<br />
===Browser-Agent und Referrer===<br />
Für zusätzliche Statistiken wird der Browser-Agent ausgelesen und der Referrer sofern vorhanden. Beides wird unabhängig von der IP-Adresse getrennt gespeichert und kann somit auch nicht in Verbindung gebracht werden. (reine Zählung)<br />
==Datenspeicherung==<br />
===IP-Adresse===<br />
Gespeichert wird nicht die IP-Adresse des Besuchers. Mit Ausnahme zur Erkennung von Bots/Crawler/Spider wird die IP-Adresse auch nicht zu weiteren Analysezwecken verwendet. Aus der IP-Adresse und weiteren internen Daten wird ein Pseudonym generiert in Form eines Hashwertes. Ein Rückrechnen ist denkbar, aber nur mit erheblichem Aufwand. Der Hashwert wird mit keiner anderen statistischen Auswertung in Verbindung gebracht.<br />
<br />
===Browser-Agent und Referrer===<br />
Für den Browser-Agent werden die Kombinationen aus Browser,Sprache,OS mit einem Zählstand gespeichert, nicht der komplette Agent String. <br />
Beim Referrer wird die URL gespeichert mit Zählstand und Zeitstempel des letzten Auftretens, ohne Verbindung zur IP-Adresse oder Browser-Agent.<br />
==Datenhaltung==<br />
Die Hashwerte zur Erkennung von unterschiedlichen Besuchern werden bei jedem Aufruf geprüft, zeitlich abgelaufende werden dabei gelöscht. Haltezeit entspricht dabei der Blockzeit, Default-Wert ist 1800 Sekunden, d.h. 30 Minuten.<br />
Referrer Werte werden je nach Art derzeit nach 90 bzw. 120 Tagen gelöscht.<br />
<br />
Die Anzahl der Besucher/Zugriffe je Tag wird dauerhaft gespeichert, daraus werden die weiteren Anzeigen generiert. Diese Speicherung kann über das Backend gelöscht werden, der Zähler fängt dann wieder bei 0 an.<br />
<br />
<br /><br /><br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 12:24, 22. Nov. 2011 (CET)</div>BugBusterhttps://de.contaowiki.org/VisitorsVisitors2015-06-27T23:11:56Z<p>BugBuster: /* Datenschutz */</p>
<hr />
<div>[[File:Modul_visitors_fe_all.jpg|right|Besucher]]Ein kleines Modul welches die Zugriffe (Hits) und Besucher (Visits) zählt und zur Anzeige bringt.<br /><br />
Dabei wird in der Anzeige getrennt angezeigt die Zugriffe/Besucher vom aktuellem Tag sowie die jeweilige Gesamtzahl.<br /><br />
Der Zugriffszähler wird, wie der Name schon sagt, bei jedem Zugriff erhöht. Der Besucherzähler zeigt die Zahl der unterschiedlichen IP-Adressen, die innerhalb von 30 Minuten eine oder mehrere Seiten angefordert haben auf dem sich das Modul befindet. (siehe dazu auch [[Visitors#Blockzeit|Blockzeit]])<br ><br />
<br />
<br />
{{ExtInfo<br />
| Dev=Glen Langer ([[User:BugBuster|BugBuster]])<br />
| DevSite=http://www.contao.glen-langer.de<br />
| ExtVersion=2.8.2 / 3.2.1<br />
| Version=ab 2.10<br />
| TLVersion=2.7 - 2.9 (siehe Installationshinweise)<br />
| Depending=[[Bot Detection|Bot Detection]],[[xls_export|Excel 95 Erzeuger (xls_export)]]<br />
| ERLink=http://www.contao.org/erweiterungsliste/view/visitors.de.html<br />
| DonateLink=http://www.amazon.de/wishlist/26HHEJOU03G76<br />
| TrackerLink=https://github.com/BugBuster1701/visitors/issues<br />
| VCSLink=https://github.com/BugBuster1701/visitors<br />
| Comment=Version für Contao 3.2 verfügbar<br />
}}<br />
[[en:Visitors]]<br />
[[Kategorie:Extensions]]<br />
<br />
=Forum=<br />
Fragen zum Visitors-Modul werden im Forum beantwortet: [https://community.contao.org/de/forumdisplay.php?28-visitors Forum - Subforen beliebter Third-Party-Erweiterungen (Extensions) - Visitors]<br />
<br /><br />
Fehler und Wünsche können auf GitHub im [https://github.com/BugBuster1701/visitors/issues Tracking System] gemeldet werden.{{msgInfo|'''Hinweis bei gleichzeitiger Nutzung von chShop und Visitors:'''<br>Durch einen Bug in chShop funktionierte Visitors nicht. Festgestellt bei Version 0.1.1 beta1 von chShop. Mittlerweile dort behoben (ohne jedoch die Versionsnummer anzupassen)}}<br />
[http://www.contao-community.de/showthread.php?202-chShop-Integriertes-Bestellsystem-ohne-feste-Artikelverwaltung&p=157260&viewfull=1#post157260 Forum Beitrag zur Lösung]<br />
<br />
=Übersetzungen=<br />
Übersetzungen können auf [https://www.transifex.com/projects/p/contao-visitors/ Transifex] durchgeführt werden.<br />
<br />
=Installation=<br />
Installation erfolgt über das Extension Repository im Backend der Contao-Installation.<br /><br />
Eine manuelle Installation ist möglich, dazu die ZIP-Datei [http://www.contao.org/erweiterungsliste/view/visitors.html vom Extension Repository laden], entpacken und entsprechend übertragen.<br /><br />
Dadurch sollte ein Verzeichnis /system/modules/visitors angelegt worden sein.<br /><br />
Danach wie dabei üblich /contao/install.php Aufrufen - Update Database durchführen.<br /><br />
( /typolight/install.php bei älteren TYPOlight Installationen )<br /><br /><br />
<span style="color:red">'''''Da das Visitors-Modul abhängig ist von den Modulen "[[Bot Detection|Bot Detection]]" und "[[xls_export|Excel 95 Erzeuger (xls_export)]]", müssen diese bei der manuellen Installation mit installiert werden.'''''</span><br />
<br />
==Hinweis für ältere TYPOlight/Contao-Versionen==<br />
===Contao 2.9===<br />
Nutzer von Contao 2.9.x nutzen bitte Visitors-Modul-Version 2.7.1 ([http://www.contao.org/erweiterungsliste/view/visitors.20070019.de.html Direktlink])<br />
===TYPOlight 2.8===<br />
Nutzer von TYPOlight 2.8.x nutzen bitte Visitors-Modul-Version 1.7.2 ([http://www.contao.org/erweiterungsliste/view/visitors.10070029.de.html Direktlink])<br />
===TYPOlight 2.7===<br />
Nutzer von TYPOlight 2.7.x nutzen bitte Visitors-Modul-Version 1.4.1 ([http://www.contao.org/erweiterungsliste/view/visitors.10040019.de.html Direktlink])<br />
<br /><br /><br />
==Update von Version 1.x auf Version 2.x==<br />
{{Achtung|Die Version 2.x ist nicht vollständig kompatibel, ein Update ist aber möglich.}}<br />
<br /><br />
Was dabei zu beachten ist, kann hier nachgelesen werden.<br />
*[[Visitors_Update_v1_auf_v2|'''Visitors-Update-Version 1 auf Version 2''']]<br />
<br /><br />
<br />
=Übersicht=<br />
Das Visitors-Modul bringt 2 Backend- und ein Frontend-Modul mit.<br /><br />
Im Backend gibt es "Besucher" und "Besucher Statistik", für das Frontend ebenfalls "Besucher".<br />
<br />
==Backend==<br />
<br />
===Besucher===<br />
[[Datei:Visitors_de_backend_besucher.jpg]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Visitors_de_backend_besucherstatistik.jpg]]<br />
<br />
zeigt dann im Detail: (Klick aufs Bild für höhere Auflösung)<br />
<gallery widths="240" heights="180" caption="Besucher Statistik"><br />
File:Visitors_de_backend_besucherstatistikdetail.jpg|Besucher Statistik im Detail<br />
File:Visitors_de_backend_besucherstatistikdetailBrowser.jpg|Browser Statistik<br />
File:Visitors_de_backend_besucherstatistikdetailSearchEngine.jpg|Search Engine Referer Statistik<br />
</gallery><br />
<br />
==Frontend==<br />
Für das Frontend werden als Beispiel zwei CSS-Dateien mitgeliefert:<br />
*mod_visitors_fe.css für die normale, zeilenweise Ausgabe<br />
*mod_visitors_fe_horizontal.css für die horizontale Ausgabe<br />
Ab der Version 3 liegen die css Dateien im Unterverzeichnis "css_demo". Zur Verwendung siehe [[Visitors#CSS-Datei|CSS-Datei]]<br />
<br />
===Besucher-Statistik===<br />
[[Datei:Modul_visitors_fe_all.jpg]]<br />
<br />
===Besucher-Statistik horizontal===<br />
[[Datei:Modul_visitors_fe_all_horizontal.jpg]]<br />
<br />
=Erste Schritte=<br />
Als erstes legt man über den Menüpunkt Besucher eine neue Besucher-Kategorie an. In dieser dann den Besucherzähler.<br /><br />
Danach legt man ein Frontend-Modul an und baut es in das Layout der Seite ein.<br /><br />
Hier nun die einzelnen Schritte, jeweils mit den Default-Angaben. Feinheiten werden [[Visitors#Feinheiten|später erklärt]].<br />
<br />
==Anlegen einer Kategorie==<br />
Um eine neue Besucher-Kategorie zu erstellen, klickt man links im Backend unter 'Inhalte' auf 'Besucher'.<br /><br />
Im Hauptbereich dann auf den Button 'Neue Kategorie'. <br />
[[Datei:Visitors_de_backend_kategorie_neu.jpg]]<br />
<br />
Am Anfang reicht es einen Kategorie-Namen anzugeben, anschließend klickt man auf "Speichern und Schließen".<br /><br />
Nun ist man in der Kategorie Übersicht. Durch Klick auf den Bleistift in der Zeile der Kategorie und nochmaligem Klick auf den Bleistift im Kopf der Kategorie gelangt man wieder zu den Einstellungen der Kategorie.<br />
<br />
==Anlegen des Besucherzählers==<br />
In der Kategorie Übersicht klickt man nun auf Edit (Bleistift) der Kategorie.<br /><br />
Dort entweder auf 'Neuer Besucherzähler' und dann das Pfeil-Symbol oder auf das Plus im Kopf der Kategorie:<br />
[[Datei:Visitors_de_backend_besucherzaehler_neu.jpg]]<br />
<br />
Nun sind einige Angaben nötig:<br />
* Namen angeben (wird über den Zahlen als Überschrift angezeigt).<br />
* Start-Datum, ist optional, dient nur zur Anzeige im Frontend<br />
* Optional: 'Startwerte für Zähler' eingeben<br />
* Optional: 'Besucher pro Tag' Anzeige aktivieren<br />
* "Veröffentlicht" aktivieren<br />
anschließend klickt man auf "Speichern und Schließen".<br />
<br />
==Frontend-Modul==<br />
Ein neues Frontend-Modul wird angelegt über:<br />
* Layout -> Themes -> Frontend Module -> Neues Modul (Contao ab 2.9)<br />
* Layout -> Module -> Neues Modul (TYPOlight bis 2.8.x)<br />
<br /><br />
Als erstes unbedingt '''zuerst den Titel''' eingeben, erst dann bei Modultyp: 'Verschiedenes'-'Besucher' auswählen. Es ändern sich nun die Formularfelder.<br /><br />
Bei 'Besucher-Kategorie' nun die vorher angelegte Kategorie auswählen, anschließend 'Speichern und Schließen'.<br /><br />
<br /><br />
Nun muss das angelegte Frontend-Modul noch im Layout eingebunden werden:<br />
* Layout -> Themes -> Seitenlayout -> Edit des genutzte Layouts (Contao ab 2.9)<br />
* Layout -> Seitenlayout -> Edit des genutzte Layouts (TYPOlight bis 2.8.x)<br />
<br />
Bei 'Eingebundene Module' das gerade erstellte Frontend-Modul einbinden (z.b in left)<br />
<br />
==CSS-Datei==<br />
Wie erwähnt sind 2 CSS-Dateien mitgeliefert für die Darstellung.<br /><br />
Für die ersten Tests sollte die Datei <code>mod_visitors_fe.css</code> aus dem Verzeichnis<br><br />
*Contao 2.x: <code>/system/modules/visitors</code> kopiert werden nach <code>/tl_files</code> <br><br />
*Contao 3.x: <code>/system/modules/visitors/css_demo</code> auf den lokalem PC kopiert werden <br><br />
und dann über das Backend importiert (Themes - CSS - Import) und im Layout aktiviert werden.<br />
<br />
=Feinheiten=<br />
Feinheiten sind einstellbar in der Kategorie, im Besucherzähler selbst sowie im selbst angelegtem Frontend-Modul. <br />
<br />
==Feinheiten in der Kategorie Definition==<br />
===Zählweise===<br />
Seit Version 1.6.0 kann die Zählweise bei eingeschaltetem Seitencache gewählt werden:<br />
* Last Zählung, serverseitig durch Contao<br />
* Lese Zählung, clientseitig durch Browser<br />
** (nur im Contao cacheModus: Server- und Browsercache / Nur Browsercache)<br />
<br />
Mit dem zweiten Punkt kann damit auch gezählt werden, wenn die Seite im Browsercache liegt und daraus aufgerufen wird.<br />
Die System-Einstellung 'Cache-Modus' wird dabei beachtet.<br />
<br />
{{Anmerkung|Die Anzeige der aktuellen Werte erfolgt aber weiterhin nur wenn die Seite vom Server angefordert wird.}}<br />
<br />
==Feinheiten in der Besucherzähler-Definition==<br />
===Blockzeit===<br />
Die Blockzeit wird in Sekunden angegeben. Nach Zugriffspause dieser Zeit wird ein Zugriff als weiterer Besucher gezählt.<br /><br />
Voreingetragen sind 1800 Sekunden, d.h. 30 Minuten.<br />
<br />
==Feinheiten in der Frontend-Modul-Definition==<br />
===Templates===<br />
Jedem Modul kann per Auswahl ein Template zugeordnet werden. Zur Auswahl stehen 4 Templates.<br />
* mod_visitors_fe_all<br />
** Liefert alle Felder die möglich sind (siehe Beispielbild oben)<br />
* mod_visitors_fe_hits<br />
** Hier wurden die beiden Besucherzeilen entfernt<br />
* mod_visitors_fe_visits<br />
** Hier wurden die beiden Zugriffszeilen entfernt<br />
* mod_visitors_fe_invisible<br />
** Hier wird nichts angezeigt. Dieses Template dient dadurch zur reinen Zählung.<br />
<br />
Es können eigene Templates erstellt werden. Diese müssen als Dateiname anfangen mit 'mod_visitors_fe_' und die Endung '.tpl' (Contao <2.10) bzw. '.xhtml' oder '.html5' haben.<br />
<br />
===Nur Gästen anzeigen===<br />
Nach dem Aktivieren der Funktion wird das Modul versteckt, sobald ein Mitglied (Frontend-Nutzer) angemeldet ist.<br />
<br />
===Modul schützen===<br />
Hier kann nun definiert werden, dass die Anzeige des Moduls nur dann erfolgt, wenn Mitglieder bestimmter Gruppen online sind.<br />
<br />
===Selbstzählung verhindern===<br />
Es gab einige Ideen, wie man noch verhindern kann, eigene Zugriffe nicht zu zählen. Besonders, wenn man mit dynamischen IPs ankommt.<br />
Hier ist nun eine Möglichkeit umgesetzt, dieses über einen angepassten User Agent String des Browsers zu tun.<br />
<br /><br />
Über: <br />
* Layout -> Themes -> Frontend-Module -> Modul-Name (Contao ab 2.9)<br />
* Layout -> Module -> Modul-Name (TYPOlight bis 2.8.x)<br />
vom angelegtem Besucher-Modul kann im neuem Feld "Keine Zählung bei HTTP_USER_AGENT Teilkennung:" einen String eingegeben werden, dieser sollte eindeutig sein.<br /><br />
Beispiel: CTISOK<br /><br />
Es sind, wozu auch immer, auch mehrere Strings dort möglich, diese dann durch Komma getrennt eingeben.<br /><br />
Im Firefox ergänzt man nun den Agent String wie folgt:<br /><br />
# Tippe '''about:config''' in der Adresszeile ein und drücke ENTER<br />
# Tippe '''general.useragent.extra.firefox''' in der Filter Zeile<br />
# Doppelklick auf die gefunde Zeile<br />
# Hier nun den Beispiel String von oben mit Leerzeichen getrennt anhängen, OK<br />
<br />
z.B. wird so aus "Firefox/3.5.2" nun "Firefox/3.5.2 CTISOK"<br /><br />
<br /><br />
Die Kennung kann man sich dann durch Eingabe von '''about:''' + Enter anzeigen lassen. (letzte Zeile)<br /><br />
<br /><br />
Weitere Browser sind hier erläutert (eng):<br />
[http://www.walkernews.net/2007/07/05/how-to-change-user-agent-string/ walkernews.net - how to change user agent string]<br />
{{Hinweis|Ab Firefox 4 funktioniert das so nicht mehr. Als Alternative gibt es das Add-On [https://addons.mozilla.org/de/firefox/addon/user-agent-switcher/ User-Agent-Switcher]}}<br />
<br />
=Insert-Tags=<br />
Die Insert-Tags werden vom Frontend Modul selbst benutzt. Ein Nutzer benötigt diese nur, wenn das Frontend Modul nicht eingesetzt wird.<br />
==Anzeige==<br />
Seit der Version 1.2.0 gibt es Insert-Tags zum Anzeigen der Werte.<br />
<source lang="text"><br />
{{visitors::katid::name}}<br />
{{visitors::katid::online}}<br />
{{visitors::katid::start}}<br />
{{visitors::katid::totalvisit}}<br />
{{visitors::katid::totalhit}}<br />
{{visitors::katid::todayvisit}}<br />
{{visitors::katid::todayhit}}<br />
{{visitors::katid::averagevisits}}<br />
</source><br />
Seit der Version 1.5.0 und ab TYPOlight 2.8 können die Insert-Tags um den Präfix 'cache_' erweitert werden, damit sind diese dann auch cachesicher.<br />
<source lang="text"><br />
{{cache_visitors::katid::name}}<br />
...<br />
</source><br />
Das Modul zählt und zeigt normalerweise die Werte an. Wer für die Anzeige die Insert-Tags nutzen will, braucht das Modul weiterhin, aber nur zum Zählen. Mittels des Templates mod_visitors_fe_invisible kann es dazu unsichtbar geschaltet werden.<br /><br />
Die "katid" ist die Kategorie-ID, in dem der Zähler angelegt wurde. Zur Ermittlung in der Kategorieübersicht des Moduls mit der Maus über das "i" gehen.<br />
<br />
[[Datei:Visitors_de_backend_kategorie_id.jpg|Besucherzähler Kategorie-ID]]<br />
<br />
Dabei wird als Tooltipp die ID angezeigt.<br /><br />
Ab Version 2.3.1 steht die ID direkt hinter dem Kategorie-Namen.<br /><br />
Bei Kategorie-ID = 1 wäre das dann also beispielsweise:<br /><br />
<source lang="text"><br />
{{visitors::1::online}}<br />
</source><br />
<br />
<br /><br />
<br />
==Zählung==<br />
Eine Alternative für "nur zählen" wäre, den Insert-Tag zu nutzen, den es ab Version 1.5.0 gibt, das Modul selbst verwendet diesen ebenfalls:<br />
<source lang="text"><br />
{{cache_visitors::katid::count}}<br />
</source><br />
Beispiel für Einbau in einen Artikel (für Kategorie-ID = 1):<br />
<source lang="html4strict"><br />
<span style="width:0px;height:0px;">{{cache_visitors::1::count}}</span><br />
</source><br />
<br />
{{Achtung|Dabei muss drauf geachtet werden, dass der Insert-Tag für die Zählung als erstes auf der Seite eingebaut wird, damit die Zählung vor der Ermittlung der Anzeigewerte erfolgt.}}<br />
<br />
<br /><br />
<br />
==Weitere Insert-Tags==<br />
Seit der Version 2.1.0 gibt es Insert-Tags zum Anzeigen der Werte vom Tag an dem die meisten Besucher gezählt wurden.<br />
<source lang="text"><br />
{{visitors::katid::bestday::date}} - Tag (Datum) mit den meisten Besuchern<br />
{{visitors::katid::bestday::visits}} - Anzahl Besucher vom Tag mit den meisten Besuchern<br />
{{visitors::katid::bestday::hits}} - Anzahl Zugriffe vom Tag mit den meisten Besuchern<br />
bzw.<br />
{{cache_visitors::katid::bestday::date}}<br />
{{cache_visitors::katid::bestday::visits}}<br />
{{cache_visitors::katid::bestday::hits}}<br />
</source><br />
Beim "date" Insert-Tag ist noch ein optionaler Parameter möglich, um die Datumsausgabe zu formatieren.(m.d.Y , Y-m-d, etc.)<br /><br />
Als default wird die Systemeinstellung verwendet. Als Trennzeichen muss ein "::" verwendet werden.<br /><br />
Ein komplettes Beispiel (hier mit Kategorie 1):<br />
<source lang="text"><br />
BestDay: {{visitors::1::bestday::date::j. F Y}} mit {{visitors::1::bestday::visits}} Besuchern (bei {{visitors::1::bestday::hits}} Hits)<br />
</source><br />
ergibt:<br />
BestDay: 31. August 2010 mit 25 Besuchern (bei 123 Hits)<br />
<br />
<br /><br />
<br />
=Besonderheiten=<br />
==Keine Zählung==<br />
Es wird kein Frontend-Aufruf gezählt, wenn man dabei gleichzeitig im Backend angemeldet ist.<br /><br />
Es muss ein Frontend Modul angelegt und eingebunden werden, bzw. als Alternative der Insert-Tag für die Zählung (nur für Profis), sonst kann natürlich nicht gezählt werden.<br />
<br /><br />
<br />
==Besucher pro Tag: Ø = 0==<br />
Der Durschnittswert pro Tag wird pro vollständigem Kalendertag berechnet.<br /><br />
Hat man nun nur von einem Tag vorher oder gar nur vom aktuellem Tag eine Zählung, kann kein sinnvoller Wert berechnet werden.<br /><br />
(Durschnitt = Anzahl Besucher)<br /><br />
In diesen Fällen wird "0" angezeigt.<br />
<br /><br />
<br />
==Bot Detection abschalten==<br />
Wer die Zugriffe von Bots und Suchmaschinen mitzählen möchte, kann die Bot Detection abschalten. Das geht allerdings nicht über das Backend, sondern muss über die localconfig.php passieren.<br />
{{Achtung|Das gilt dann für alle Visitors-Module, falls mehrere Frontend Module angelegt wurden!}}<br />
Folgender Eintrag ans Ende der localconfig.php (nach: ### INSTALL SCRIPT STOP ### ) bewirkt das Ausschalten:<br /><br />
<source lang="php"><br />
$GLOBALS['TL_CONFIG']['mod_visitors_bot_check'] = false;<br />
</source><br />
<br />
=Datenschutz=<br />
Einige Worte zum Thema Datenschutz. Im Gegensatz zu den meisten anderen Besucherstatistik-Tools, speichert Visitors nicht die Rohdaten und wertet diese später aus. Die notwendigen Auswertungen werden sofort ausgeführt. Gespeichert werden also die fertigen Statistik Daten, mit Ausnahme der IP-Adresse, siehe dazu die Hinweise in den weiteren Kapiteln.<br />
Somit ist das Ziel der Datenvermeidung und Datenminimierung bestmöglich erreicht.<br />
==Datenerfassung==<br />
===IP-Adresse===<br />
Zur Erkennung von unterschiedlichen Besuchern wird ausschließlich die IP-Adresse genommen, kein JavaScript, keine Cookies.<br />
===Browser-Agent und Referrer===<br />
Für zusätzliche Statistiken wird der Browser-Agent ausgelesen und der Referrer sofern vorhanden. Beides wird unabhängig von der IP-Adresse getrennt gespeichert und kann somit auch nicht in Verbindung gebracht werden. (reine Zählung)<br />
==Datenspeicherung==<br />
===IP-Adresse===<br />
Gespeichert wird nicht die IP-Adresse des Besuchers. Mit Außnahme zur Erkennung von Bots/Crawler/Spider wird die IP-Adresse auch nicht zu weiteren Analysezwecken verwendet. Aus der IP-Adresse und weiteren internen Daten wird ein Pseudonym generiert in Form eines Hashwertes. Ein Rückrechnen ist denkbar, aber nur mit erheblichem Aufwand. Der Hashwert wird mit keiner anderen statistischen Auswertung in Verbindung gebracht.<br />
===Browser-Agent und Referrer===<br />
Für den Browser-Agent werden die Kombinationen aus Browser,Sprache,OS mit einem Zählstand gespeichert, nicht der komplette Agent String. <br />
Beim Referrer wird die URL gespeichert mit Zählstand und Zeitstempel des letzten Auftretens, ohne Verbindung zur IP-Adresse oder Browser-Agent.<br />
==Datenhaltung==<br />
Die Hashwerte zur Erkennung von unterschiedlichen Besuchern werden bei jedem Aufruf geprüft, zeitlich abgelaufende werden dabei gelöscht. Haltezeit entspricht dabei der Blockzeit, Default-Wert ist 1800 Sekunden, d.h. 30 Minuten.<br />
Referrer Werte werden je nach Art derzeit nach 90 bzw. 120 Tagen gelöscht.<br />
<br />
Die Anzahl der Besucher/Zugriffe je Tag wird dauerhaft gespeichert, daraus werden die weiteren Anzeigen generiert. Diese Speicherung kann über das Backend gelöscht werden, der Zähler fängt dann wieder bei 0 an.<br />
<br />
<br /><br /><br />
----<br />
--[[Benutzer:BugBuster|BugBuster]] 12:24, 22. Nov. 2011 (CET)</div>BugBusterhttps://de.contaowiki.org/Insert-TagsInsert-Tags2015-05-06T13:25:43Z<p>BugBuster: /* Seitenbezogene Inserttags */</p>
<hr />
<div>{{AppliesTo<br />
|Version=Alle Versionen<br />
}}<br />
[[Category: Core]]<br />
[[Category:Dev HOWTOS]]<br />
[[Category:Anwender und Redakteure]]<br />
<br />
= Insert-Tags =<br />
Contao bietet die Möglichkeit, mittels so genannter Insert-Tags Inhalte oder Funktionen zu referenzieren.<br />
<br />
Der Aufbau ist in der Regel <nowiki>{{Tagname::Argument}}</nowiki>.<br />
{{Achtung|Eine Verschachtelung – also der Aufruf eines Insert-Tags innerhalb eines anderen – ist nur mit <nowiki>{{iflng::*}}</nowiki> möglich. Andere Insert-Tags können nicht verschachtelt werden.}}<br />
{{Achtung|Werden Elemente inkludiert, die auf Javascript basieren, wird das Javascript nicht geladen. Abhilfe: [[Inserttags_Javascript_Support]]}}<br />
<br />
<br />
== Liste der Insert-Tags ==<br />
Die Liste stammt im Wesentlichen von [http://www.contao.org/typolight-insert-tags.html Contao.org]. Über die dort dokumentierten Insert-Tags hinaus gibt es weitere Insert-Tags. Bitte vervollständige die Liste.<br />
=== Link-Elemente ===<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung'''<br />
|-<br />
| <nowiki>{{link::*}}</nowiki> || Dieses Tag wird mit einem Link zu einer internen Seite oder einer externen URL ersetzt (ersetzen Sie * mit der ID oder dem Alias der Seite oder der URL).<br />
|-<br />
|<nowiki>{{link::back}}</nowiki> || Dieses Tag wird mit der zuletzt besuchte Seite ersetzt. Kann auch mit link_open, link_url und link_title verwendet werden.<br />
|-<br />
|<nowiki>{{link::login}}</nowiki> || Dieses Tag wird mit einem Link zur Anmeldeseite des aktuellen Frontend-Benutzers (falls vorhanden) ersetzt.<br />
|-<br />
|<nowiki>{{link_open::*}}</nowiki> || Wird mit dem öffnenden Tag eines Links zu einer internen Seite ersetzt: <nowiki>{{link_open::12}}</nowiki>Click here<nowiki>{{link_close}}</nowiki>.<br />
|-<br />
|<nowiki>{{link_url::*}}</nowiki> || Dieses Tag wird mit der URL einer internen Seite ersetzt: <nowiki><a href="{{link_url::12}}">Click here</a>.</nowiki><br />
|-<br />
|<nowiki>{{link_title::*}}</nowiki> || Dieses Tag wird mit dem Titel einer internen Seite ersetzt: <nowiki><a title="{{link_title::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{article::*}}</nowiki> || Dieses Tag wird mit einem Link zu einem Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
|<nowiki>{{article_open::*}}</nowiki> || Wird mit dem öffnenden Tag eines Links zu einem Artikel ersetzt: <nowiki>{{article_open::12}}Click here{{link_close}}.</nowiki><br />
|-<br />
|<nowiki>{{article_url::*}}</nowiki> || Dieses Tag wird mit der URL eines Artikels ersetzt: <nowiki><a href="{{article_url::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{article_title::*}}</nowiki> || Dieses Tag wird mit dem Titel eines Artikels ersetzt: <nowiki><a title="{{article_title::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{news::*}}</nowiki> || Dieses Tag wird mit einem Link zu einer Nachricht ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
|<nowiki>{{news_open::*}}</nowiki> || Wird mit dem öffnenden Tag eines Links zu einer Nachricht ersetzt: <nowiki>{{news_open::12}}Click here{{link_close}}</nowiki>.<br />
|-<br />
|<nowiki>{{news_url::*}}</nowiki> || Dieses Tag wird mit der URL einer Nachricht ersetzt: <nowiki><a href="{{news_url::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{news_title::*}}</nowiki> || Dieses Tag wird mit dem Titel einer Nachricht ersetzt: <nowiki><a title="{{news_title::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{event::*}}</nowiki> || Dieses Tag wird mit einem Link zu einem Event ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
|<nowiki>{{event_open::*}}</nowiki> || Wird mit dem öffnenden Tag eines Links zu einem Event ersetzt: <nowiki>{{event_open::12}}Click here{{link_close}}</nowiki>.<br />
|-<br />
|<nowiki>{{event_url::*}}</nowiki> || Dieses Tag wird mit der URL eines Events ersetzt: <nowiki><a href="{{event_url::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{event_title::*}}</nowiki> || Dieses Tag wird mit dem Titel eines Events ersetzt: <nowiki><a title="{{event_title::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{faq::*}}</nowiki> || Dieses Tag wird mit einem Link zu einer häufig gestellten Frage ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
|<nowiki>{{faq_open::*}}</nowiki> || Wird mit dem öffnenden Tag eines Links zu einer Frage ersetzt: <nowiki>{{faq_open::12}}Click here{{link_close}}</nowiki>.<br />
|-<br />
|<nowiki>{{faq_url::*}}</nowiki> || Dieses Tag wird mit der URL einer Frage ersetzt: <nowiki><a href="{{faq_url::12}}">Click here</a></nowiki>.<br />
|-<br />
|<nowiki>{{faq_title::*}}</nowiki> || Dieses Tag wird mit dem Titel einer Frage ersetzt: <nowiki><a title="{{faq_title::12}}">Click here</a>.</nowiki><br />
|-<br />
| colspan="2" |<br />
|}<br />
<br />
=== Benutzereigenschaften ===<br />
<br />
Mit den folgenden Inserttags können Eigenschaften des angemeldeten Benutzers ausgebeben werden.<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung'''<br />
|-<br />
| <nowiki>{{user::firstname}}</nowiki> ||Dieses Tag wird mit dem Vornamen des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::lastname}}</nowiki> || Dieses Tag wird mit dem Nachnamen des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::company}}</nowiki> || Dieses Tag wird mit dem Firmennamen des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::phone}}</nowiki> || Dieses Tag wird mit der Telefonnummer des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::mobile}}</nowiki> || Dieses Tag wird mit der Handynummer des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::fax}}</nowiki> || Dieses Tag wird mit der Faxnummer des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::email}}</nowiki> || Dieses Tag wird mit der E-Mail-Adresse des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::website}}</nowiki> || Dieses Tag wird mit der Internetadresse des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::street}}</nowiki> || Dieses Tag wird mit dem Staßennamen des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::postal}}</nowiki> || Dieses Tag wird mit der Postleitzahl des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::city}}</nowiki> || Dieses Tag wird mit der Stadt des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::country}}</nowiki> || Dieses Tag wird mit dem Land des angemeldeten Benutzers ersetzt.<br />
|-<br />
| <nowiki>{{user::username}}</nowiki> || Dieses Tag wird mit dem Benutzernamen des angemeldeten Benutzers ersetzt.<br />
| colspan="2" |<br />
|}<br />
Mit der Insert-Tag-Methode <nowiki>{{user::variable}}</nowiki> können auch andere Eigenschaften von Usern abgefragt werden.<br />
<br />
=== Umgebungsvariablen ===<br />
<br />
Mit den folgenden Inserttags können Umgebungsvariablen wie z.B. der Seitenname oder der Request-String ausgegeben werden.<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''<br />
|-<br />
| <nowiki>{{env::page_id}}</nowiki> || Dieses Tag wird mit der ID der aktuellen Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::page_alias}}</nowiki> || Dieses Tag wird mit dem Alias der aktuellen Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::page_name}}</nowiki> || Dieses Tag wird mit dem Namen der aktuellen Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::page_title}}</nowiki> || Dieses Tag wird mit dem Titel der aktuellen Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::page_language}}</nowiki> || Dieses Tag wird mit der Sprache der aktuellen Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::parent_alias}}</nowiki> || Dieses Tag wird mit dem Alias der übergeordneten Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::parent_name}}</nowiki> || Dieses Tag wird mit dem Namen der übergeordneten Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::parent_title}}</nowiki> || Dieses Tag wird mit dem Titel der übergeordneten Seite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::main_alias}}</nowiki> || Dieses Tag wird mit dem Alias der übergeordneten Hauptseite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::main_name}}</nowiki> || Dieses Tag wird mit dem Namen der übergeordneten Hauptseite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::main_title}}</nowiki> || Dieses Tag wird mit dem Titel der übergeordneten Hauptseite ersetzt. || || 2.10.x<br />
|-<br />
| <nowiki>{{env::website_title}}</nowiki> || Dieses Tag wird mit dem Titel der Webseite ersetzt. || ||<br />
|-<br />
| <nowiki>{{env::host}}</nowiki> || Dieses Tag wird mit dem aktuellen Hostnamen ersetzt. || 2.9.0||<br />
|-<br />
| <nowiki>{{env::http_host}}</nowiki> || Dieses Tag wird mit dem aktuellen HTTP-Host ersetzt. || unbekannt||<br />
|-<br />
| <nowiki>{{env::url}}</nowiki> || Dieses Tag wird mit dem Hostnamen und dem Protokoll ersetzt. || ||<br />
|-<br />
| <nowiki>{{env::path}}</nowiki> || Dieses Tag wird mit der aktuellen Basis-URL samt Pfad zum Contao-Verzeichnis ersetzt. || ||<br />
|-<br />
| <nowiki>{{env::request}}</nowiki> || Dieses Tag wird mit dem aktuellen Request-String ersetzt. || ||<br />
|-<br />
| <nowiki>{{env::referer}}</nowiki> || Dieses Tag wird mit der URL der zuletzt besuchten Seite ersetzt. || ||<br />
|-<br />
| <nowiki>{{env::ip}}</nowiki> || Dieses Tag wird mit der IP-Adresse des aktuellen Besuchers ersetzt. || ||<br />
|-<br />
| colspan="2" | <br />
|}<br />
<br />
=== Seitenbezogene Inserttags===<br />
<br />
Mit den folgenden Inserttags können Umgebungsvariablen wie z.B. der Seitenname.<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''<br />
|-<br />
| <nowiki>{{page::id}}</nowiki> || Dieses Tag wird mit der ID der aktuellen Seite ersetzt. || 2.11.x || <br />
|-<br />
| <nowiki>{{page::alias}}</nowiki> || Dieses Tag wird mit dem Alias der aktuellen Seite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::title}}</nowiki> || Dieses Tag wird mit dem Namen der aktuellen Seite ersetzt. || 2.11.x || <br />
|-<br />
| <nowiki>{{page::pageTitle}}</nowiki> || Dieses Tag wird mit dem Titel der aktuellen Seite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::description}}</nowiki> || Dieses Tag wird mit der Beschreibung der aktuellen Seite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::language}}</nowiki> || Dieses Tag wird mit der Sprache der aktuellen Seite ersetzt. || 2.11.x || <br />
|-<br />
| <nowiki>{{page::parentAlias}}</nowiki> || Dieses Tag wird mit dem Alias der übergeordneten Seite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::parentTitle}}</nowiki> || Dieses Tag wird mit dem Namen der übergeordneten Seite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::parentPageTitle}}</nowiki> || Dieses Tag wird mit dem Titel der übergeordneten Seite ersetzt. || 2.11.x||<br />
|-<br />
| <nowiki>{{page::mainAlias}}</nowiki> || Dieses Tag wird mit dem Alias der übergeordneten Hauptseite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::mainTitle}}</nowiki> || Dieses Tag wird mit dem Namen der übergeordneten Hauptseite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::mainPageTitle}}</nowiki> || Dieses Tag wird mit dem Titel der übergeordneten Hauptseite ersetzt. || 2.11.x ||<br />
|-<br />
| <nowiki>{{page::rootTitle}}</nowiki> || Dieses Tag wird mit dem Titel der Webseite ersetzt. || 2.11.x ||<br />
|-<br />
| colspan="2" | <br />
|}<br />
<br />
=== Include-Elemente ===<br />
<br />
Mit den folgenden Inserttags können Ressourcen wie z.B. Artikel, Module oder Dateien aus dem /templates-Verzeichnis eingebunden werden.<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung'''<br />
|-<br />
| <nowiki>{{insert_article::*}}</nowiki> || Dieses Tag wird mit dem referenzierten Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
| <nowiki>{{insert_content::*}}</nowiki> || Dieses Tag wird mit dem referenzierten Inhaltselement ersetzt (ersetzen Sie * mit der ID des Elements).<br />
|-<br />
| <nowiki>{{insert_module::*}}</nowiki> || Dieses Tag wird mit dem referenzierten Modul ersetzt (ersetzen Sie * mit der ID des Moduls).<br />
|-<br />
| <nowiki>{{article_teaser::*}}</nowiki> || Dieses Tag wird mit dem Teaser eines Artikels ersetzt (ersetzen Sie * mit der ID des Artikels).<br />
|-<br />
| <nowiki>{{news_teaser::*}}</nowiki> || Dieses Tag wird mit dem Teaser einer Nachricht ersetzt (ersetzen Sie * mit der ID der Nachricht).<br />
|-<br />
| <nowiki>{{event_teaser::*}}</nowiki> || Dieses Tag wird mit dem Teaser eines Events ersetzt (ersetzen Sie * mit der ID des Events).<br />
|-<br />
| <nowiki>{{file::*}}</nowiki> || Dieses Tag wird mit dem Inhalt einer .php- oder .tpl-Datei aus dem templates-Verzeichnis ersetzt (ersetzen Sie * mit dem Namen). Bei Bedarf können Sie Argumente übergeben: <nowiki>{{file::file.php?arg1=val&arg2=val}}</nowiki><br />
|-<br />
| <nowiki>{{insert_form::*}}</nowiki> || Dieses Tag wird mit dem referenzierten Formular ersetzt (ersetzen Sie * mit der ID oder dem Alias).<br />
|-<br />
| colspan="2" | <br />
|}<br />
<br />
=== Systempfade ===<br />
<br />
Mit den folgenden Inserttags können Systempfade referenzenziert werden:<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung'''<br />
|-<br />
| <nowiki>{{files_url}}</nowiki> || Liefert den Pfad zum Verzeichnis für /files<br />
|-<br />
| <nowiki>{{assets_url}}</nowiki> || Liefert den Pfad zum Verzeichnis für /assets<br />
|-<br />
| <nowiki>{{plugins_url}}</nowiki> || Liefert den Pfad zum Verzeichnis für /plugins<br />
|-<br />
| <nowiki>{{script_url}}</nowiki> || Liefert den Pfad zum Verzeichnis für /scripts<br />
|-<br />
| colspan="2" | <br />
|}<br />
<br />
=== Verschiedenes ===<br />
<br />
Mit den folgenden Inserttags können Sie verschiedene Aufgaben erledigen und z.B. das aktuelle Datum oder ein Lightbox-Bild einfügen.<br />
<br />
{| border="0" cellspacing="1" cellpadding="2"<br />
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''<br />
|-<br />
| <nowiki>{{date}}</nowiki> || Dieses Tag wird mit dem aktuellen Datum gemäß des globalen Datumsformats ersetzt. || ||<br />
|-<br />
| <nowiki>{{date::*}}</nowiki> || Dieses Tag wird mit dem aktuellen Datum gemäß eines individuellen Datumsformats ersetzt. || ||<br />
|-<br />
| <nowiki>{{last_update}}</nowiki> || Dieses Tag wird mit dem Datum der letzten Aktualisierung gemäß des globalen Datumsformats ersetzt. || ||<br />
|-<br />
| <nowiki>{{last_update::*}}</nowiki> || Dieses Tag wird mit Datum der letzten Aktualisierung gemäß eines individuellen Datumsformats ersetzt. || ||<br />
|-<br />
| <nowiki>{{email::*}}</nowiki> || Dieses Tag wird mit einem verschlüsselten Link zu einer E-Mail-Adresse ersetzt. || ||<br />
|-<br />
| <nowiki>{{email_open::*}}</nowiki> || Erstellt einfach nur ein öffenden Link || 2.11 ||<br />
|-<br />
| <nowiki>{{news_feed::*}}</nowiki> || Bindet den Newsfeed aus /share/ID über die ID ein || 3.1.3 ||<br />
|-<br />
| <nowiki>{{calendar_feed::*}}</nowiki> || Bindet den Kalenderfeed aus /share/ID über die ID ein || 3.1.3 ||<br />
|-<br />
<br />
<br />
| <nowiki>{{lang::*}}</nowiki> || Mit diesem Tag können fremdsprachige Wörter in einem Text markiert werden: <nowiki>{{lang::fr}}Au revoir{{lang}}</nowiki><br /><br />
Wird ersetzt mit <nowiki><span lang="fr" xml:lang="fr">Au revoir</span></nowiki>. || ||<br />
|-<br />
| <nowiki>{{iflng::*}}</nowiki> || Dieses Tag wird komplett entfernt, wenn die Sprache der Seite nicht mit der Tag-Sprache übereinstimmt. Sie können so sprachspezifische Bezeichnungen erstellen:<br /> <br />
<nowiki>{{iflng::en}}Your name{{iflng}}{{iflng::de}}Ihr Name{{iflng}} <br />
</nowiki> || ||<br />
|-<br />
| <nowiki>{{image::*}}</nowiki> || Dieses Tag wird mit der Vorschauansicht eines Bildes ersetzt: <nowiki>{{image::tl_files/image.jpg?width=200&height=150}}</nowiki><br /><br />
Argumente sind:<br /><br />
*width - Breite des Vorschaubildes<br />
*height - Höhe des Vorschaubildes<br />
*alt - Alternativer Text<br />
*class CSS-Klasse<br />
*rel rel-Attribut (z.B. "lightbox")<br />
*mode Modus ("proportional", "crop" oder "box") || 2.8.2 ||<br />
|-<br />
| <nowiki>{{label::*}}</nowiki> || Dieses Tag wird mit einer Übersetzung ersetzt: <nowiki>{{label::CNT:au}}</nowiki> oder <nowiki>{{label::tl_article:title:0}}</nowiki>.<br />Beachten Sie, dass innerhalb des Pfads zur Bezeichnung nur einfache Doppelpunkte verwendet werden. || ||<br />
|-<br />
| <nowiki>{{abbr::Abkürzungserklärung}}Abkürzung{{abbr}}</nowiki> || - Mit diesem Tag können Abkürzungen in einem Text markiert werden: <nowiki>{{abbr::AGG}}Allgemeines Gleichstellungsgesetz{{abbr}}</nowiki> wird ersetzt mit <nowiki><span abbr="AGG">Allgemeines Gleichstellungsgesetz</span></nowiki>. || 2.9.2 ||<br />
|-<br />
| <nowiki>{{acronym::Akronymerklärung}}Akronym{{acronym}}</nowiki> || - Mit diesem Tag können Akronyme in einem Text markiert werden: <nowiki>{{acronym::PISA}}Programme for International Student Assessment{{acronym}}</nowiki> wird ersetzt mit <nowiki><span acronym="PISA">Programme for International Student Assessment</span></nowiki>. || 2.9.2 || <br />
| colspan="3" | <br />
|}<br />
<br />
=== Weitere Inserttags ===<br />
*<nowiki>{{env::ua}}</nowiki> - liefert den Useragent zurück<br />
*<nowiki>{{env::ip}}</nowiki> - liefert IP<br />
*<nowiki>{{env::http_host}}</nowiki> - liefert den HTTP-Host<br />
*<nowiki>{{ifnlng::XX}}</nowiki> - if '''not''' language<br />
*<nowiki>{{request_token}}</nowiki> - Request Token<br />
*<nowiki>{{version}}</nowiki> - Version<br />
*<nowiki>{{last_update}}</nowiki> - letztes Update<br />
*<nowiki>{{post}} - $arrCache[$strTag] = \Input::post($elements[1]);</nowiki><br />
*<nowiki>{{toggle_view}}</nowiki> - Wechselt das Seitenlayout von Desktop zu Mobil und vice versa<br />
*<nowiki>{{br}}</nowiki> - fügt einen Zeilenumbruch ein (ab Version 3.2. RC1, nützlich in Elementen, die kein HTML erlauben)<br />
<br />
== Inserttags in Templates verwenden ==<br />
<br />
{{Hinweis|Dieser Abschnitt richtet sich eher an Entwickler.}}<br />
<br />
Falls man einmal ein Insert-Tags innerhalb eines Templates verwenden möchte. Ist folgender Contao-Methode sehr wichtig.<br />
<br />
<source lang="php"><?php echo $this->replaceInsertTags('{{link::1}}'); //Hier würde ein Link zum Artikel 1 erzeugt ?></source><br />
<br />
== Eigene Insert-Tags erstellen ==<br />
Darüber hinaus gibt es Möglichkeiten, um eigene Insert-Tags zu erstellen Siehe auch: [[Eigene_insert_tags_erstellen]].<br />
<br />
== Insert-Tags von Extensions ==<br />
<br />
=== dlstats ===<br />
Die Insert-Tags der Extension "dlstats" sind unter [[Dlstats#Insert-Tag_Nutzung]] aufgelistet.<br />
<br />
=== LastLogin ===<br />
Die Insert-Tags der Extension "LastLogin" sind ab [[LastLogin#Letzter_Login]] aufgelistet.<br />
<br />
=== Visitors ===<br />
Die Insert-Tags der Extension "Visitors" sind unter [[Visitors#Insert-Tags]] aufgelistet.<br />
<br />
=== Tags ===<br />
<br />
Die Insert-Tags der Extension "Tags" sind unter [[Tags#Insert_Tags]] aufgelistet.<br />
<br />
=== MetaModels ===<br />
<br />
Die Insert-Tags der Extensions "MetaModels" sind unter [[MetaModels_Insert-Tags]] aufgelistet.</div>BugBusterhttps://de.contaowiki.org/WebhosterWebhoster2015-03-06T19:36:11Z<p>BugBuster: /* goneo */</p>
<hr />
<div>[[Category:Installation und Updates]]<br />
=Liste kompatibler Webhoster=<br />
<big>'''Diese Informationen basieren ausschließlich auf Erfahrungen von Nutzern. Diese Erfahrungen stimmen teilweise nicht für alle Webpakete eines Anbieters! Manchmal ändern Anbieter auch die technischen Einstellungen, so dass sich neue Umstände ergeben. Verlasst euch niemals nur darauf, sondern führt wenn möglich mindestens eine Diagnose, am besten aber eine Testinstallation auf einem Test-Webspace (beim Anbieter nachfragen) durch.'''</big><br />
<br />
Abkürzungen:<br />
* SMH = [[Safemode Hack]]<br />
* ER = [[Systemdiagnosetool#PHP_configuration|Extension Repository]] (siehe ''SOAP extension'')<br />
* LU = Live Update<br />
<br />
{| border="0" cellpadding="5" cellspacing="1" style="vertical-align:top;"<br />
<br />
|-<br />
!Webhoster<br />
!Tarif<br />
!SMH notwendig<br />
!.htaccess notwendig<br />
!php.ini notwendig<br />
!CHMOD notwendig<br />
!ER möglich<br />
!LU möglich<br />
!Sonstige Anmerkungen<br />
|-<br />
| [http://www.1und1.de 1&1] || ab 1&1 Homepage Perfect || nein || {{td_red |PHP 5}} || nein || nein || ja || ja || [[1 und 1 Internet|detaillierte Installationsanleitung]]<br />
|-<br />
| [http://www.1blu.de 1blu] || Homepage Unlimited, Homepage Professional || nein || nein || nein || nein || ja || ja || [[#1blu|Details]]<br />
|-<br />
| [http://alfahosting.de Alfahosting] || Multipaket, Profipaket, Businesspaket || nein || nein || nein || nein || ja || ja || [[#Alfahosting|Details]]<br />
|-<br />
| [http://all-inkl.com All-Inkl] || ab "Start" Tarif || nein || {{td_red| PHP 5}} || nein || nein || ja || ja || [[#All-Inkl|Details]]<br />
|-<br />
| [http://www.arcor.de Arcor] || 700 MB Webspace || {{td_yellow |unbekannt}} || nein || nein || nein || {{td_red | SOAP}} || ja || [[#Arcor|Details]]<br />
|-<br />
| [http://www.bytecamp.net bytecamp] || bytecamp arbeitet mit einem einzigen Tarifmodell || nein || {{td_red |PHP 5}} || nein || nein || ja || {{td_yellow|unbekannt}} || [[#bytecamp|Details]]<br />
|-<br />
| [http://www.bplaced.net bplaced]<br />(Freehoster, in den Userseiten werbefrei) || Free || nein || nein || nein || nein || {{td_red |nein}} | {{td_red |nein}} || [[#bplaced|Details]]<br />
|-<br />
|CanHost || CAN-NUKE und andere || nein || nein || {{td_red |ja}} || nein || ja || ja || [[#CanHost|Details]]<br />
|-<br />
| [http://www.celeros.de Celeros] || Private || nein || nein || nein || nein || ja || {{td_yellow|unbekannt}} ||keine<br />
|-<br />
| [http://www.contao-webhosting.de Contao Webhosting] || ab Paket S || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.cyon.ch Cyon] || Cherry, KIWI || nein || laut Nutzer "zed" inzwischen nicht mehr nötig, PHP5 nun Standard || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.df.eu DomainFactory] || ManagedHosting L, ManagedHosting M, My Home Vorkonfiguration 1, My Home Dynamic || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.dynamic-net.ch dynamic-net] || Alle Pakete inkl. Reseller || nein || nein || nein || nein || ja || ja || [[#dynamic-net|Details]]<br />
|-<br />
| [https://www.fc-hosting.de fc-hosting] || Profi-2 || nein || nein || nein || nein || ja || ja || [[#fc-hosting|Details]]<br />
|-<br />
| [http://www.flyhost.de FlyHost] || Flyhost 100, Flyhost 50 || nein || nein || nein || nein || ja || {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.genotec.ch Genotec] || Shared Pro UNIX || nein || nein || nein || nein || {{td_red | SOAP}} | {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.goneo.de goneo] || Homepage Easy, Profi und Premium || nein || nein || nein || nein || ja || ja || [[#goneo|Details]]<br />
|-<br />
| [http://www.greatnet.de Greatnet] || Classic || nein || {{td_red |PHP 5 }} || nein || nein || ja || ja || [[#Greatnet|Details]]<br />
|-<br />
| [http://www.hetzner.de Hetzner] || ab dem Paket "Level 4" voll kompatibel || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.host4free.de Host4Free] || individueller Tarif || nein || nein || nein || nein || ja || ja || [[#Host4Free|Details]]<br />
|-<br />
| [http://www.hosteurope.de Hosteurope] || ab Webpack M || nein || nein || nein || nein || ja || ja || [[#Hosteurope|Details]]<br />
|-<br />
| [http://www.hosting-agency.de Hosting-Agency] || Agency 250 || nein || nein || nein || nein || {{td_red | SOAP}} || ja || keine<br />
|-<br />
| [http://www.hostmonster.com Hostmonster] || - || nein || nein || nein || nein || {{td_yellow |unbekannt}} | {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.hostmax.ch HostMax] || One || nein || nein || nein || nein || nein || ja || [[#HostMax|Details]]<br />
|-<br />
| [http://www.hostpoint.ch Hostpoint] || SH Server Standard || nein || nein || nein || nein || ja || ja || [[#Hostpoint|Details]]<br />
|-<br />
| [http://www.hoststar.ch Hoststar] || StarEntry || nein || {{td_red |PHP 5}} | {{td_red |mod_rewrite aktivieren lassen}} || nein || {{td_yellow | SOAP}} || ja || [[#Hoststar|Details]]<br />
|-<br />
| [http://www.hosttech.de hosttech] || Easy 10000 || {{td_red |Ja}} || nein || nein || nein || ja || {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.inetrobots.com iNet Robots] || ab Web Home || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.intersaar.de intersaar] || ab Web-Präsenz "Eco" aufwärts ("Eco", "Business", "Professional", "Premium") gut geeignet. || nein || nein || nein || nein || {{td_yellow | SOAP}} | {{td_yellow |unbekannt}} || [[#intersaar|Details]]<br />
|-<br />
| [http://www.mittwald.de Mittwald] || - || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.one.com One.com] || 3000MB || {{td_yellow |unbekannt}} || nein || nein || nein || ja || {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.strato.de Strato] || Strato PowerPlus, Strato Speedplus || nein || {{td_red |PHP 5 bei älteren Hostings }} || nein || nein || {{td_red | SOAP}} | {{td_yellow |unbekannt}} || [[#Strato|Details]]<br />
|-<br />
| [http://www.suleitec.de Suleitec] || ab Tarif Expert || nein || nein || nein || nein || {{td_yellow |unbekannt}} | {{td_yellow |unbekannt}} || keine<br />
|-<br />
| [http://www.tecserver.com TecServer] || Webhosting Small || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.tng.de TNG] || VLAMP-Server || nein || nein || nein || nein || ja || ja || [[#TNG|Details]]<br />
|-<br />
|[http://www.tophoster.de tophoster.de] || alle || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [https://uberspace.de Uberspace] || Uberspace arbeitet mit einem einzigen Tarifmodell || nein || nein || nein || nein || ja || {{td_yellow|unbekannt}} || [[#Uberspace|Details]]<br />
|-<br />
| [http://www.united-domains.de united-domains] || Standard || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
| [http://www.web.de web.de] || colspan="8" | Siehe [[1 und 1 Internet]] da web.de eine Tochtergesellschaft ist.<br />
|-<br />
| [http://www.webhoster.de webhoster.de] || Webhosting Starter Tarif || nein || nein || nein || nein || ja || ja || keine<br />
|-<br />
|[http://www.webhostone.de WebhostOne] || ab Basic-300 (Carino: empfohlen Basic 750), Pro-1500 || nein || nein || nein || nein || ja || ja || [[#WebhostOne|Details]]<br />
|-<br />
| [http://www.world4you.com World4You] || Domainserver Start || nein || nein || nein || nein || ja || ja || [[#World4You|Details]]<br />
|-<br />
|}<br />
<br />
* Im [http://www.contao-community.de/showthread.php?66-Hosting-von-Contao-Installationen Contao-Forum] findet sich ebenfalls eine (evtl. aktuellere) [http://www.contao-community.de/showthread.php?66-Hosting-von-Contao-Installationen Übersicht über Contao-kompatible Webhoster].<br />
<br />
=Liste inkompatibler Webhoster=<br />
In dieser Liste werden Webhoster gelistet, bei denen Contao nicht eingesetzt werden kann oder sollte, da sie die Nutzung wichtiger Systemfunktionen deaktivieren.<br />
Bitte beim Hinzufügen von Webhostern darauf achten, detailliert zu beschreiben woran es scheitert, wie z.B. "stellt nur PHP4 zur Verfügung", alternativ kann auch der Inhalt des betreffenden Forum-Threads rezitiert werden und selbiger Thread als Sonstige Anmerkung verlinkt werden.<br />
<br />
{| border="0" cellpadding="5" cellspacing="1" style="margin:0;vertical-align:top;"<br />
|+ <big>'''Diese Informationen basieren ausschließlich auf Erfahrungen von Nutzern. Diese Erfahrungen stimmen teilweise nicht für alle Webpakete eines Anbieters! Manchmal ändern Anbieter auch die technischen Einstellungen, so dass sich neue Umstände ergeben. Verlasst euch niemals nur darauf, sondern führt wenn möglich mindestens eine Diagnose, am besten aber eine Testinstallation auf einem Test-Webspace (beim Anbieter nachfragen) durch.'''</big><br />
|-<br />
!Webhoster<br />
!Grund der Inkompatibilität<br />
!Sonstige Anmerkungen<br />
|-<br />
| [http://www.1a-websolutions.ch 1a-websolutions] || Verwendet mod_security, welches das Datenbank-Update lahm legt. || [http://www.contao-community.de/showthread.php?5895-Fehlermeldung-bei-der-Installatio Forum-Thread]<br />
|-<br />
|[http://www.t-online.de T-Online] ||Unterstützt keinen .htaccess Dateien. Daher keine URL-Umschreibung und keine Absicherung von Verzeichnissen. || [http://www.contao-community.de/showthread.php?5621-t-online Forum-Thread]<br />
|}<br />
<br />
=Workarounds für bestimmte Webhoster=<br />
Bei manchen Webhostern ist es leider notwendig von [[Installation|Standard Installationsschema]] abzuweichen. Oftmals betrifft dies den so genannten [[Safemode Hack]], welcher bei etlichen Webhostern notwendig ist. Weiterhin ist oftmals die SOAP Erweiterung nicht in PHP enthalten, was den Erweiterungskatalog nicht verwendbar macht (Mögliche Abhilfe hierbei ist jedoch [[TensideRepository]] für TYPOlight oder [[nusoap]] für Contao).<br />
<br />
Diese Besonderheiten sind hier aufgeführt um zu ermöglichen, dass Contao bei diesen Webhostern läuft.<br />
<br />
==1blu==<br />
PHP muss mittels einer im Verzeichnis abzulegenden Konfigurationsdatei auf Version 5 umgestellt werden. Problemlos und in den 1Blu-FAQ gut erklärt.<br />
==Alfahosting==<br />
One-Click-Installation von Contao.<br />
==All-Inkl==<br />
PHP 5 Aktivierung in .htaccess:<br /><br />
<source lang="text">AddHandler php5-cgi .php</source><br />
==Arcor==<br />
Läuft sehr langsam, Premium-Pakete mit weniger Kunden pro Server gibt es nicht. Safe_Mode ist aktiviert, die Seite funktioniert trotzdem, nur eben sehr langsam.<br />
==bytecamp==<br />
PHP 5 Aktivierung in .htaccess:<br />
<source lang="text">AddType application/x-httpd-php5 .php</source><br />
Vereinfache Installation und PHP5 vorkonfiguriert durch eigenen Installer. [http://www.bytecamp.net/de/hosting/details/installer.html 3 Schritte bequem per Webbrowser. ]<br />
==bplaced==<br />
Laut User [http://www.contao-community.de/showthread.php?7436-PHP-Version-5.3.2&highlight=bplaced tommy] gibt es inzwischen Ärger mit diesem Freehoster.<br />
==CanHost==<br />
Hängt stark vom gebuchten Paket ab, einige Änderungen sind im IP-Conf möglich, sonstige sind häufig per Mail an Support machbar.<br /><br />
Kein Backup von Webspace und Datenbanken im Preis enthalten (hinzubuchbar).<br /> <br />
Teilweise nur kurzes PHP-Zeitlimit (Support um Aufstockung bitten).<br /><br />
Sehr unterschiedliche Konfigurationen der Server (auch bei gleichen Hosting-Paketen).<br /><br />
In der Vergangenheit auch zeitweise Ausfälle; Domain teilweise nicht erreichbar.<br /><br />
Einige ausgewählte php.ini-Parameter lassen sich im IP-Conf (Konfigurationstool) selbst einstellen.<br /><br />
Über den Support kann man fast immer die benötigten Einstellungen bekommen (Beispiele: allow_url_fopen=On, max_execution_time=30, upload_max_filesize=8M, mcrypt aktiviert, SOAP installiert).<br /><br />
Nicht in allen Paketen läßt sich der Safe-Mode einstellen (safe_mode = Off).<br />
==dynamic-net==<br />
Falls das Extension Repository nicht ersichtlich ist, reicht ein kurzes Supportticket, um SOAP freischalten zu lassen.<br />
==fc-hosting==<br />
Newsletterversand möglich, aber nur blockweise (100Stk.).<br />
==goneo==<br />
Nur .de Domains gelten als Inklusivdomains, andere müssen kostenpflichtig zugebucht werden.<br><br />
Stand 6.3.2015: PHP 5.3.29 und 5.5.22 möglich.<br><br />
Nutzung des Composers ist weder mit PHP 5.3 (FastCGI) noch PHP 5.5 (Apache Modul) möglich, da allow_url_fopen standardmäßig und nicht änderbar auf Off gesetzt ist.<br><br />
Eine eigene php.ini brachte keine Verbesserung, das hatte in der Vergangenheit bei der cgi basierten PHP Version noch funktioniert.<br><br />
Falls sich das mal ändert kann bei der CGI Variante es selber ab und zu testen, ob es wieder geht.<br />
<br />
Das nachfolgende PHP-Script muss auf den Webserver kopiert (z.B. als copyini.php) und aufgerufen werden (z.B. mit http://www.domain.de/copyini.php)<br />
<source lang="php"><br />
<?php<br />
$cfg = get_cfg_var( 'cfg_file_path' );<br />
if ( copy( $cfg , './php.ini' ) ) <br />
{<br />
echo "Kopieren erfolgreich";<br />
} <br />
else <br />
{<br />
echo "Kopieren fehlgeschlagen";<br />
}<br />
?><br />
</source><br />
Das PHP-Script kopiert die aktuelle php.ini in den Ordner, wo auch das Script liegt. Anschließend sollte man das Script (copyini.php) wieder löschen.<br />
<br />
Für Contao + Composer muss man die kopierte php.ini anpassen. Dazu ändert man die Angabe<br />
<source lang="php"><br />
allow_url_fopen = Off<br />
</source><br />
zu<br />
<source lang="php"><br />
allow_url_fopen = On<br />
</source><br />
<br />
Diese geänderte php.ini kopiert man nun nach TL_ROOT/check zum prüfen ob die Anpassung wirkt. Funktioniert es, kopiert man die php.ini in das Verzeichnis TL_ROOT/contao. <br><br />
Damit läuft nun das Backend mit der geänderten php.ini Aus dem Verzeichnis TL_ROOT kann man die geänderte php.ini nun löschen.<br />
<br />
==Greatnet==<br />
PHP 5 Aktivierung in .htaccess:<br />
<source lang="text">FCGIWrapper /home/www/*DEINWEB*/fcgid/php5-fcgid .php</source><br />
==Host4Free==<br />
Für größere Websites wird ein Paket ab 4maxi empfohlen, da hier mehr Arbeitsspeicher pro Prozess zur Verfügung steht.<br />
==Hosteurope==<br />
Gilt seit 2011. Hochladen der Contao-Dateien: FTP-Zugang muss als Webserver-Benutzer konfiguriert sein (In allen neuen Paketen Standardeinstellung). Sonst ist der Safemod Hack notwendig.<br />
<br />
=== Composer und LiveUpdate ===<br />
Für die Nutzung von Composer und dem LiveUpdate-Service muss im KIS von Hosteurope eine Anpassung vorgenommen werden, die die Nutzung von .phar-Dateien unter Suhosin erlaubt. Dazu muss man sich im KIS einloggen. Dann sollte man in der linken Navigation unter dem Punkt "Administration" die Seite "Webserver" besuchen. Im Hauptbereich erscheint nun die Auflistung der jeweiligen Webpakete bzw. Server. Dort sollte man dann das jeweilige Paket mit dem passenden Button "Konfigurieren". Jetzt ruft man den Punkt "Skripte" auf und dann den Unterpunkt "Skripteinstellungen". In der nun erscheinenden Tabelle zu den php-Einstellungen klickt man bei dem Eintrag "PHP Suhosin Executor Include Whitelist" auf "ändern". Unter dem nun erscheinenden Screen sollte die Checkbox für "phar" aktiviert sein. Diese Einstellung sollte nun gespeichert werden und der Nutzung von Composer und dem LiveUpdate-Service sollte nun nichts mehr im Wege stehen.<br />
<br />
[[Datei:hosteurope_phar_01.jpg|200px|Script-Einstellung vor der Anpassung]] [[Datei:hosteurope_phar_02.jpg|200px|Script-Einstellung Details]] [[Datei:hosteurope_phar_03.jpg|200px|Script-Einstellung nach der Anpassung]]<br />
<br />
==HostMax==<br />
E-Mail an info@hostmax.ch senden, und mitteilen, dass Contao verwendet wird. HostMax muss die FireWall-Filter anpassen für Contao, sonst können Einstellungen im Backend nicht gesichert werden.<br />
==Hostpoint==<br />
Anscheinend läuft bei Hostpoint [http://www.contao-community.de/showpost.php?p=30104&postcount=32 TCPDF nicht wie gewünscht].<br />
==Hoststar==<br />
Über my.hoststar.ch ein Ticket erstellen für SOAP Aktivierung. Dann kommt meistens eine Antwort wie "das sei unsicher". Durch Beharrlichkeit und klar machen, dass SOAP kein Sicherheitsrisiko darstellt, kann eine Aktivierung erreicht werden.<br />
==intersaar==<br />
Bei Vertragsschluß am Besten gleich angeben, dass SOAP-Extensions aktiviert werden sollen.<br />
==Strato==<br />
Pakete, die jetzt neu gebucht werden, haben bereits PHP5 aktiviert. PHP4 gibt es bei neuen Paketen nicht mehr.<br />
<br />
In den neuen Paketen (z.B. BasicWeb XL) muss man in der localconfig.php ggf. diese Zeile nach(!) "### INSTALL SCRIPT STOP ###" hinzufügen:<br />
<source lang="text">unset($_SERVER['HTTP_X_FORWARDED_HOST']);</source><br />
Teilweise sehr langsam im Datenbankzugriff.<br />
<br />
===PHP5 bei Alt-Hostings===<br />
Bei einem länger existierenden Paket muss unter Umständen PHP5 aktiviert werden. Dies '''muss''' im Kundencenter erfolgen (wie weiter unten von planepix beschrieben).<br />
<br />
''Anmerkung von tril:'' Diese Methode scheint nicht mehr zu funktionieren und führt idR zu einem 500er Fehler, dies kann aber von Paket zu Paket unterschiedlich sein, deshalb hier nochmal die '''alte Methode''' um PHP5 zu aktivieren:<br />
<source lang="text">AddHandler application/x-httpd-php5 .php</source><br />
''Anmerkung von planepix:'' Alternativ kann man sich im Kundencenter von Strato einloggen und links im Menü unter "Homepagestaltung" die Option "Website-Konfigurator" wählen. Dort gibt es den Punkt "PHP-Konfiguration" mit dem man die PHP-Version fürs Verzeichnis auf PHP5 einstellen kann.<br /><br />
<br />
==TNG==<br />
Aktivierung von mod_rewrite via Support.<br />
<br />
==Uberspace==<br />
Default ist PHP 5.4. In PHP 5.4 wurden für Zlib die neuen Konstanten ZLIB_ENCODING_DEFLATE, ZLIB_ENCODING_GZIP und ZLIB_ENCODING_RAW eingeführt.<br />
<br />
Bedingt durch einen Bug in SOAP ist es nötig, in Contao 2.11.x die folgenden Änderungen in der Datei /system/modules/rep_client/RepositoryBackendModule.php vorzunehmen:<br />
<source lang="php">diff --git a/system/modules/rep_client/RepositoryBackendModule.php b/system/modules/rep_client/RepositoryBackendModule.php<br />
index d04626c..ff8b0f4 100644<br />
--- a/system/modules/rep_client/RepositoryBackendModule.php<br />
+++ b/system/modules/rep_client/RepositoryBackendModule.php<br />
@@ -124,7 +124,7 @@ class RepositoryBackendModule extends BackendModule<br />
$proxy_uri = parse_url($GLOBALS['TL_CONFIG']['proxy_url']);<br />
$this->client = new SoapClient($wsdl, array(<br />
'soap_version' => SOAP_1_2,<br />
- 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 1,<br />
+ 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,<br />
'proxy_host' => $proxy_uri['host'],<br />
'proxy_port' => $proxy_uri['port'],<br />
'proxy_login' => $proxy_uri['user'],<br />
@@ -135,7 +135,7 @@ class RepositoryBackendModule extends BackendModule<br />
else {<br />
$this->client = new SoapClient($wsdl, array(<br />
'soap_version' => SOAP_1_2,<br />
- 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 1<br />
+ 'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP<br />
));<br />
}<br />
$this->mode = 'soap';</source><br />
<br />
Bei älteren Uberspaces, die vor dem Erscheinen der neuen PHP-Version erstellt worden sind, wird PHP 5.4 noch nicht automatisch aktiviert, dort müssen diese Änderungen nicht vorgenommen werden.<br />
<br />
Bei neueren Uberspaces ist es außerdem möglich, wenn es sein muss, auf eine ältere PHP-Version (beispielsweise 5.3) umzuschalten. Dies ist [https://uberspace.de/dokuwiki/development:php#php-version_einstellen hier] beschrieben.<br />
<br />
==WebhostOne==<br />
[http://www.contao.org/neuigkeiten/items/typolight-als-1click-installation.html 1 Klick Installation von TL]<br/>Man kann bei speziellen Wünschen httpd.conf und php.ini selbst anpassen. Wenn man sich nicht so gut damit auskennt, kann man sogar im kostenlosen SupportChat fragen, wie man welchen Befehl schreiben muss.<br />
==World4You==<br />
Live Update URL ev. vom Support freischalten lassen. Contao als Easy-Install im Kundencenter verfügbar.</div>BugBusterhttps://de.contaowiki.org/Transifex_mit_TX_ClientTransifex mit TX Client2015-03-01T15:55:15Z<p>BugBuster: </p>
<hr />
<div>[[Category:Transifex]]<br />
[[Category:Dev_HOWTOS]]<br />
[[Category:Development]]<br />
[[Category:Extensions]]<br />
TODO: Folgt später.<br />
{{stub}}<br />
<< [[Transifex_–_Lokalisierungsplattform|Zum Hauptartikel]]<br />
=Was ist das?=<br />
Transifex bietet einen Client an zum Transfer der Sprachdateien.<br />
<br />
=Installation=<br />
Dazu registriert man sich unter [https://www.transifex.com/signup/ www.transifex.com/signup/] und kann dann den [http://docs.transifex.com/developer/client/setup Transifex-Client] downloaden. Den gibt es dort für Mac OS X, Linux und Windows.<br />
Die tx.exe legt man ab wo man möchte, am besten in ein Verzeichnis welches im Suchpfad liegt.<br />
<br />
Im Anschluss erstellt man eine ".transifexrc" Datei im eigenem Benutzerverzeichnis "c:\Users\[USERNAME]\" mit folgenden Inhalt:<br />
<br />
<source lang="ini"><br />
[https://www.transifex.com]<br />
hostname = https://www.transifex.com<br />
username = username<br />
password = password<br />
token =<br />
</source><br />
{{Achtung|Der Windows-Explorer kann keine Dateien mit Punkt beginnend erstellen - Notepad++ kann das.}}</div>BugBuster