【问题标题】:How to include .js files in own Typo3 6.2 Extension?如何在自己的 Typo3 6.2 扩展中包含 .js 文件?
【发布时间】:2016-10-02 20:47:08
【问题描述】:

我在 Typo3 6.2 中使用扩展生成器、extbase 和流体进行了扩展。
我想在前端添加一个时间选择器。
我在网上找到了一个 .js 文件,并且想在扩展程序处于活动状态时包含它,因为我经常需要它。
我把那个文件放在这里:EXT:/Resources/Public/JS/timepicker.js
我在this 文章中看到了一个解决方案,但添加了

page.includeJS.tx_myExtension = EXT:/Resources/Public/JS/timepicker.js

在我的 setup.txt 底部不起作用。

我并没有在那里定义page,所以我认为这可能是原因,但我真的不知道 - 这是我在 /typo3conf/ext//Configuration/ 中的 setup.txt(自动生成)排版/

plugin.tx_myext_test {
    view {
        templateRootPath = {$plugin.tx_myext_test.view.templateRootPath}
        partialRootPath = {$plugin.tx_myext_test.view.partialRootPath}
        layoutRootPath = {$plugin.tx_myext_test.view.layoutRootPath}
    }
    persistence {
        storagePid = {$plugin.tx_myext_test.persistence.storagePid}
    }
}

最终,我希望我的前端函数能够与 datepicker 一起工作,因为我在根模板中包含了 jQuery。但我不想在其中包含时间选择器,只是为了我的扩展。

<script>
    $(function () {
        $('.lc-datepicker').datepicker();
        $('.lc-timepicker').timepicker();
    });
</script>

【问题讨论】:

    标签: javascript jquery typo3 typoscript extbase


    【解决方案1】:

    您可以像这样使用EXT: 的正确语法:

    page.includeJS.myextension = EXT:extkey/Resources/Public/JS/timepicker.js
    

    (你忘了extkey。)

    请记住,使用 includeJSFooter 而不是 includeJS 可能会提高您网站的性能。

    page.includeJS 是一个全局可用的 TypoScript 属性。因此,如果您在站点的根 TS 模板中使用它,则 JavaScript 文件将嵌入到每个页面,无论该插件是否在使用中。因此,如果您只想在嵌入了插件的页​​面上使用 JS,我建议使用下面的 Fluid 方法。

    要实现这一点,请在模板中使用资源 ViewHelper:

    <script src="{f:uri.resource(path: 'JS/timepicker.js')}"></script>
    <script>
        $(function () {
            $('.lc-datepicker').datepicker();
            $('.lc-timepicker').timepicker();
        });
    </script>
    

    Resource ViewHelper 使用相对于您的扩展程序的 Resources/Public 目录的路径。

    【讨论】:

    • 它现在不工作 - 使用“page.includeJSFooter.tx_myExtension = EXT:tx_myExtension/Resources/Public/JS/timepicker.js” 我必须刷新哪个缓存以确保它不是因为它(前端,通用或系统)?哪个扩展名是准确的,它是在哪里定义的?不是插件名,对吧?
    • 您的第二个示例终于奏效了...但奇怪的是:我必须从 JS/... 不是 Public 开始,否则输出为“Public/Public”希望我能弄清楚我有什么问题使用您的第一个解决方案...
    • 对不起,我的错,f:uri.resource VH 中的路径与Resources/Public 相关。修复。我还将myextension 更改为extkey 以强调需要扩展密钥,它等于typo3conf/ext 中的扩展目录。除了正常的页面缓存之外,您不需要删除任何其他内容。尝试查看后端的 TypoScript 树,以了解您的 TS 是否正确应用。
    • 好的,感谢您的更正 - 所以如果 extkey = 扩展目录,那么 page.includeJS.myextension 中的 myextension 是什么?
    • 我编辑了这个问题。根据您的需要,请使用我个人不喜欢的 Fluid 方法或 jokumer 方法。
    【解决方案2】:

    您可以定义在您的控制器类中包含 JS,以确保它只为您的扩展加载。

    在 TypoScript 中,让 JS 文件可配置:

    plugin.tx_myext.settings.javascript.file = EXT:myext/Resources/Public/JS/timepicker.js
    

    在控制器动作中:

    $this->response->addAdditionalHeaderData('<script src="' .
                $GLOBALS['TSFE']->tmpl->getFileName($this->settings['javascript']['file']) .
                '" type="text/javascript"></script>');
    

    【讨论】:

    • 但是我可以将打字稿添加到我的扩展文件夹中的 setup.txt 文件中吗?到目前为止它不起作用:(它确实加载了一个空标题 " 我写了 plugin.tx_myext.settings.javascript.file = EXT:myext/Resources/就像你说的,我的 setup.txt 文件底部的 public/JS/timepicker.js。
    • 这个解决方案的缺点是它有点不灵活 - 如果脚本以其他方式加载(例如在全局上下文中),则需要更改代码。
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多