Php 如何将公共资源包括到typo3 extbase扩展中
我正在构建一个扩展,它创建了一个后端模块,允许be_用户调整图像大小。 我试图通过使用pageRenderer添加/包含css和javascript文件,但这些文件从未包含。我只能在使用样式标记直接在流体模板中添加css,并使用脚本标记包含javascript文件的情况下应用css 我在控制器里试过类似的东西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
受保护的$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>
由于includecsfiles和includeJsFiles需要传递数组,我们
可以包含任意数量的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>