Как вызвать пользовательскую программу просмотра TYPO3 из файла typoscript (.ts) и получить ответ от программы просмотра? - PullRequest
0 голосов
/ 28 мая 2020

Я попытался вызвать пользовательскую программу просмотра в TYPO3 9.5.9 из файла опечаток. Но это не работает. Пример для viewhelper приведен ниже:

<?php
namespace MyVendor\BlogExample\ViewHelpers;

use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

class GravatarViewHelper extends AbstractViewHelper
{
   use CompileWithRenderStatic;

   public static function renderStatic(
       array $arguments,
       \Closure $renderChildrenClosure,
       RenderingContextInterface $renderingContext
   ) {
       return 'World';
   }
}

Как я могу вызвать этот пользовательский viewhelper из файла typoscript (.ts) и получить ответ?

Ответы [ 3 ]

2 голосов
/ 31 мая 2020

Я бы посоветовал вам выделить функцию, которая «делает то, что делает ViewHelper», в отдельный метод и сделать возможным вызов этого метода как метод publi c, и заставить его получать требуемые PHP аргументы функции. (например, адрес электронной почты пользователя) * завернутый в array $parameters.

Этот метод затем может быть вызван из ViewHelper, а также из TypoScript. TypoScript будет выглядеть примерно так:

lib.myGravatarObject = USER
lib.myGravatarObject.userFunc = MyVendor\ExtensionName\GravatarRenderer
lib.myGravatarObject.userEmail = foo@bar.com

Если вы назовете свойства array $parameters так же, как ваши аргументы ViewHelper, вы можете просто передать $this->arguments или $arguments из ViewHelper (бывший если вы реализуете render(), последнее, если вы реализуете renderStatic()). Это также делает более прозрачным использование в TS тех же имен свойств, что и для аргументов ViewHelper.

1 голос
/ 28 мая 2020

Вы можете использовать объект FLUIDTEMPLATE cObject с минимальным шаблоном (например, через свойство шаблона):

10 = FLUIDTEMPLATE
10 {
   template.cObject = TEXT
   template.cObject.value(
      <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:mv="http://typo3.org/ns/MyVendor/BlogExample/ViewHelpers" data-namespace-typo3-fluid="true">
      <mv:GravatarViewHelper />
   )
}

Кажется, это возможно. Но как уже спрашивал Бернд: зачем это делать?

0 голосов
/ 28 мая 2020

Зачем вам это делать? (опишите свой вариант использования)

Viewhelpers предназначены для использования в шаблонах FLUID, там у вас есть правильный и подходящий контекст.

Если вы хотите вызвать функцию PHP непосредственно внутри typoscript у вас есть возможность userfunc ( руководство ). Но вам нужно предоставить необходимый контекст.

...