【问题标题】:Using the link wizard in a Typo3 backend module在 Typo3 后端模块中使用链接向导
【发布时间】:2018-09-07 09:28:32
【问题描述】:

我正在为此而烦恼。

我创建了一个 T3-Extension - 后端模块 - 使用 Extension Builder。 现在我想为用户提供链接向导,以便她/他可以从 T3-Tree 中选择一个内部链接。

我为此创建了一个 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(它有一个链接浏览器视图助手),但是当我使用&lt;flux:...&gt; 时,表单中没有呈现任何内容。

使用 Typo3 8.7

【问题讨论】:

    标签: extbase typo3-8.x


    【解决方案1】:

    我终于找到了解决办法。

    这是在我的扩展的控制器中

    $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

    将其添加到 &lt;f:be.container...&gt; 部分中的 Default.html:

    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会报错。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      如果您想使用 Fluid 创建链接向导,我的回答将无济于事,但它回答了部分问题并添加了其他信息。

      通过 TCA 为字段设置链接向导不会神奇地使链接向导出现在 Fluid 中。但是,如果您直接在后端编辑记录(使用列表视图),它将使链接向导可用。

      示例:您使用字段url 创建一个表tx_myext_domain_model_mydata,将TCA 设置为使用链接向导。然后使用列表视图创建和编辑记录。

      您可以在扩展名styleguide 中查看带有链接向导的记录示例。使用这个扩展很好,因为它是各种后端功能的半官方演示。例如,扩展“新闻”也使用编辑新闻记录 (tx_news_domain_model_news.internalurl)。

      安装“styleguide”扩展,创建示例记录,选择“elements basic”并查看例如“input_29 链接”(对于 TYPO3 8)。请参阅source codeTCA Reference renderType inputLink

      【讨论】:

      • 嗯,谢谢你的回答。但问题不在于在后端获取链接向导,而是如何在我自己的扩展中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多