对于我的extbase扩展,我需要一个包含在所有actioncontrollers中的CSS:
$this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />');
如果我现在有一个包含扩展程序的多个插件的页面,我有多个CSS包括:
<link rel="stylesheet" type="text/css" href="typo3conf/ext/myext/Resources/Public/css/mystyle.css">
<link rel="stylesheet" type="text/css" href="typo3conf/ext/myext/Resources/Public/css/mystyle.css">
我也可以做以下事情:
$GLOBALS['TSFE']->additionalHeaderData[100] = '<link ...>';
但据我所知,这只是旧的方式。
答案 0 :(得分:1)
我通常更喜欢将静态TypoScript包含在CSS和JS中,因为如果有人想拥有自己的CSS,它更容易调整。 如果仅在扩展页面上包含此TS,则应将其从TYPO3 CSS-Merger中排除。
只需使用以下TypoScript
即可page.includeCSS.myExtCss = EXT:myext/Resources/Public/css/mystyle.css
page.includeCSS.myExtCss.excludeFromConcatenation = 1
答案 1 :(得分:1)
多年后,我现在使用vhs:asset
将CSS / JS添加到扩展程序:
<v:asset.script path="EXT:my_extension/Resources/Public/js/javascript.js" name="collectionjs" standalone="1" />
<v:asset.style path="EXT:my_extension/Resources/Public/css/style.css" name="collectioncss" standalone="1" />
name
属性是唯一的,因此如果您有另一个名称相同的包含,它将覆盖旧的包含。
答案 2 :(得分:0)
使用旧方法解决它:
$GLOBALS['TSFE']->additionalHeaderData[$this->request->getControllerExtensionKey()."CSS1"] = '<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />';
对于每个CSS或JS我包括我使用另一个sufix:CSS2,CSS3,JS1,JS2等。 因此,如果另一个控制器将包含相同的文件,它将覆盖additionalHeaderData数组中的旧条目。
答案 3 :(得分:0)
使用可以使用类变量来标记已包含样式表。这个变量的值应该是整个请求的存活。
在您的控制器类中,定义您的类变量/ static property:
public static $includedMyStyle;
控制器操作中的:
if (!self::$includedMyStyle) {
$this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />');
self::$includedMyStyle = true;
}
答案 4 :(得分:0)
老问题,但值得一提......
你需要在这里改变方法。如果您在同一页面上有多个相同插件的实例应该有不同的行为,您只需要使用FlexForm为每个实例添加选项,它们应该以 settings
和每个部分开头以dot分隔的是关联数组的下一级,例如:
<settings.includeHeaderData>
<TCEforms>
<exclude>0</exclude>
<label>Include header data...</label>
<config>
<type>check</type>
<default>0</default>
</config>
</TCEforms>
</settings.includeHeaderData>
所以在你的行动中你可以使用它:
if (intval($this->settings['includeHeaderData']) > 0){
$this->response->addAdditionalHeaderData('<link ...>');
}
或节点在哪里:
<settings.foo.bar.baz.something>
...
</settings.foo.bar.baz.something>
你可以在控制器中访问它,如:
$mySetting = $this->settings['foo']['bar']['baz']['something'];