Ich weiß nicht, ob das weiterhilft, aber ich habe mich gestern und heute auch mit dem Problem beschäftigt, ein Skript per Cronjob auszuführen, welches in das Typo3-Framework eingebettet ist. Das in diesem Thread genannte Tutorial bezieht sich m.W. auf T3-Versionen < 4.1. Mein Lösung für Typo3 4.1 bislang:
1.) Ich habe das Skript, welches per Cronjob ausgeführt werden soll, in den Ordner einer (beliebigen) bestehenden Extension kopiert.
2.) In der Datei ext_localconf.php dieser Extension habe ich folgende Zeile hinzugefügt:
$TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']['test'] = array('EXT:extentionname/pi1/test.php','_CLI_lowlevel');
Die Zeile sorgt dafür, dass ein sog. CLI-Key angelegt wird - zusammen mit dem Pfad, unter dem das auszuführende PHP-Skript zu finden ist.
Danach ggf. den T3-Cache leeren.
3.) In die Crontab des Servers muß man nun folgendes eintragen (ich mache das über Plesk):
/srv/www/vhosts/domain.de/httpdocs/typo3/cli_dispatch.phpsh test
Man ruft damit also nicht das Skript direkt auf, sondern eine Typo3-Datei namens "cli_dispatch.phpsh". Dieser übergibt man den zuvor angelegten CLI-Key. Über den Key weiß Typo3, welche Datei der Cronjob eigentlich wirklich ausführen möchte.
4.) Damit das Ganze funktioniert, muss man noch einen Backend-User namens "_cli_lowlevel" im Typo3-Backend anlegen.
Was mir noch unklar ist, ist die genaue Funktionsweise des Skriptes "cli_dispathc.phpsh" und die Bedeutung von _CLI_lowlevel beim Setzen des CLI-Keys.
OK, das funtioniert soweit.
Das Script läßt sich aufrufen.
Jetzt möchte ich in diesem Script aber Werte aus dem Flexform
benutzen.
Wie z.B. storagepid, dbName,dbPasswort usw.
Das muß dann doch irgendwie so gehen, wie in der Klasse der Extension.
Das habe ich jetzt eingebaut in dem aufzurufenden Sciipt.
require_once(t3lib_extMgm::extPath('extName').'pi1/class.tx_extname_pi1.php');
$this->flexValues= t3lib_div::makeInstance('tx_extename_pi1');
´
$pid=$this->flexValues->pi_getFFvalue($this->tslib_cObj->data['pi_flexform'], 'storagepid', 'sDEF');
Wie geht'n das?
Hm, da muss ich passen. Mit Flexforms habe ich mich noch nie beschäftigt. Ich könnte Dir höchstens sagen, wie Du auf im TS-Setup definierte Variablen (bzw. Constants) in Deinem "externen" Skript zugreifen kannst - denn die Variable $conf steht hier ja leider nicht zur Verfügung...
Das ginge dann so:
1.) Im Ordner der Extension die Datei "ext_typoscript_constants.txt" anlegen.
2.) In der Datei die nötigen Konstanten nach folgendem Muster definieren:
#cat=meinekategorie;type=;label=meinekonstante:meinerklärungstext plugin.user_meineextension_pi1.meinekonstante = meinwert
3.) Die Konstante müßte jetzt im Constant-Editor im T3-Backend zu sehen und editierbar sein (evtl. Cache leeren vorher)
4.) Im Ordner der Extension die Datei "ext_typoscript_setup.txt" anlegen.
5.) In der Datei die nötigen Variablen nach folgendem Muster definieren:
plugin.user_meineextension_pi1 {
meinekonstante = {$plugin.user_meineextension_pi1.meinekonstante}
}
6.) Im externen PHP-Skript kann man auf die Variable nun wie folgt zugreifen:
$conf=$GLOBALS["TSFE"]->tmpl->setup["plugin."]["user_meineextension_pi1"."."];
echo $conf["meinekonstante"];
das dürfte schwierig werden - Du müsstest ja die richtige Seite mit dem Plugin aufrufen.
Ich nutze eine andere Möglichkeit. Als Grundlage dient das php cronscript aus direct_mail - das lädt das komplette T3-Framework. Jetzt braucht man nur die ID des CEs, um die Flexform auszulesen:
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tt_content','uid='.$cid);
$row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
$flex=t3lib_div::xml2array($row['pi_flexform']);
Jetzt hat man die Flexform im Array und kann sie auswerten - die manuelle Methode.
Hallo Babyschlumpf,
constants- und setup.txt sind schon vorhanden.
Wenn ich jetzt irgendeine Konstante auslesen will, passiert nichts.
Im BE constant-editor steht was drin.
Hallo steffenk
habe ich auch versucht.
Wo kommt "$cid" her?
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tt_content','uid='.$cid);
$cid ist die ID des Contentelements mit der Flexform.
Wie kann ich die uid auslesen?
die musst Du dem Skript mitgeben - versuchs doch erstmal mit hardcoded.
Langsam verstehe ich gar nichts mehr.
Ist das die PageUid, wo das Plugin installiert ist?
Hardcoded alles schön und gut
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tt_content','uid='.$cid);
aber welche ziffer von 1 bis ? trage ich da ein?
Wo kommt diese her? Wie kann man die evtl auslesen?
ich versteh nicht, wie Du einen Cron hinbekommen willst, wenn Du mit ID eines CEs nichts anfangen kannst.
Die ID wird Dir beim Mouseover im BE angezeigt, ausserdem steht sie da, wenn man das Plugin bearbeitet.
Aha, beim Bearbeiten des CE steht ganz oben Pagecontent [100].
Den Cron bekomme ich ja hin, der Funktioniert auch.
Das was ich brauche, sind Variablen aus der Konfig.
Nun muß ich nur noch checken, weshalb ein Fehler beim Aufruf dieser Methode
kommt.
$flex=t3lib_div::xml2array($row['pi_flexform']);
Jetzt funktioniert es, so wie ich es haben will.
Danke steffenk
Aus danp_documentdirs habe ich mir zwei Funktionen geliehen, die genau den Feldnamen auslesen, welcher beötigt wird.