Zum Inhalt springen

IMG_RESOURCE in userFunc verwenden

Erstellt am 2. Oktober 2017 · 4 Antworten · letzte Antwort am 24. Oktober 2017

Tags: PHP, Update & Upgrade, TYPO3 6.x, Frage

confuseddev ·

Ich habe aktuell die Aufgabe, eine Webseite von Typo3 4.6 auf 6.2 zu heben. Eine Migration hat soweit auch geklappt, nur habe ich Probleme mit der Portierung einer custom PHP-Funktion, die voher über das mittlerweile nicht mehr verfügbare PHP_Script eingebunden war.

Das Ziel der Funktion ist im Grunde genommen die Ausgabe eines image-srcsets für ein Bild aus einem Templavoila FCE.

Weil PHP-Script ja nun nicht mehr existiert, habe ich versucht das ganze auf eine userFunc mit eigener PHP Klasse umzubauen.
Die nötigen Argumente (Auflösung, bildpfad) werden auch alle korrekt an die Klasse/Methode übergeben. Nur IMG_RESOURCE macht scheinbar überhaupt nichts.

-----------------------

So sah das ganze in Typo3 4.6 aus und hat funktioniert:
(Einbindung in ein Theme über PHP_SCRIPT)

$src = $this->cObjGetSingle('TEXT',$conf['src.']);
.... //Übergabe der ganzen argumente

$content .= "<img";
if(is_array($resolutions)) foreach($resolutions as  $breakpoint=>$resolution) {
	$imgTSConfig = array();
	$imgTSConfig['file'] ='uploads/tx_templavoila/'.$src;
	$imgTSConfig['file.']['maxW'] = $resolution;
	$imgTSConfig['file.']['maxH'] = $resolution;
	$image = $this->cObj->IMG_RESOURCE($imgTSConfig); //$image ist der Pfad zu einem Bild!
...

-----------------------

Das ganze in 6.2:
(Einbindung via userFunc)

function responsiveImage($content = '', $conf = array())
    {
        $local_cObj = $this->cObj; // cObject
        $conf = $conf['userFunc.']; // ts config

        $src = $local_cObj->cObjGetSingle('TEXT', $conf['src.']);
        .... //Übergabe der ganzen argumente


        $content = "<img";
        if (is_array($resolutions)) foreach ($resolutions as $breakpoint => $resolution) {
            $imgTSConfig = array();
            $imgTSConfig['file'] = 'uploads/tx_templavoila/' . $src;
            $imgTSConfig['file.']['maxW'] = $resolution;
            $imgTSConfig['file.']['maxH'] = $resolution;
            $image = $local_cObj->IMG_RESOURCE($imgTSConfig); //HIER GEHT WAS SCHIEF! - $image ist immer leer
...

-----------------------

$imgTSConfig ist mit den richtigen Daten befüllt, daran dürfte es also nicht liegen. Ich vermute ja, dass ich IMG_RESOURCE irgendwie anders aufrufen muss. Aber wie? Da das ganze leider ohne Fehlermeldung fehlschlägt hab ich echt keinen Schimmer, was ich hier anders machen muss.

freeatweb ·

Hallo,

versuch mal, cObject anders zu referenzieren.

z.B.:
$local_cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');

Lg

confuseddev ·

Wenn ich dein Beispiel verwende, enthält $src nicht mehr den Namen des Bildes (kommt mir auch logisch vor, ich nehme mal an die Argumente werden dann nicht mehr richtig übergeben).

Hab auch mal probiert, das Obj aus deinem Code nur für die IMG_RESOURCE zu verwenden (kA ob das sinnvoll ist), das geht ebenfalls nicht.

Mittlerweile glaube ich fast, dass das am FAL liegt, der ist ja beim Umstieg 4.6->6.2 quasi komplett neu. Sollte das der Fall sein, muss ich mir wohl mal anschauen ob ich die ganzen TV-Templates irgendwie umbauen muss.

confuseddev ·

Ich wollte mal der Vollständigkeit halber mal noch die "Lösung" des Problems posten.

Ich hatte ImageMagick in meiner lokalen Installation nicht korrekt eingerichtet. Jup.

In Kombination mit der Zeile von freeatweb, die ich als

$imgresourcehelper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');

verwende, geht das ganze jetzt wie erwartet.

Also quasi so:

$local_cObj = $this->cObj; // cObject
$imgresourcehelper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');
$conf = $conf['userFunc.']; // ts config

$src = $local_cObj->cObjGetSingle('TEXT', $conf['src.']);
//... Übergabe der ganzen parameter

$content = "<img";
if (is_array($resolutions)) foreach ($resolutions as $breakpoint => $resolution) {
       $imgTSConfig = array();
       $imgTSConfig['file'] = 'uploads/tx_templavoila/' . $src;
       $imgTSConfig['file.']['maxW'] = $resolution;
       $imgTSConfig['file.']['maxH'] = $resolution;
       $image = $imgresourcehelper->IMG_RESOURCE($imgTSConfig);

//usw. usf.