多年后,我现在使用
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
属性是唯一的,因此如果您有另一个同名的包含,它将覆盖旧的包含。
我通常更喜欢使用静态 TypoScript 包含 CSS 和 JS,因为如果有人想拥有自己的 CSS,它更容易调整。 如果您仅在扩展页面上包含此 TS,则应将其从 TYPO3 CSS-Merger 中排除。
只需使用以下 TypoScript
page.includeCSS.myExtCss = EXT:myext/Resources/Public/css/mystyle.css
page.includeCSS.myExtCss.excludeFromConcatenation = 1
用老方法解决了:
$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,我使用另一个后缀:CSS2、CSS3、JS1、JS2 等等。 因此,如果另一个控制器包含相同的文件,它只会覆盖 extraHeaderData 数组中的旧条目。
Use 可以使用类变量来标记您已经包含样式表。该变量的值应该在整个请求中保持活动状态。
在控制器类中,定义类变量/静态属性:
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;
}
老问题,但值得一提...
你需要改变这里的方法。如果同一页面上有多个相同插件的实例,它们的行为应该不同,则只需使用 FlexForm 为每个实例添加选项,它们应该以
settings
开头,每个由点分隔的部分是下一级一个关联数组,例如:
<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'];
在 TYPO3 v12 中,使用