2017-08-01 107 views
0

我使用的控制器级别从TYPO3 8新的页面渲染通过initializeAction添加扩展名特定CSS和JS文件:TYPO3:如何通过控制器初始化动作和页面渲染器添加css和js文件?

public function initializeAction() 
{ 
    $extPath = ExtensionManagementUtility::siteRelPath(
     $this->request->getControllerExtensionKey() 
    ); 

    $extJs = $extPath . 'Resources/Public/Js/ext_booking_manager.min.js'; 
    $extCss = $extPath . 'Resources/Public/Css/ext_booking_manager.css'; 

    /** @var PageRenderer $pageRenderer */ 
    $pageRenderer = $this->objectManager->get(PageRenderer::class); 

    $pageRenderer->addCssFile($extCss); 
    $pageRenderer->addJsFooterFile(
     $extJs, 'text/javascript', false 
    ); 
} 

这是工作的罚款有时,但只是偶尔。这意味着,有时CSS文件和JS文件将被正确添加,有时如果我重新加载页面,那么文件将不会被正确添加。有什么不对?

对于旧版本一样TYPO3 7,我用类似这样的:

public function initializeAction() 
{ 
    $extPath = ExtensionManagementUtility::siteRelPath(
     $this->request->getControllerExtensionKey() 
    ); 

    $extJs = $extPath . 'Resources/Public/Js/ext_booking_manager.min.js'; 
    $GLOBALS['TSFE']->getPageRenderer()->addJsFooterFile(
     $extJs, 'text/javascript', false 
    ); 

    parent::initializeAction(); 
} 

但是这不会对TYPO3 8工作了。有什么建议么?

回答

0

请注意,在模板中使用HeaderAssets and FooterAssets sections的TYPO3 v8中有不同的方法。因此,你的动作模板看起来是这样的:

Your template code 

<f:section name="FooterAssets"> 
    <link rel="stylesheet" href="{f:uri.resource(path: 'Css/ext_booking_manager.css')}"/> 
    <script src="{f:uri.resource(path: 'Js/ext_booking_manager.min.js')}"></script> 
</f:section> 

这样,你不需要在你的控制器的任何资源的逻辑,因此你initializeAction()方法可以删除。

顺便说一句:我建议使用JavaScript作为JavaScript资源的目录名以符合TYPO3约定。

+0

嗯好的,谢谢。这很好,我会检查出来,我也会改变js目录名称:)。 – Fox

+0

好吧,我已经删除了资源逻辑并更新了我的扩展模板,并且FooterAssets部分正在工作,但似乎我得到了与使用页面渲染器时相同的奇怪行为。有时资产会被渲染,有时候不会。你有好主意吗? – Fox

+0

你的行为是否总是被缓存?我期望未缓存的操作有问题。 –

0

在TYPO3 8 getPageRenderer()方法已过时。你可以在这里看到Deprecated Methods

现在你可以使用在TYPO3 8这个方法就像这个solution

+0

是的,我知道,我已经在我的问题中发布了两种变体,一种是旧方式和新方式......但我认为@Mathias Brodala发布了更好的方法。目前,我在页面渲染器或页脚资源部分遇到同样的问题。这些文件将成功添加到页面,但是如果我像(strg + f5 for chrome)那样重新加载页面,那么有时候这两个文件都会消失。不在乎如果我使用页面渲染器或页脚资产部分。 – Fox

相关问题