Typo3 编辑记录时禁用TCA中的字段

Typo3 编辑记录时禁用TCA中的字段,typo3,typo3-9.x,typo3-10.x,Typo3,Typo3 9.x,Typo3 10.x,只有在编辑记录时,才可以禁用TCA配置中的字段吗 新记录的TCA配置: 'title' => [ 'exclude' => true, 'label' => 'Title', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim,required' ], ], 现有记录的TCA配置: 'title' =

只有在编辑记录时,才可以禁用TCA配置中的字段吗

新记录的TCA配置:

'title' => [
    'exclude' => true,
    'label' => 'Title',
    'config' => [
        'type' => 'input',
        'size' => 30,
        'eval' => 'trim,required'
    ],
],
现有记录的TCA配置:

'title' => [
    'exclude' => true,
    'label' => 'Title',
    'config' => [
        'type' => 'input',
        'size' => 30,
        'eval' => 'trim,required'
        'readOnly' => true,
    ],
],

我不知道新记录和现有记录的不同TCA设置的内置解决方案


由于最终的TCA是缓存的,因此在运行时也无法使用一些PHP对其进行操作。

可以在后端添加Javascript。使用此Javascript,您可以动态禁用字段。但请注意,这只是一个很容易克服的黑客解决方法

ext\u localconf.php
中添加Javascript:

if(TYPO3_模式=='BE'){
$renderer=\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Page\PageRenderer::class);
$renderer->addJsFile(
'EXT:myext/Resources/Public/JavaScript/Backend.js'
);
}
Backend.js
中,您可以执行以下操作:

require([“jquery”],函数($){
const queryString=decodeURI(window.location.search),
urlParams=新的URLSearchParams(queryString);
if(urlParams.has('route')&&urlParams.get('route')=='/record/edit'){
//如果编辑所需模型的记录,请检查是否只进行更改
if(queryString.indexOf('edit[tx\u myextension\u domain\u model\u model][')){
让idPosStart=queryString.indexOf('edit[tx\u myextension\u domain\u model\u model][')+40,
idPosEnd=queryString.indexOf(']=',idPosStart),
idLength=idPosEnd-idPosStart,
idEl=queryString.substr(idPosStart,idLength),
elVal=urlParams.get('edit[tx\u myextension\u domain\u model\u model]['+idEl+']);
如果(elVal==“编辑”){
//稍微延迟一下,否则html没有完全加载,无法寻址
setTimeout(函数(){
//禁用所需字段,例如字段“标题”
让titleField=$('[data field=“title”]')。父项('.form section');
titleField.find('input').prop('disabled',true);
titleField.find('button.close').remove();
}, 800);
}
}
}
}

我不确定这是否有效。用户可以创建与原始数据记录1:1的新数据记录(标题字段除外),并可以删除原始数据记录。但不允许他更改原始字段中的“标题”…嗯…@JulianOfmann您如何实现这一点?使用一个TCEmain挂钩?只要将数据复制到数据库中的另一个表(模型)中?这样,即使在编辑记录时,记录的输入字段仍然可以供编辑器使用(这可能会让人困惑)。我认为这不是一个技术问题,而是一个逻辑问题。所需限制的逻辑是有问题的,因为该限制很容易被绕过。这就是我想指出的。@JulianHofmann因为我需要创建需要前端用户阅读和接受的记录,所以在ards,但应该可以为前端用户添加新的关系。这就是我想要存档的内容。有什么想法,如何实现吗?当用户接受内容时,建立关系是否不可能或不够?另一个考虑因素是将其分为两类数据集:内容和内容之间的关系和用户。