有没有办法在BE(TYPO3 10.x.y)中编辑记录时添加一种特殊按钮来执行某些操作?类似于 TCA 输入字段,但它应该是一个“操作”按钮?
这个想法是在 BE 中编辑记录时,使用此按钮对外部 API 执行查询以预填充/覆盖记录字段的值。因此,BE 用户可以决定是只想编辑并保存记录,还是想先查询该 API 并在保存记录之前获取预填充的字段值。
我尝试在 processDatamap_preProcessFieldArray(...) 挂钩中执行此操作,但这并不理想。
谢谢,亚历克斯
正如 Julian Hofmann 评论的那样,一个好的解决方案是实现自定义渲染类型。
为此,您必须在以下位置注册自定义渲染类型:
your_ext/ext_localconf.php
像这样:
// Register node for custom TCA Field
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1610674549] = [ // The last array key is an actual Timestamp
'nodeName' => 'renderCustomField',
'priority' => 40,
'class' => \VENDOR\YourExt\Tca\RenderCustomField::class,
];
然后就可以实现自定义的渲染类型了。这是文本字段渲染类型的示例:
<?php
namespace VENDOR\YourExt\Tca;
use TYPO3\CMS\Backend\Form\Element\InputTextElement;
class renderVehicleFinField extends InputTextElement
{
/**
* Render Function for customized TCA Field
*
* @return array
*/
public function render()
{
$result = parent::render();
// Sometimes it's good to know if the record is opened as IRRE element or not
//if($this->data['inlineParentUid'] == "")
//{
// // ... Do Stuff
//}
$someData = (string)$this->data["databaseRow"]["somedata"];
$html = "
<script type='text/javascript'>
function customOnClickHandler(self, someData)
{
// Do fancy JS manipulation or ajax requests
}
</script>
";
$html .= "<a class='btn btn-default' href='#' onclick=\"customOnClickHandler(this, '". $someData ."');\">Do something</a>";
$result['html'] .= $html;
return $result;
}
}
在 TCA 中,您可以按如下方式添加字段:
'custom_field' => [
'exclude' => false,
'label' => 'My custom field',
'config' => [
'type' => 'input',
'renderType' => 'renderCustomField',
]
],