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
actioncontroller中的Extbase addAdditionalHeaderData(…),包含相同的CSS两次_Css_Typo3_Extbase_Typo3 4.5 - Fatal编程技术网

actioncontroller中的Extbase addAdditionalHeaderData(…),包含相同的CSS两次

actioncontroller中的Extbase addAdditionalHeaderData(…),包含相同的CSS两次,css,typo3,extbase,typo3-4.5,Css,Typo3,Extbase,Typo3 4.5,对于我的extbase扩展,我需要一个CSS,它包含在所有ActionController中,具有: $this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/cs

对于我的extbase扩展,我需要一个CSS,它包含在所有ActionController中,具有:

$this->response->addAdditionalHeaderData('<link rel="stylesheet" type="text/css" href="' . t3lib_extMgm::siteRelPath($this->request->getControllerExtensionKey()) . 'Resources/Public/css/mystyle.css" />');  
$this->response->addAdditionalHeaderData(“”);
如果我现在有一个包含我的扩展插件的页面,我有多个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 ...>';
$GLOBALS['TSFE']->附加headerdata[100]='';

但据我所知,这只是老办法。

用老办法解决了这个问题:

$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" />';  
$GLOBALS['TSFE']->additionalHeaderData[$this->request->getControllerExtensionKey()“CSS1”]='';
对于我包含的每个CSS或JS,我都使用另一个sufix:CSS2、CSS3、JS1、JS2等等。
因此,如果另一个控制器将包含相同的文件,它只会覆盖additionalHeaderData数组中的旧条目。

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;
}
if(!self::$includedMyStyle){
$this->response->addAdditionalHeaderData(“”);
self::$includeMyStyle=true;
}

我通常更喜欢在静态打字脚本中包含CSS和JS,因为如果有人想拥有自己的CSS,它更容易调整。 如果您仅在扩展页面上包含此TS,则应将其从TYPO3 CSS合并中排除

只需使用以下打字脚本

page.includeCSS.myExtCss = EXT:myext/Resources/Public/css/mystyle.css
page.includeCSS.myExtCss.excludeFromConcatenation = 1
老问题,但值得一提的是

你需要改变这里的方法。如果同一页面上有多个相同插件的实例,它们的行为应该有所不同,则只需使用FlexForm为每个实例添加选项,它们应该从设置开始,每个由点分隔的部分都是关联数组的下一级,例如:

<settings.includeHeaderData>
    <TCEforms>
        <exclude>0</exclude>
        <label>Include header data...</label>
        <config>
            <type>check</type>
            <default>0</default>
        </config>
    </TCEforms>
</settings.includeHeaderData>

多年后,我现在使用
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
属性是唯一的,因此如果您有另一个同名的include,它将覆盖旧的include。

为什么要在控制器中包含CSS?您不能使用打字脚本吗?可以选择在flexform中添加一些复选框(这样,如果选中,您可以添加标题),并确保每个插件只选中一个插件实例page@lorenz:不同的动作可以包括不同的CSS(和JS),因此,只要setup.txt中的
page.headerData.100.value=
,就会在我不需要的边上包含文件。打字稿还有其他想法吗?@biesior这是一个选项,但它不是一个真正简洁的解决方案。@nbar:如果你真的想自动添加(不带复选框)只需使用简单的SQL查询检查页面是否插入了类型相同的
tt\u content
sorting
小于当前记录的
tt\u content
。我现在已经解决了这个问题,但我会让问题暂时解决,以找到一个不使用旧方法的好方法。我现在使用
vhs:asset
来添加js/css。认为这是与液体结合使用最干净的方法。但感谢你回答了这样一个老问题:)很有趣,为什么要投否决票,我不在乎分数,我想知道动机是什么;)不知道,因为这不是我的反对票。我投了更高的票来平衡它,因为你的答案没有错(但我不喜欢编辑需要曼纽尔的工作来完成这项工作)
<settings.foo.bar.baz.something>
    ...
</settings.foo.bar.baz.something>
$mySetting = $this->settings['foo']['bar']['baz']['something'];
<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" />