TYPO3 CMS  TYPO3_7-6
TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface Interface Reference
Inheritance diagram for TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface:
TYPO3\CMS\Backend\ViewHelpers\AvatarViewHelper TYPO3\CMS\Belog\ViewHelpers\Be\PagePathViewHelper TYPO3\CMS\Belog\ViewHelpers\ErrorIconViewHelper TYPO3\CMS\Belog\ViewHelpers\FormatDetailsViewHelper TYPO3\CMS\Belog\ViewHelpers\HistoryEntryViewHelper TYPO3\CMS\Belog\ViewHelpers\IsExtensionLoadedViewHelper TYPO3\CMS\Belog\ViewHelpers\UsernameViewHelper TYPO3\CMS\Belog\ViewHelpers\WorkspaceTitleViewHelper TYPO3\CMS\Beuser\ViewHelpers\ArrayElementViewHelper TYPO3\CMS\Beuser\ViewHelpers\Display\PagesViewHelper TYPO3\CMS\Beuser\ViewHelpers\Display\SysFileMountsViewHelper TYPO3\CMS\Beuser\ViewHelpers\Display\SysLanguageViewHelper TYPO3\CMS\Beuser\ViewHelpers\EditRecordViewHelper TYPO3\CMS\Beuser\ViewHelpers\IssueCommandViewHelper TYPO3\CMS\Beuser\ViewHelpers\PermissionsViewHelper TYPO3\CMS\Beuser\ViewHelpers\RemoveUserViewHelper TYPO3\CMS\Beuser\ViewHelpers\SpriteIconForRecordViewHelper TYPO3\CMS\Beuser\ViewHelpers\SwitchUserViewHelper TYPO3\CMS\Core\ViewHelpers\IconViewHelper TYPO3\CMS\Cshmanual\ViewHelpers\FormatViewHelper TYPO3\CMS\Documentation\ViewHelpers\FormatsViewHelper TYPO3\CMS\Extensionmanager\ViewHelpers\Format\ImplodeViewHelper TYPO3\CMS\Extensionmanager\ViewHelpers\Format\JsonEncodeViewHelper TYPO3\CMS\Extensionmanager\ViewHelpers\InstallationStateCssClassViewHelper TYPO3\CMS\Extensionmanager\ViewHelpers\TimeSinceLastUpdateViewHelper TYPO3\CMS\Extensionmanager\ViewHelpers\Typo3DependencyViewHelper TYPO3\CMS\Filelist\ViewHelpers\Uri\DeleteFileViewHelper TYPO3\CMS\Filelist\ViewHelpers\Uri\EditFileContentViewHelper TYPO3\CMS\Filelist\ViewHelpers\Uri\EditSysFileMetadataRecordViewHelper TYPO3\CMS\Filelist\ViewHelpers\Uri\RenameFileViewHelper TYPO3\CMS\Filelist\ViewHelpers\Uri\ReplaceFileViewHelper TYPO3\CMS\Fluid\ViewHelpers\AliasViewHelper TYPO3\CMS\Fluid\ViewHelpers\BaseViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\Buttons\CshViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\Buttons\IconViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\Buttons\ShortcutViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\InfoboxViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\PageInfoViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\PagePathViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\Security\IfAuthenticatedViewHelper TYPO3\CMS\Fluid\ViewHelpers\Be\Security\IfHasRoleViewHelper TYPO3\CMS\Fluid\ViewHelpers\CaseViewHelper TYPO3\CMS\Fluid\ViewHelpers\CommentViewHelper TYPO3\CMS\Fluid\ViewHelpers\CountViewHelper TYPO3\CMS\Fluid\ViewHelpers\DebugViewHelper TYPO3\CMS\Fluid\ViewHelpers\ElseViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\BytesViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\CaseViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\CdataViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\CropViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\CurrencyViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\DateViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\HtmlentitiesDecodeViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\HtmlspecialcharsViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\HtmlViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\Nl2brViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\NumberViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\PaddingViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\PrintfViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\RawViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\StripTagsViewHelper TYPO3\CMS\Fluid\ViewHelpers\Format\UrlencodeViewHelper TYPO3\CMS\Fluid\ViewHelpers\ForViewHelper TYPO3\CMS\Fluid\ViewHelpers\IfViewHelper TYPO3\CMS\Fluid\ViewHelpers\Link\TypolinkViewHelper TYPO3\CMS\Fluid\ViewHelpers\RenderViewHelper TYPO3\CMS\Fluid\ViewHelpers\SectionViewHelper TYPO3\CMS\Fluid\ViewHelpers\Security\IfAuthenticatedViewHelper TYPO3\CMS\Fluid\ViewHelpers\Security\IfHasRoleViewHelper TYPO3\CMS\Fluid\ViewHelpers\SpacelessViewHelper TYPO3\CMS\Fluid\ViewHelpers\SwitchViewHelper TYPO3\CMS\Fluid\ViewHelpers\ThenViewHelper TYPO3\CMS\Fluid\ViewHelpers\TranslateViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\EmailViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\ExternalViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\ImageViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\PageViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\ResourceViewHelper TYPO3\CMS\Fluid\ViewHelpers\Uri\TypolinkViewHelper TYPO3\CMS\IndexedSearch\ViewHelpers\Format\DateTimeViewHelper TYPO3\CMS\IndexedSearch\ViewHelpers\Format\FlagValueViewHelper TYPO3\CMS\IndexedSearch\ViewHelpers\Format\GroupListViewHelper TYPO3\CMS\IndexedSearch\ViewHelpers\PageBrowsingResultsViewHelper TYPO3\CMS\IndexedSearch\ViewHelpers\PageBrowsingViewHelper TYPO3\CMS\Install\ViewHelpers\ConstantViewHelper TYPO3\CMS\Install\ViewHelpers\File\ExistsViewHelper TYPO3\CMS\Install\ViewHelpers\File\ImageDimensionViewHelper TYPO3\CMS\Install\ViewHelpers\File\RelativePathViewHelper TYPO3\CMS\Install\ViewHelpers\File\SizeViewHelper TYPO3\CMS\Install\ViewHelpers\Format\CropViewHelper TYPO3\CMS\Install\ViewHelpers\Format\ImageMagickCommandsViewHelper TYPO3\CMS\Install\ViewHelpers\Format\PhpErrorCodeViewHelper TYPO3\CMS\Install\ViewHelpers\Object\ArrayValueByKeyViewHelper TYPO3\CMS\Install\ViewHelpers\PhpInfoViewHelper TYPO3\CMS\Reports\ViewHelpers\IconViewHelper TYPO3\CMS\Scheduler\ViewHelpers\ModuleLinkViewHelper TYPO3\CMS\SysNote\ViewHelpers\DeleteLinkViewHelper TYPO3\CMS\SysNote\ViewHelpers\EditLinkViewHelper

Public Member Functions

 compile ($argumentsVariableName, $renderChildrenClosureVariableName, &$initializationPhpCode, \TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode $syntaxTreeNode, \TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler $templateCompiler)
 

Static Public Member Functions

static renderStatic (array $arguments, \Closure $renderChildrenClosure, \TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface $renderingContext)
 

Detailed Description

If a ViewHelper implements CompilableInterface, it can directly influence the way the syntax tree is compiled to a static PHP file.

For now, this class is NO API.

There a two ways of using the Compilable Interface.

Implementing renderStatic()

A ViewHelper which implements CompilableInterface and the renderStatic method is called statically through the renderStatic method; and no instance of the ViewHelper is created.

This is a case which you can implement if you do not access any internal state in the ViewHelper. This means the following should be true:

  • you do not access $this->arguments, but only the function arguments of render()
  • you do not call $this->renderChildren()

If you have performance problems because the calling overhead of a ViewHelper is too big, you should implement renderStatic().

Implementing compile()

Some ViewHelpers want to directly manipulate the PHP code which is created in the compilation run. This is, however, only necessary in very special cases, like in the AbstractConditionViewHelper or when a ViewHelper is potentially called thousands of times.

A ViewHelper which wants to directly influence the resulting PHP code must implement the CompilableInterface, and only implement the compile() method.

Definition at line 48 of file CompilableInterface.php.

Member Function Documentation

◆ compile()

TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface::compile (   $argumentsVariableName,
  $renderChildrenClosureVariableName,
$initializationPhpCode,
\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode  $syntaxTreeNode,
\TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler  $templateCompiler 
)

This method is called on compilation time.

It has to return a single PHP statement without semi-colon or newline at the end, which will be embedded at various places.

Furthermore, it can append PHP code to the variable $initializationPhpCode. In this case, all statements have to end with semi-colon and newline.

Outputting new variables

If you want create a new PHP variable, you need to use $templateCompiler->variableName('nameOfVariable') for this, as all variables need to be globally unique.

Return Value

Besides returning a single string, it can also return the constant ::SHOULD_GENERATE_VIEWHELPER_INVOCATION which means that after the $initializationPhpCode, the ViewHelper invocation is built as normal. This is especially needed if you want to build new arguments at run-time, as it is done for the AbstractConditionViewHelper.

Parameters
string$argumentsVariableNameName of the variable in which the ViewHelper arguments are stored
string$renderChildrenClosureVariableNameName of the closure which can be executed to render the child nodes
string$initializationPhpCode
\TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode$syntaxTreeNode
\TYPO3\CMS\Fluid\Core\Compiler\TemplateCompiler$templateCompiler
Returns
string

◆ renderStatic()

static TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface::renderStatic ( array  $arguments,
\Closure  $renderChildrenClosure,
\TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface  $renderingContext 
)
static

Here follows a more detailed description of the arguments of this function:

$arguments contains a plain array of all arguments this ViewHelper has received, including the default argument values if an argument has not been specified in the ViewHelper invocation.

$renderChildrenClosure is a closure you can execute instead of $this->renderChildren(). It returns the rendered child nodes, so you can simply do $renderChildrenClosure() to execute it. It does not take any parameters.

$renderingContext contains references to the TemplateVariableContainer, the ViewHelperVariableContainer and the ControllerContext.

Parameters
array$arguments
\Closure$renderChildrenClosure
\TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface$renderingContext
Returns
string the resulting string which is directly shown

Referenced by TYPO3\CMS\Beuser\ViewHelpers\SpriteIconForRecordViewHelper\render(), and TYPO3\CMS\Fluid\ViewHelpers\Be\PageInfoViewHelper\render().