4

我在控制器级别使用来自 TYPO3 8 的新页面渲染器通过 initializeAction 添加扩展特定的 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。有什么建议么?

4

2 回答 2

7

请注意,在 TYPO3 v8 中使用模板中的HeaderAssetsFooterAssets部分可以使用不同的方法。因此,您的操作模板可能如下所示:

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()可以删除您的方法。

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

于 2017-08-01T14:18:14.307 回答
-2

在 TYPO3 中,不推荐使用 8getPageRenderer()方法。你可以在这里看到弃用的方法

现在您可以在 TYPO3 8 中使用此方法 Like this solution

于 2017-08-02T07:18:48.763 回答