TYPO3 BE,编辑记录时在后端添加TCA按钮

问题描述 投票:0回答:1

有没有办法在BE(TYPO3 10.x.y)中编辑记录时添加一种特殊按钮来执行某些操作?类似于 TCA 输入字段,但它应该是一个“操作”按钮?

这个想法是在 BE 中编辑记录时,使用此按钮对外部 API 执行查询以预填充/覆盖记录字段的值。因此,BE 用户可以决定是只想编辑并保存记录,还是想先查询该 API 并在保存记录之前获取预填充的字段值。

我尝试在 processDatamap_preProcessFieldArray(...) 挂钩中执行此操作,但这并不理想。

谢谢,亚历克斯

typo3 backend typo3-10.x tca
1个回答
0
投票

正如 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',
    ]
],
© www.soinside.com 2019 - 2024. All rights reserved.