2016-10-14 5 views
2

Ich habe einen ViewHelper, der einige Bilder verarbeitet. Ich habe einen Bildpfad zu einer Originaldatei. Ich muss dieses Bild verkleinern.Bildgröße in benutzerdefiniertem ViewHelper ändern

Gibt es einen PHP-Code, den ich in TYPO3 verwenden kann?

Ich versuchte dies:

$imgPath = 'img/path/from_database.jpg 
$imgConf = array(); 
$imgConf['file'] = $imgPath; 
$imgConf['altText'] = "Sample alt text."; 
$image = $this->cObj->IMAGE($imgConf); 

aber ich bin immer diese Ausnahme: "Call to a member function IMAGE() on null"

My View Helfer erbt von: \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper

+0

Ich nehme an, dass dies das Feld 'media' der Tabelle' pages' ist, richtig? Sie könnten in Erwägung ziehen, den verfügbaren '' View-Helfer zu verwenden ... Wird die View-Komponente aus einem Extbase-Kontext oder von einem TypoScript 'FLUIDTEMPLATE' aufgerufen? –

+0

@OliverHader Entschuldigung, der Code wurde von der anderen Website eingefügt, ich habe ihn jetzt bearbeitet, um meinen Code besser zu finden, aber das hat keine Auswirkungen auf dieses Problem. Dieser ViewHelper wird innerhalb der Fluid-Vorlage aufgerufen, die in der gleichen Erweiterung (wie die Erweiterung von ViewHelper) liegt, also nehme ich an, dass es der Extbase-Kontext ist. Ich möchte verwenden, aber ich weiß nicht, wie man es in PHP-Code verwendet? – Alan

Antwort

4

Zunächst sollten Sie sagen, was TYPO3-Version verwenden und Wenn Ihre Erweiterung Extbase oder den alten pibased-Code verwendet.

Ich denke, es ist Extbase, seit Sie von einem Namespaced Viewhelper erben. Mein Rat würde sein, einen Blick auf den ursprünglichen f:image Viewhelper-Code (TYPO3\CMS\Fluid\ViewHelpers\ImageViewHelper) zu werfen und zu kopieren, was Sie brauchen.

erste fügen Sie diese auf den oberen Teil von Ihnen View Helfer:

/** 
* @var \TYPO3\CMS\Extbase\Service\ImageService 
* @inject 
*/ 
protected $imageService; 

Dann wird der Code in Ihrer Methode

 $image = $this->imageService->getImage($imgPath); 

     // you have to set these variables or remove if you don't need them 
     $processingInstructions = array(
      'width' => $width, 
      'height' => $height, 
      'minWidth' => $minWidth, 
      'minHeight' => $minHeight, 
      'maxWidth' => $maxWidth, 
      'maxHeight' => $maxHeight, 
      'crop' => $crop, 
     ); 
     $processedImage = $this->imageService->applyProcessingInstructions($image, $processingInstructions); 
     $imageUri = $this->imageService->getImageUri($processedImage); 

$imageUri hält nun den Pfad zur Größe geänderte Bild.

PS: Das von Ihnen kopierte Beispiel stammt vom alten pibased-System, das seit dem 7.x-Zweig nicht mehr existiert.

+0

Danke, das funktioniert super. Das einzige Problem war, dass die Abhängigkeitsinjektion in meinem Fall nicht funktionierte - ich löschte den Cache (Cache-Ordner und Cache-Symbol im Backend) und ersetzte CR LF durch LF - half nicht. Aus diesem Grund musste ich dieses Objekt auf diese Weise erhalten: \ TYPO3 \ CMS \ Core \ Utility \ GeneralUtility :: makeInstance ("TYPO3 \\ CMS \\ Extbase \\ Service \\ ImageService") '. – Alan