2016-10-14 3 views
2

У меня есть ViewHelper, обрабатывающий некоторые изображения. У меня есть путь к исходному файлу. Мне нужно изменить размер этого изображения.Изменить размер изображения в пользовательском ViewHelper

Есть ли код PHP, который я могу использовать в TYPO3 для этого?

Я попытался это:

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

, но я получаю это исключение: "Call to a member function IMAGE() on null"

Мой ViewHelper наследует от: \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper

+0

Я предполагаю, что это поле 'media' таблицы' pages', правильно? Вы можете подумать, использовать доступный '' view-helper ... Является ли компонент вида вызванным из контекста Extbase или некоторым TypoScript 'FLUIDTEMPLATE'? –

+0

@OliverHader извините, код был вставлен с другого веб-сайта, теперь я отредактировал его, чтобы ближе соответствовать моему коду, но это не влияет на эту проблему. Этот ViewHelper вызывается внутри шаблона Fluid, размещенного в том же расширении (как расширение ViewHelper), поэтому я предполагаю, что это контекст Extbase. Я хотел бы использовать , но я не знаю, как его использовать в PHP-коде? – Alan

ответ

4

Прежде всего, вы должны сказать, что TYPO3 версии вы используете, и если ваше расширение использует Extbase или старый pibased-код.

Я предполагаю, что это Extbase, так как вы наследуете от хранилища с именами. Моим советом было бы взглянуть на исходный код (TYPO3\CMS\Fluid\ViewHelpers\ImageViewHelper) и скопировать то, что вам нужно.

первый добавить это к верхней части вы ViewHelper:

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

Затем код в методе

 $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 теперь держит путь к измененному размеру изображения.

PS: Пример, который вы скопировали, относится к старой pibased системе, которая больше не существует с ветки 7.x.

+0

Спасибо, что отлично работает. Единственная проблема заключалась в том, что инъекция зависимостей не работала в моем случае - я очистил кеш (папка кэша и значок кэша в исходном тексте) и заменил CR LF на LF - не помогло. Из-за этого мне пришлось получить этот объект таким образом '\ TYPO3 \ CMS \ Core \ Utility \ GeneralUtility :: makeInstance (" TYPO3 \\ CMS \\ Extbase \\ Service \\ ImageService ")'. – Alan