【问题标题】:TYPO3 hide colPos for IRRE tt_contentTYPO3 为 IRRE tt_content 隐藏 colPos
【发布时间】:2021-08-07 10:45:44
【问题描述】:

当按照docs 中的说明添加自己的内容元素,然后实现所谓的 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”。也许这就是为什么有些人想隐藏这个字段,它似乎产生了各种other problems..

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

在旧版本的 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 制作了一个extension,其中“从‘未使用’列中删除了具有自己 colPos 配置的已使用内容元素”。非常高尚,但在使用基本核心功能时,这种钩子不应该是这种方式。

所以也许我遗漏了什么,或者有人可以告诉我如何以“正确”的方式隐藏它吗?

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

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

【问题讨论】:

    标签: typo3 tsconfig typo3-10.x


    【解决方案1】:

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

    我在这里解释了一切。

    Hide Unused elements

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

    Don’t get hooked, listen to events! PSR-14

    最好的问候

    【讨论】:

    • 弃用:#90348 - PageLayoutView 类,我猜这对于 10.4 不再适用
    • 它在 TYPO3 10 中被弃用,这意味着它很可能会在 TYPO3 12 之前工作。一般来说,如果某些东西被标记为弃用,它将在两个主要版本之后被删除
    • 会根据类注解来源在TYPO3 11中移除。感谢您的努力,但我不会使用在 2 个月内不再起作用的东西,如果它甚至可以工作,因为“依赖于 PageLayoutView 的实现应该准备使用替代实现(通过覆盖和覆盖 EXT:backend 的 Fluid 模板) 。”
    【解决方案2】:

    使用 TSconfig,您可以限制后端用户可以编辑的列:
    manual

    // just edit columns 0,1 and 2, even when there are columns 3,4 and 5
    mod.SHARED.colPos_list = 0,1,2
    

    此外,您可以禁用自 this change 以来的所有受限列

    // hide all columns the user can't edit
    mod.web_layout.hideRestrictedCols = 1
    

    此 TSConfig 应该可用于限制所有人的页面,或用于用户/用户组以仅限制某些编辑器

    【讨论】:

    • 这两个配置在 10.4.18 中都没有做任何事情。我敢打赌这与#90348
    • 虽然第一个也显示文本“无编辑权限”(仍可编辑)。
    【解决方案3】:

    这似乎只在页面 TSconfig 中有效,而在用户 TSconfig 中不再有效:

    mod.SHARED.colPos_list
    

    您可以通过页面 TSconfig 中的条件来处理此问题:

    [backend.user.userId == 3]
    mod.SHARED.colPos_list = 0,1,2
    [end]
    

    在 T3 V. 10.4.20 中为 ID=3 的用户隐藏列 0、1、2。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多