Использование мастера ссылок в бэкэнд-модуле Typo3 - PullRequest
0 голосов
/ 07 сентября 2018

Я тяну волосы за это.

Я создал T3-Extension - внутренний модуль - с помощью Extension Builder. Теперь я хочу предоставить пользователю мастер ссылок, чтобы он / она мог выбрать внутреннюю ссылку из дерева T3.

Я создал запись TCA для этого:

'url' => [
        'label' => 'Link',
        'exclude' => 1,
        'config' => [
            'type'  => 'input',
            'size'  => '50',
            'max'   => '256',
            'eval'  => 'trim',
            'renderType' => 'inputLink',
            'fieldControl' => [
                'linkPopup' => [
                    'options' => [
                        'blinkLinkOptions' => 'mail,page,spec,url,folder',
                        'blindLinkFields' => 'class,params,target,title',
                        'allowedExtensions' => 'html,php'
                    ],
                ],
            ],
            'fieldWizard' => [
                'localizationStateSelector' => [
                    'disabled' => false,
                ]
            ]
        ],
    ],

В шаблоне жидкости (вид) я просто использую это:

<f:form.textfield property="url" />

Согласно документам, в TCA-config следует добавить кнопку после поля ввода.

Но это не тот случай.

Я что-то не так делаю или это просто не работает?

Я также пытался использовать flux в своих шаблонах (у которых есть помощник просмотра браузера ссылок), но когда я использую <flux:...>, в форме ничего не отображается.

Использование Typo3 8,7

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Мой ответ не поможет, если вы хотите создать мастер ссылок с помощью Fluid, но он отвечает на часть вопроса и добавляет дополнительную информацию.

Установка мастера связывания для поля через TCA волшебным образом не заставит мастера связывания появиться в Fluid. Однако мастер ссылок будет доступен, если вы непосредственно отредактируете запись в бэкэнде (в виде списка).

Пример: вы создаете таблицу tx_myext_domain_model_mydata с полем url, настраиваете TCA на использование мастера ссылок. Затем используйте представление списка для создания и редактирования записей.

Примеры записей с мастером ссылок можно найти в расширении styleguide . Это расширение полезно использовать, потому что это полуофициальная демонстрация различной функциональности бэкэнда. Например, расширение "новости" также использует редактирование записей новостей (tx_news_domain_model_news.internalurl).

Установите расширение "styleguide", создайте примеры записей, выберите "elements basic" и посмотрите, например, "input_29 link" (для TYPO3 8). См. исходный код и TCA Reference renderType inputLink .

enter image description here

0 голосов
/ 06 ноября 2018

Я наконец нашел решение для этого.

Это в контроллере моего расширения

$options = [
        'renderType' => 'inputLink',
        'tableName' => 'myTable',
        'fieldName' => 'url',
        'databaseRow' => [
            'uid' => $myModel->getUid(),
            'pid' => 0
        ],
        'parameterArray' => [
            'fieldConf' => [
                'label' => 'URL',
                'config' => [
                    'eval' => 'trim',
                    'size' => 1024,
                ],
            ],
            'itemFormElValue' => $myModel->getUrl(),
            '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']);

Где «mytable» - это таблица, которую использует контроллер, «editform» - это имя формы, а «url» - поле базы данных, которое использовалось для хранения значения.

По какой-то причине вам нужно назвать свою форму «editform», поскольку sysext-JS ссылается на это.

Вам нужно добавить это в свой контроллер, чтобы это работало:

use TYPO3\CMS\Backend\Form\Element\InputLinkElement;
use TYPO3\CMS\Backend\Form\NodeFactory;

А в шаблоне жидкости вы должны использовать:

<f:format.raw>{renderedUrlField}</f:format.raw>

потому что он возвращает html-код.

Теперь инициализируйте FormEngine

Добавьте это к вашему Default.html в разделе <f:be.container...>:

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\')}',
        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\')}'
      }"

Я также включил сюда ckeditor.

А теперь вам нужно инициализировать FormEngine. Я сделал это в main.js:

TYPO3.settings.FormEngine = {"formName":"editform"};

define(['jquery', 'TYPO3/CMS/Backend/FormEngine'], function($){
    'use strict';

    $(function(){
        TYPO3.FormEngine.initialize();
    });
});

Важна первая строка, в противном случае JS выдаст ошибку.

Надеюсь, это кому-нибудь поможет.

...