首页 > 解决方案 > TYPO3 为 IRRE tt_content 隐藏 colPos

问题描述

当按照文档中的说明添加自己的内容元素,然后实现所谓的 IRRE(内联类型)元素时,可以将其存储在未使用的 colPos 中,例如 99:

$newTCAcolumns[] = [
'xxx_cta_blocks' => [
    'exclude' => 1,
    'label' => 'Content',
    'config' => [
        'type' => 'inline',
        'allowed' => 'tt_content',
        'foreign_table' => 'tt_content',
        'foreign_sortby' => 'sorting',
        'foreign_field' => 'xxx_foreign',
        'minitems' => 1,
        'maxitems' => 3,
        'appearance' => [
            'collapseAll' => true,
            'expandSingle' => true,
            'levelLinksPosition' => 'bottom',
            'useSortable' => true,
            'showPossibleLocalizationRecords' => true,
            'showRemovedLocalizationRecords' => true,
            'showAllLocalizationLink' => true,
            'showSynchronizationLink' => true,
            'enabledControls' => [
                'info' => false,
            ]
        ],
        'behaviour' => [
            'allowLanguageSynchronization' => true,
        ],
        'overrideChildTca' => [
            'columns' => [
                'colPos' => [
                    'config' => [
                        'default' => 99
                    ]
                ],
                'CType' => [
                    'config' => [
                        'default' => 'xxx_cta_block'
                    ]
                ],
            ]
        ],
    ],
]

不幸的是,由于一些秘密的设计原因,在后端布局中需要存在假 colPos:

mod {
    web_layout {
        BackendLayouts {
            default {
                title = Default
                config {
                    backend_layout {
                        colCount = 1
                        rowCount = 1
                        rows {
                            1 {
                                columns {
                                    1 {
                                        name = Content
                                        colPos = 0
                                    }
                                }
                            }
                            99 {
                                columns {
                                    1 {
                                        name = Within content element
                                        colPos = 99
                                    }
                                }
                            }
                        }
                    }
                }
                icon =
            }
        }
    }
}

现在,如果后端布局中不存在此列,我们会收到可怕的警告,即在页面上检测到未使用的元素。此外,IRRE 子项将在 Column 字段中显示“无效值 99”。也许这就是为什么有些人想要隐藏这个领域,这似乎会产生所有其他问题。

如果此列存在,它将在后端页面的底部显示所有子元素。这会寻找具有大量自定义元素的大页面,当然超级混乱并且容易被编辑者犯错误,并且完全不应该在设计上显示出来。

在旧版本的 TYPO3(10.4.x 之前)中,上面的 rowCount 为 1 的后端布局定义将确保 colPos 99 不可见。[编辑] 安装 GridElements 时,它仍然有效。

似乎还有一些古老的记录不良的 tsconfig 设置,例如:

mod.SHARED.colPos_list = 0
TCEFORM.tt_content.colPos.removeItems = 99
mod.web_layout.tt_content.colPos_list = 0

他们似乎根本没有做任何值得注意的事情。

Nicole Cordes 女士做了一个扩展,“从‘未使用’列中删除具有自己 colPos 配置的已使用内容元素”。非常高贵,但在使用基本核心功能时,这种钩子不应该是这种方式。

所以也许我错过了一些东西,或者有人可以告诉我如何以“正确”的方式隐藏它?

顺便说一句,我现在通过在后端加载额外的 CSS 来隐藏这个不需要的 colPos ,然后:

.t3-page-column-99 {
    display: none;
} 

标签: typo3tsconfigtypo3-10.x

解决方案


PagelayoutHook 实际上是可行的方法。目前没有其他办法。如果你想自己实现它,这很容易。

我在这里解释了一切。

隐藏未使用的元素

TYPO3 正在向 PSR 标准迁移,因此 Hooks 正在被替换。慢慢地,但它们最终会消失。相反,事件/监听将取代它们的位置。到时候,大家都会开心的:)

不要上瘾,听事件!PSR-14

此致


推荐阅读