TYPO3 - Scheduler: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 15: Zeile 15:
 
auf Mac mit XAMPP
 
auf Mac mit XAMPP
 
  /Applications/XAMPP/xamppfiles/bin/php /Applications/XAMPP/xamppfiles/htdocs/typo3_test/typo3/cli_dispatch.phpsh scheduler
 
  /Applications/XAMPP/xamppfiles/bin/php /Applications/XAMPP/xamppfiles/htdocs/typo3_test/typo3/cli_dispatch.phpsh scheduler
 +
 +
== 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 ===
 +
 +
<pre>
 +
...
 +
## 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
 +
);
 +
...
 +
</pre>
 +
 +
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'''
 +
 +
<pre>
 +
<?php
 +
return array(
 +
    'tx_gbimporter_import' => t3lib_extMgm::extPath('gbimporter', 'tasks/class.tx_gbimporter_import.php')
 +
);
 +
?>
 +
</pre>
 +
 +
Wie man sieht können wir hier auf den Code der Klasse referenzieren. Diese müssen wir nun natürlich noch anlegen.
 +
 +
=== PHP Code 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'''
 +
 +
<pre>
 +
<?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;
 +
}
 +
 +
}
 +
}
 +
        ...
 +
}
 +
?>
 +
</pre>

Version vom 5. Juli 2010, 10:31 Uhr

Links

Typo3 Command Line Interface (CLI)

Scheduler Cronjob

Benötigt Backend User _cli_scheduler

Aufruf

/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 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.

PHP Code 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;
			}

		}	
	}
        ...
}
?>