Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将公共资源包括到typo3 extbase扩展中_Php_Typo3_Fluid_Extbase - Fatal编程技术网

Php 如何将公共资源包括到typo3 extbase扩展中

Php 如何将公共资源包括到typo3 extbase扩展中,php,typo3,fluid,extbase,Php,Typo3,Fluid,Extbase,我正在构建一个扩展,它创建了一个后端模块,允许be_用户调整图像大小。 我试图通过使用pageRenderer添加/包含css和javascript文件,但这些文件从未包含。我只能在使用样式标记直接在流体模板中添加css,并使用脚本标记包含javascript文件的情况下应用css 我在控制器里试过类似的东西 受保护的$pageRenderer 还尝试使用viewHelper namespace Vendor\ExtKey\ViewHelpers; class AddJsFileViewHe

我正在构建一个扩展,它创建了一个后端模块,允许be_用户调整图像大小。 我试图通过使用pageRenderer添加/包含css和javascript文件,但这些文件从未包含。我只能在使用样式标记直接在流体模板中添加css,并使用脚本标记包含javascript文件的情况下应用css

我在控制器里试过类似的东西

受保护的$pageRenderer

还尝试使用viewHelper

namespace Vendor\ExtKey\ViewHelpers;

class AddJsFileViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper {

    public function render() {
        $doc = $this->getDocInstance();
        $pageRenderer = $doc->getPageRenderer();
        $pageRenderer->loadJquery();
    }
}
在我的时间里

{namespace pager=Vendor\ExtKey\ViewHelpers}
<f:layout name="Default" />

<f:section name="main">
    <pager:addJsFile />
{namespace pager=Vendor\ExtKey\ViewHelpers}


仍然没有任何内容

我不确定您如何定义后端模板,但似乎这通常是使用后端容器视图帮助程序来实现的,该帮助程序已经有了相应的功能:

<f:be.container
  addCssFile="{f:uri.resource(path:'css/style.css')}"
  addJsFile="{f:uri.resource(path:'js/scripts.js')}">

  [your templates content]

</f:be.container>

[您的模板内容]

我认为问题在于我的ViewHelper需要renderChilden和开始/结束页面

当前的实现是这样的

TYPO3.jQuery(function($) {

});
ViewHelper

namespace Vendor\ExtKey\ViewHelpers;

class AddPublicResourcesViewHelper extends  \TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper {

    public function render() {
        $doc = $this->getDocInstance();
        $pageRenderer = $doc->getPageRenderer();
        $extRelPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extRelPath("ext_key");

        $pageRenderer->addCssFile($extRelPath . "Resources/Public/css/styles.css");

        $pageRenderer->loadJquery();
        $pageRenderer->addJsFile($extRelPath . "Resources/Public/js/app.js");

        $output = $this->renderChildren();
        $output = $doc->startPage("title") . $output;
        $output .= $doc->endPage();

        return $output;
    }
}
模板

{namespace pager=Vendor\ExtKey\ViewHelpers}
<f:layout name="Default" />

<f:section name="main">
<pager:addPublicResources />

在typo37.6.X中,它必须如下所示

<f:be.container
     includeCssFiles="{style:'{f:uri.resource(path:\'css/style.css\')}'}"
     includeJsFiles="{script:'{f:uri.resource(path:\'js/script.js\')}'}"
    >
<!-- Template Code -->
</f:be.container>

由于includecsfilesincludeJsFiles需要传递数组,我们 可以包含任意数量的js和css


这种方法也在发挥作用。但是,如果要包含多个文件,则会发生这种情况?使用这种方法是不可能的。有人可能会说,无论哪种方式,都不应该为了简单而这样做,但我意识到,如果您想在自己的代码中使用库,至少对于JS来说,这有点困难。应该注意的是,有一些库已经通过额外的选项提供,即:leadExtJs、loadPrototype和loadScriptaculous。有关更多信息,请查看sysext/fluid/Classes/ViewHelpers/Be/containerviewwhelper.phpi认为在每个模板中加载库不是一个好主意,但在这种情况下,只有一个模板,我感兴趣的库无法通过Pagerender::loadJquery()加载,您可以包括更多,因为它也使用TYPO3 v7获得一个数组,所以您可以使用requirejs加载模块
<f:be.container
     includeCssFiles="{style:'{f:uri.resource(path:\'css/style.css\')}'}"
     includeJsFiles="{script:'{f:uri.resource(path:\'js/script.js\')}'}"
    >
<!-- Template Code -->
</f:be.container>