内容元素突然移动到gridelements容器之外

时间:2018-02-01 15:53:23

标签: typo3 typoscript fluid tx-gridelements

我在TYPO3 CMS中遇到了一种奇怪的行为:我在多个页面上使用了内容元素“Grid-Element”。

“网格元素”CE始终具有不同的子元素,如图像或文本。 今天,所有子元素突然移动到网站的每个页面上的“网格元素”之外。我不得不手动修复它们。基本上什么都没有丢失,但结构被打破了。

我还查看了编辑记录,但没有任何相关内容可供查看。

我想知道这是怎么发生的,以及如何防止这种情况再次发生。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

使用gridelements时,您可以为每个内容元素配置一个配置。它存储在数据库中,主要存储在根页面上。

对于容器中的每个字段,您可以设置colPos个数字。 你的破碎结构可能因为:

而发生
  • 数据库中的任何更改都覆盖了colPos
  • 更改元素配置以使用其他colPos

答案 1 :(得分:1)

在99%的情况下,当没有安装gridelements时更新TYPO3核心时会发生这种情况。运行数据库比较会将字段colPos的SQL配置从signed更改为unsigned,从而将-1更改为0.

由于-1是网格容器子元素的指示符,因此该指标会丢失。

您可以通过运行:

来解决此问题
UPDATE tt_content SET colPos = -1 WHERE tx_gridelements_container > 0

其他1%的人真的无法重现症状的原因,所以目前我们并不确切知道他们究竟出了什么问题。

答案 2 :(得分:0)

最近有一个错误修复程序,也可能在这里修复了症状。因此,似乎我们找到了另一个答案中提到的1%的原因。

也请查看最新的master,看看它是否也解决了您的问题: https://forge.typo3.org/issues/85511

答案 3 :(得分:0)

更新:2个事件中的1个可以追溯到网格要素中没有的问题(见下文)。

我也有这种效果。

修复/解决方法

  1. 检查您数据库中tt_content.colpos的数据类型:它是未签名的吗?
  2. 将网格元素更新为最新版本。该问题可能已经解决。
  3. 进行数据库比较,让TYPO3将tt_content.colPos更改为已签名(未签名)
  4. 按照Jo Hasenau的建议应用解决方法:UPDATE tt_content SET colPos = -1 WHERE tx_gridelements_container > 0

说明

因此,(可能)发生的情况是colPos更改为无符号,导致所有-1值都更改为0。因此,不再正确解释网格元素的结构。

核心将col​​Pos设置为unsigned,gridelements覆盖它并将其设置为signed。

如果一切正常,则应该不会真正发生这种数据库模式更改。

测试用例

这些是我的测试用例:

  1. 从8升级到9时,我在更新之前停用了所有第三方扩展。在升级过程中,架构已更改为未签名。
  2. (在8.7.24系统上安装了扩展名"min"之后,colPos也被更改为unsigned。这本不应该发生的。“ min”是无害的,根本不改变数据库结构。)

更新:测试用例2可以追溯到具有composer.json混乱的(开发)扩展。这是一个非常模糊的场景,可能很少见,但是它确实对TYPO3 PackageManager中列出的扩展造成了严重破坏,导致未加载gridelements架构。

仅出于完整性考虑:您可以通过使用已停用扩展名的composer.json中另一个已激活扩展名的扩展名来重现该扩展名,例如在ext1 / composer.json中:

"replace": {
  "ext2": "self.version",
  "typo3-ter/Uniolexample": "self.version"
}