TYPO3 - Scheduler: Unterschied zwischen den Versionen
| Zeile 4: | Zeile 4: | ||
== Scheduler Cronjob == | == Scheduler Cronjob == | ||
| + | === Quickstart === | ||
| + | * Scheduler im TYPO3 installieren falls noch nicht aktiv | ||
| + | * User _cli_scheduler ohne besondere Rechte im TYPO3 Backend anlegen | ||
| + | * entweder Cronjob über Shell anlegen mit Scheduler aufruf (s.u.) | ||
| + | * oder bei Zugriff nur über php exec Funktion nutzen Beispiel all-inkl: | ||
| + | * Geschützter Ordner /cron/ anlegen | ||
| + | * scheduler.phpx anlegen (s.u.) | ||
| + | * über Administration Cronjob anlegen | ||
| + | |||
| + | === Erläuterung === | ||
Benötigt Backend User _cli_scheduler | Benötigt Backend User _cli_scheduler | ||
Version vom 2. März 2011, 13:19 Uhr
Links
Typo3 Command Line Interface (CLI)
Scheduler Cronjob
Quickstart
- Scheduler im TYPO3 installieren falls noch nicht aktiv
- User _cli_scheduler ohne besondere Rechte im TYPO3 Backend anlegen
- entweder Cronjob über Shell anlegen mit Scheduler aufruf (s.u.)
- oder bei Zugriff nur über php exec Funktion nutzen Beispiel all-inkl:
- Geschützter Ordner /cron/ anlegen
- scheduler.phpx anlegen (s.u.)
- über Administration Cronjob anlegen
Erläuterung
Benötigt Backend User _cli_scheduler
Aufruf allgemein
/pfad/zu/php /pfad/zu/typo3/cli_dispatch.phpsh scheduler
z.B.
/usr/local/bin/php /home/bob/www/typo3/cli_dispatch.phpsh scheduler
auf Mac mit XAMPP
/Applications/XAMPP/xamppfiles/bin/php /Applications/XAMPP/xamppfiles/htdocs/typo3_test/typo3/cli_dispatch.phpsh scheduler
Scheduler Cronjob auf all Inkl Servern
- Datei mit Endung .phpx anlegen. Am besten in ein Verzeichnis mit Namen /cronjobs oder /tasks o.ä. Das Skript muß für php ausführbar sein.
- Eventuell Verzeichnis schützen (über kasserver mit htaccess Schutz).
- Die enthaltene exec Funktion muß den absoluten Pfad zum Skript bekommen.
Beispiel:
cron/scheduler.phpx
<?php
exec("php /www/htdocs/w00c43b9/typo3/cli_dispatch.phpsh scheduler",$ausgabe);
echo "
";
print_r($ausgabe);
echo "";
?>
Scheduler in eigener Extension
Beispiel gbimporter
Der gbimporter importiert per Cronjob entfernte .csv Dateien und liest sie in die TYPO3 Datenbank ein. Die benötigten Daten legt man als Datensatz im Backend an. Die Extension ist folgendermaßen aufgebaut.
Damit wir den Scheduler nutzen können müssen wir Folgendes tun:
Scheduler Task in der ext_localconf.php registrieren
... ## Scheduler Aufgabe anmelden (ab Version 4.3) $TYPO3_CONF_VARS['SC_OPTIONS']['scheduler']['tasks']['tx_gbimporter_import'] = array( 'extension' => $_EXTKEY, // Extension Key ;-) 'title' => 'GB Importer', // Der Titel der Aufgabe 'description' => 'Importieren von CSV Daten per Cronjob', // Die Beschreibung der Aufgabe // 'additionalFields' => 'tx_extkey_TaskName_AdditionalFieldProvider' // Zusätzliche Felder ); ...
Somit weiß TYPO3 daß es einen task tx_gbimporter_import geben soll der über den Scheduler ausgeführt werden darf, und wie es den Task im Backend anzeigen muß. Über die additionalFields könnte man zusätzliche Felder im Backend anzeigen die man für weitere Einstellungen nutzen könnte (siehe weiterführende Links)
Scheduler Task über ext_autoload.php laden
Damit TYPO3 nun noch weiß was es bei Aufruf der Aufgabe tx_gbimporter_import tun soll brauchen wir eine passende Klasse die den auszuführenden php Code enthält. Diese laden wir einfach über den autoload Mechanismus: Enthält eine Extension die Datei ext_autoload.php, wird diese automatisch beim initialisieren der Extension ausgeführt. Daher können wir in dieser Datei die Klasse class.tx_gbimporter_import laden:
ext_autoload.php
<?php
return array(
'tx_gbimporter_import' => t3lib_extMgm::extPath('gbimporter', 'tasks/class.tx_gbimporter_import.php')
);
?>
Wie man sieht können wir hier auf den Code der Klasse referenzieren. Diese müssen wir nun natürlich noch anlegen.
Funktionen für den Task anlegen
Wie im vorherigen Schritt angegeben legen wir die Datei
task/class.tx_gbimporter_import.php
an. Diese erweitert die TYPO3 Klasse
tx_scheduler_Task
und enthält mindestens die Funktion execute(), die beim Start des Tasks aufgerufen wird. Damit der Scheduler entscheiden kann ob der Cronjob funktioniert hat, muß die Funktion true oder false zurückgeben
class.tx_gbimporter_import.php
<?php
class tx_gbimporter_import extends tx_scheduler_Task {
public function execute() {
$this->init();
foreach($this->arrConfigData as $configKey=>$arrConfig){
$this->configUid = $arrConfig['uid'];
...
if($this->getRemoteFile(...)){
// delete old Data on this Page
$this->deleteOldData(...);
// insert new Data on this Page
$this->insertNewData(...);
return true;
}else{
return false;
}
}
}
...
}
?>