2016-10-11 3 views
3

Я использую liquidcontent, и я хотел бы сделать плагин в элементе контента. Поэтому я создал следующий COA:TYPO3 - передать переменную из Fluid в cObject

form = COA 
form { 
    15 < tt_content.list.20.extname_form 
    15.settings.id = | 
} 

Этот объект визуализируется в шаблоне жидкости с помощью cooject viewhelper.

<f:cObject typoscriptObjectPath="form" data="testId" /> 

Процесс рендеринга отлично работает.

Проблема в том, что я не могу получить доступ к переменной данных внутри объекта COA. В шаблоне формы содержимое переменной settings.id равно |, а не testId.

Я попытался отобразить плагин с помощью vhs viewhelp request.render, но также есть проблема с передачей переменных.

<v:render.request action="request" controller="Form" extensionName="ExtName" pluginName="Form" vendorName="VendorName" arguments="{_all}" /> 

ответ

0

Если определить строку в качестве данных используют .current = 1 вариант stdWrap:

form = COA 
form { 
    15 < tt_content.list.20.extname_form 
    15.settings.id.current = 1 
} 

Но ваш «extname_form» следует использовать stdWrap от настроек иначе вы должны использовать «переменные»:

form = COA 
form { 
    15 < tt_content.list.20.extname_form 
    15.variables.id = TEXT 
    15.variables.id.current = 1 
} 

Пример использования stdWrap для настройки:

form = COA 
form { 
    15 < tt_content.list.20.extname_form 
    15.settings.id.current = 1 
} 

В вашем действии контроллера:

/** @var \TYPO3\CMS\Extbase\Service\TypoScriptService $typoScriptService */ 
    $typoScriptService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Service\TypoScriptService::class); 
    $typoScriptSettings = $typoScriptService->convertTypoScriptArrayToPlainArray($this->settings); 
    $this->settings['id'] = $this->configurationManager->getContentObject()->stdWrap($typoScriptSettings['id'], $typoScriptSettings['id.']); 

Теперь ваш settings.id разбирается stdWrap и должен содержать ваш cObjectViewHelper данных.

+0

Благодарим за помощь. Я пробовал обе версии, но я не могу передать переменную в шаблон жидкости формы. –

+0

В вашем расширении '' 'extname_form'' может быть что-то, зависящее от доступа к переменным. Примеры с «переменными» работают только в том случае, если '' 'tt_content.list.20.extname_form''' является объектом FLUID_TEMPLATE. Не зная расширения, вам необходимо проанализировать настройки в контроллере и назначить их вашему представлению. –

+0

Я не могу заставить его работать. Также в контроллере формы я не могу получить доступ к переменным. Плагин формы также реализуется с помощью шаблона для жидкостей. Если я использую первую версию, я вижу переменную в шаблоне. Проблема в том, что содержимое переменной не принимается. –

0

просто какая-то помощь (возможно) в вашей жидкости шаблона вы можете использовать:

<f:debug>{_all}</f:debug> 

так что вы можете проверить много доступной информации, в противном случае в вас контроллер:

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($yourVariable); 
4

Существует другой используя глобальный реестр для переменных. TYPO3 содержит так называемый «РЕГИСТР ЗАГРУЗКИ», который означает статическое хранилище для переменных. Расширение VHS содержит ViewHelpers взаимодействовать с этим хранения:

https://fluidtypo3.org/viewhelpers/vhs/master/Variable/Register/GetViewHelper.html

Используя set вариант можно добавить переменную, а затем вызвать f:cObject и независимо от того, насколько глубоко внутри рендеринга стека ваш следующий шаблон жидкости сидит, используя Вариант get извлекает значение.

Очень полезно, если, например, вы используете элементы контента с другими вложенными элементами контента, например. извлекать или переопределять значение при любой глубине вложенности.

NB: также доступен в TypoScript, а также пользовательский PHP, выполняемый через TYPO3, с использованием https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/LoadRegister/Index.html. Таким образом, в целом это может быть намного проще, гораздо проще обрабатывать и определенно более гибко, чем строгое прохождение аргументов.

Смежные вопросы