#typo3 #fluid
#typo3 #жидкость
Вопрос:
У меня есть 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 наследует от: TYPO3CMSFluidCoreViewHelperAbstractViewHelper
Комментарии:
1. Я предполагаю, что это поле
media
таблицыpages
, правильно? Вы могли бы рассмотреть возможность использования доступного<f:image>
view-helper… Вызывается ли компонент view из контекста Extbase или с помощью какого-либо TypoScriptFLUIDTEMPLATE
?2. @OliverHader извините, код был вставлен с другого веб-сайта, я отредактировал его, чтобы он более точно соответствовал моему коду, но это не влияет на эту проблему. Этот ViewHelper вызывается внутри шаблона Fluid, размещенного в том же расширении (что и расширение ViewHelper), поэтому я предполагаю, что это контекст Extbase. Я хотел бы использовать <f:image>, но я не знаю, как использовать его в коде PHP?
Ответ №1:
Прежде всего, вы должны указать, какую версию TYPO3 вы используете, и использует ли ваше расширение Extbase или старый код на основе pibased.
Я предполагаю, что это Extbase, поскольку вы наследуете от viewhelper с пространством имен. Мой совет — взглянуть на исходный f:image
код viewhelper ( TYPO3CMSFluidViewHelpersImageViewHelper
) и скопировать то, что вам нужно.
сначала добавьте это в верхнюю часть вашего viewhelper:
/**
* @var TYPO3CMSExtbaseServiceImageService
* @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.
Комментарии:
1. Спасибо, это отлично работает. Единственная проблема заключалась в том, что внедрение зависимостей в моем случае не сработало — я очистил кэш (папку кэша и значок кэша в фоновом режиме) и заменил CR LF на LF — не помогло. Из-за этого мне пришлось получить этот объект таким образом
TYPO3CMSCoreUtilityGeneralUtility::makeInstance("TYPO3\CMS\Extbase\Service\ImageService")
.2. Спасибо, мне пришлось предоставить 3 аргумента
getImage
функции$image = $this->imageService->getImage($filename, null, false);
, используя TYPO3 8.7. Я тоже столкнулся с проблемой инъекции Алана. Решение для меня былоDump Autoload Information
в инструменте установки.3. Вам всегда нужно обновлять файлы автозагрузки при создании нового класса. Вы можете использовать его либо с «Сбросом информации о автозагрузке», либо просто удалить файлы внутри
typo3temp/autoload