在扩展程序中,我希望能够修改现有链接。数据库中的相应字段可以包含多个链接(例如tt_content.bodytext)。
我想尽可能多地重用已有的功能。所以我想使用现有的链接向导。
我找到的是使用rte_ckeditor/Classes/Controller/BrowseLinksController.php的现有路线rteckeditor_wizard_browse_links
。
我在我的视图助手中使用它:
$parameters = [
'table' => $table,
'fieldName' => $field,
'pid' => $pid,
'uid' => $uid,
'recordType' => $recordType;
];
$urlParameters = [
'contentsLanguage' => 'en',
// 'route'
// 'token*
'P' => $parameters,
'curUrl' => [
'url' => $url
// todo: add anchor text etc. ...
],
'editorId' => 'cke_1'
];
$route = 'rteckeditor_wizard_browse_links';
return (string)$uriBuilder->buildUriFromRoute($route, $urlParameters);
这会正确打开链接向导。但它与ckeditor交织在一起。
当我按“设置链接”时没有任何反应,我收到以下JavaScript错误(如果在浏览器中打开控制台,则可见):
RteLinkBrowser.js?bust=8d6016d70f0f490d5e7d24262f0ec96230f399d9:77 Uncaught TypeError: Cannot read property 'document' of null
at Object.LinkBrowser.finalizeFunction (RteLinkBrowser.js?bust=8d6016d70f0f490d5e7d24262f0ec96230f399d9:77)
at HTMLFormElement.UrlLinkHandler.link (UrlLinkHandler.js?bust=8d6016d70f0f490d5e7d24262f0ec96230f399d9:40)
at HTMLFormElement.dispatch (jquery.min-16985e7a97b69d2a9c29e484ac3b581a.js:2)
at HTMLFormElement.y.handle (jquery.min-16985e7a97b69d2a9c29e484ac3b581a.js:2)
LinkBrowser.finalizeFunction @ RteLinkBrowser.js?bust=8d6016d70f0f490d5e7d24262f0ec96230f399d9:77
UrlLinkHandler.link @ UrlLinkHandler.js?bust=8d6016d70f0f490d5e7d24262f0ec96230f399d9:40
dispatch @ jquery.min-16985e7a97b69d2a9c29e484ac3b581a.js:2
y.handle @ jquery.min-16985e7a97b69d2a9c29e484ac3b581a.js:2
RteLinkBrowser.js中的相应行是:
var linkElement = RteLinkBrowser.CKEditor.document.createElement('a');
链接向导期望ckeditor窗口打开并使用DOM中不存在的东西。
有没有办法直接打开文本字段中特定链接的链接向导?
或者用ckeditor打开文本字段并预先选择特定链接。
答案 0 :(得分:0)
没有答案,所以我自己回答。
您可以通过多种方式使用链接向导:
使用TCA:'renderType'='inputLink':如果要对特定字段使用“链接向导”,可以使用此选项。这是一种受支持的方法。您只能将此用于具有一个链接的字段,例如pages.url。
请注意,TCA中有一些更改,另请参阅breaking change 79440 TCA change s
实施例
'link' => array(
'exclude' => 1,
'label' => 'Link',
'config' => array(
'type' => 'input',
'renderType' => 'inputLink',
),
),
您可以选择使用linkPopup进一步配置弹出链接向导,但这不是必需的。
这将使用后端:LinkBrowserController。
可能无法正式支持解决方案2和3。如果字段中有多个链接,则无法使用解决方案1。
作为替代方案,请考虑不使用链接向导,而是使用路线' record_edit'打开特定RTE字段的编辑对话框。如果双击其中的链接,链接向导将会打开。
以下示例取自核心中的linkvalidator并已修改。它为uid $ uid的记录字段tt_content.bodytext打开一个编辑器对话框。
$requestUri = GeneralUtility::getIndpEnv('REQUEST_URI') .
'&id=' . $pageid;
$uriBuilder = GeneralUtility::makeInstance(\TYPO3\CMS\Backend\Routing\UriBuilder::class);
$url = (string)$uriBuilder->buildUriFromRoute('record_edit', [
'edit' => [
'tt_content' => [
$uid => 'edit'
]
],
'columnsOnly' => 'bodytext',
'returnUrl' => $requestUri
]);