Kurzer Abriss um was es geht: in meiner Extension können Bilddatensätze und Galerien angelegt werden, die wiederum die Bilddatensätze enthalten können, Die Galerien werden dann über ein FE Plugin in die Seite eingebunden. Die Galerien werden im FE aber nicht ausgegeben sondern nur die entsprechenden Links die über den eID Mechanismus einen JSON-String zurück liefern, der dann Clientseitig verarbeitet wird. Dafür ist es aber notwending, dass die Bilder beim Speichern bereits skaliert werden. Daher greife ich per hook in den Speichervorgang ein:
<?php
require_once(PATH_t3lib . 'class.t3lib_page.php');
require_once(PATH_tslib . 'class.tslib_fe.php');
require_once(PATH_tslib . 'class.tslib_pibase.php');
require_once(PATH_tslib . 'class.tslib_content.php');
require_once(PATH_t3lib . 'class.t3lib_stdgraphic.php');
require_once(PATH_tslib . 'class.tslib_gifbuilder.php');
require_once(PATH_t3lib . 'class.t3lib_timetrack.php');
require_once(PATH_t3lib . 'class.t3lib_tsparser_ext.php');
require_once(t3lib_extMgm::extPath('tarvslider') . 'pi1/class.tx_tarvslider_pi1.php');
/**
* @param $status is 'new' or 'update'
* @param $table tablename
* @param $id tablerow id
* @param $fieldArray array:updated tablefields
* @param $pObj tcemain
*/
class tx_tarvslider_tcemainprocdm {
function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$pObj) {
$id = ($status == 'new') ? $pObj->substNEWwithIDs[$id] : $id;
switch ($table){
case 'tx_tarvslider_gal':
# ...
break;
case 'tt_content':
$pid = $pObj->checkValue_currentRecord['pid'];
$this->updateCurrentImageSet($pObj,$id,$pid);
break;
}
}
...
}
t3lib_div::makeInstance(tx_tarvslider_tcemainprocdm);
?>
Danach wird in updateCurrentImageSet erst einmal ein FEuser und cObj instanziiert:
<?php
...
/**
* @param $pObj tcemain
* @param $id tablerow id
* @param $pid page id
*
*/
function updateCurrentImageSet($pObj,$id,$pid) {
# new plugin obejct
$pi1_Obj = t3lib_div::makeInstance('tx_tarvslider_pi1');
# creating TSFE and cObj
$pi1_Obj->cObj = $this->loadFeUserSession($pid,'tx_tarvslider_pi1');
if ($pi1_Obj->cObj->data->uid != $id && $pi1_Obj->cObj->data->uid != $pid){
# putting cObj-data width data from currentRecord
$data = $pObj->checkValue_currentRecord;
$pi1_Obj->cObj->data = $data;
}
# init fe plugin
$pi1_Obj->init($this->conf);
# run through all images associated with current record and scale them if neccessary
$pi1_Obj->updateImageSize($id);
}
?>
In updateImageSize soll/wird dann mit
<?php
$this->cObj->IMG_RESOURCE($file);
?>
das Bild ggf. skaliert.
updateImageSize hab ich auch in der main Funktion des FE-Plugins, damit ich den Aufruf über ein "echtes" cObj debuggen kann, das klappt einwandfrei.
Aufgerufen über Den BE hook scheitert der Aufruf kurz vor Aufrufen der ImageMagick Funktion im tslib_cObj an:
$GLOBALS['TSFE']->tmpl->fileCache[$hash]['origFile_mtime'] = @filemtime($theImage); // This is needed by tslib_gifbuilder, ln 100ff in order for the setup-array to create a unique filename hash.
filemtime($theImage) liefert in dem Fall false zurück.
$theImage ist aber in beiden Fällen das gleiche, also "rel/path/tofile/image.jpg"
Hier Stelle ich mir also die Frage, warum filemtime im FE das Bild trotz relativen Pfad validiert und im BE nicht?
An der Stelle komme ich einfach nicht mehr weiter, Vielleicht hat der ein oder andere ja doch einen Passenden Tip.
------
Der Vollständigkeits halber noch die methode, wie der FEuser im BE instanziiert wird:
<?php
/**
* init TSFE in Backend
* FE Plugin configuration is written to $this->conf
* @param $pid page id
* @param $extKey fe extension name
* @return cObj
*/
function loadFeUserSession($pid,$extKey){
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = t3lib_div::makeInstance(t3lib_timeTrack);
$GLOBALS['TT']->start();
}
if (!is_object($GLOBALS['TSFE']) && $pid) {
# Builds TSFE object
$GLOBALS['TSFE'] = t3lib_div::makeInstance('tslib_fe', $GLOBALS['TYPO3_CONF_VARS'],$pid,0,0,0,0,0,0);
# Builds sub objects
$GLOBALS['TSFE']->tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
$GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');
# init template
$GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log time-performance information
$GLOBALS['TSFE']->tmpl->init();
$rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($pid);
# This generates the constants/config + hierarchy info for the template.
$GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine,$template_uid);
$GLOBALS['TSFE']->tmpl->generateConfig();
$GLOBALS['TSFE']->tmpl->loaded=1;
# Get config array and other init from pagegen
$GLOBALS['TSFE']->getConfigArray();
$GLOBALS['TSFE']->linkVars = ''.$GLOBALS['TSFE']->config['config']['linkVars'];
if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP']) {
foreach (t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1) as $temp_p) {
$GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
}
}
$this->conf = $GLOBALS['TSFE']->tmpl->setup['plugin.'][$extKey . '.'];
# cObj
$GLOBALS['TSFE']->newCObj();
}
return $GLOBALS['TSFE']->cObj;
}
?>