Как использовать TYPO3 Link Wizard в расширении - PullRequest
0 голосов
/ 04 мая 2018

В расширении я хотел бы иметь возможность изменить существующую ссылку. Соответствующее поле в базе данных - это поле, которое может содержать несколько ссылок (например, tt_content.bodytext).

Я хочу использовать как можно больше уже существующих функций. Поэтому я хотел бы использовать уже существующий мастер ссылок.

Я нашел существующий маршрут rteckeditor_wizard_browse_links, который использует rte_ckeditor / Classes / Controller / BrowseLinksController.php .

Я использую это в качестве помощника:

 $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 голосов
/ 12 мая 2018

У меня нет ответа, но, по крайней мере, здесь есть обходной путь / альтернатива:

Не открывайте Link Wizard напрямую, откройте поле в редакторе

В качестве альтернативы рассмотрите не использование мастера ссылок, а использование маршрута 'record_edit', чтобы открыть диалоговое окно редактирования для определенного поля RTE. Если дважды щелкнуть ссылку, откроется мастер ссылок.

Следующий пример был взят из linkvalidator в ядре и изменен. Открывается диалоговое окно редактора для поля tt_content.bodytext для записи с uid $ uid.

$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

Обновление: Для TYPO3 9 существует ViewHelper для открытия поля с FormEngine в Backend. Это имеет тот же результат.

https://docs.typo3.org/other/typo3/view-helper-reference/9.5/en-us/typo3/backend/latest/Link/EditRecord.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...