Ich weiss, das ist alt - aber ich bin bei der Suche auf diesen Thread gestossen. Hatte dasselbe Problem (T3 8.7) und keine Lösung gefunden. Nach stundenlangem Probieren und Analysieren, hab' ich letztlich aber doch eine Lösung erarbeitet:
Im Controller, der das Feld benötigt, im Header folgendes einfügen:
use TYPO3\CMS\Backend\Form\Element\InputLinkElement;
use TYPO3\CMS\Backend\Form\NodeFactory;
In der Funktion, die das Formular generiert, folgenden Code einfügen:
$options = [
'renderType' => 'inputLink',
'tableName' => 'myTable',
'fieldName' => 'url',
'databaseRow' => [
'uid' => $myModel->getUid(),
'pid' => 0
],
'parameterArray' => [
'fieldConf' => [
'label' => 'URL',
'config' => [
'eval' => 'trim',
'size' => 1024,
],
],
'itemFormElValue' => $url,
'itemFormElName' => 'data[myTable][editform][url]',
'itemFormElID' => 'data[mytable][editform][url]',
'field' => 'url',
'fieldChangeFunc' => [
'TBE_EDITOR_fieldChanged' => "TBE_EDITOR.fieldChanged('mytable','editform','url','data[mytable][editform][url]');"
],
];
$nodeFactory = new NodeFactory();
$linkField = new InputLinkElement($nodeFactory, $options);
$urlField = $linkField->render();
$this->view->assign('renderedUrlField', $urlField['html']);
Das Formular MUSS «editform» heissen, weil gewisse sysext-Javascripts darauf referenzieren.
MyTable ist natürlich die Tabelle, auf die der Controller zugreift.
Im Fluid-Template, das Feld so ausgeben:
<f:format.raw>{renderedUrlField}</f:format.raw>
Format-raw, weil die Funktion aus dem Controller HTML-Code zurückgibt.
Im Default-Template müssen jetzt die Javascripts eingebunden werden, die das Feld benötigt:
includeJsFiles="{
1:'/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.tbe_editor.js',
3:'/typo3/sysext/backend/Resources/Public/JavaScript/jsfunc.inline.js',
4:'/typo3/sysext/backend/Resources/Public/JavaScript/backend.js'
}"
includeRequireJsModules="{
0:'{f:uri.resource(path:\'JavaScript/ckeditor/ckeditor.js\')}',
3:'/typo3/sysext/backend/Resources/Public/JavaScript/backend.js',
4:'TYPO3/CMS/Backend/FormEngine',
5:'TYPO3/CMS/Backend/FormEngineValidation',
7:'TYPO3/CMS/Backend/ContextMenu',
8:'TYPO3/CMS/Backend/FormEngineReview',
9:'{f:uri.resource(path:\'JavaScript/main.js\')}'
}"
Zu guter Letzt muss das Javascript-Modul noch aktiviert werden. Das passiert bei mir im main.js (im Javascript-Verzeichnis der Extension:
TYPO3.settings.FormEngine = {"formName":"editform"};
define(['jquery', 'TYPO3/CMS/Backend/FormEngine'], function($){
'use strict';
$(function(){
TYPO3.FormEngine.initialize();
});
});
TYPO3.settings.FormEngine = {...} ist wichtig, das verhindert die Fehlermeldung, die der OP gepostet hat.
Vielleicht hilft das hier ja jemandem 😉
Sorry, aber die code-tags scheinen bei mir nicht zu funktioneren... 🙁