如何在扩展中使用TYPO3链接向导

时间:2018-05-04 14:27:45

标签: typo3

在扩展程序中,我希望能够修改现有链接。数据库中的相应字段可以包含多个链接(例如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打开文本字段并预先选择特定链接。

1 个答案:

答案 0 :(得分:0)

没有答案,所以我自己回答。

您可以通过多种方式使用链接向导:

1。 TCA:' renderType =' inputLink'

使用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进一步配置弹出链接向导,但这不是必需的。

2。使用路线' wizard_link'

这将使用后端:LinkBrowserController。

3。使用抽象类AbstractLinkBrowserController并将其扩展

可能无法正式支持解决方案2和3。如果字段中有多个链接,则无法使用解决方案1。

4。添加编辑字段

的链接

作为替代方案,请考虑不使用链接向导,而是使用路线' 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
]);

enter image description here