gpt4 book ai didi

javascript - TYPO3:如何在自己的后端模块中使用元素浏览器?

转载 作者:行者123 更新时间:2023-11-28 14:38:40 25 4
gpt4 key购买 nike

我想在自己的 TYPO3 8.7 后端模块中有一个简单的输入字段,在元素浏览器中单击页面后应该填充 pageid。

我过去尝试过很多次,但主要问题是当单击带有错误 - 对主窗口的引用未正确设置的页面时,元素浏览器中会出现错误警报!

我的 module.js 文件现在看起来像:

var setFormValueOpenBrowser;

define(['jquery', 'TYPO3/CMS/Lux/Vendor/Chart.min'], function($) {

// define(['jquery', 'TYPO3/CMS/Lux/Vendor/Chart.min', 'TYPO3/CMS/Backend/FormEngine'], function($) {

// main options
// var FormEngine = {
// formName: TYPO3.settings.FormEngine.formName
// ,backPath: TYPO3.settings.FormEngine.backPath
// ,openedPopupWindow: null
// ,legacyFieldChangedCb: function() { !$.isFunction(TYPO3.settings.FormEngine.legacyFieldChangedCb) || TYPO3.settings.FormEngine.legacyFieldChangedCb(); }
// };

var url = '/typo3/index.php?route=%2Fwizard%2Frecord%2Fbrowse&token=53b5d23e8e661e465636a96ca618426cb293d0b5&mode=db&bparams=data[pages][2][content_from_pid]|||pages|';
var popup = window.open(url, 'Typo3WinBrowser', 'height=600,width=800,status=0,menubar=0,resizable=1,scrollbars=1');
popup.focus();

});

当然,此示例中的 token 是硬编码的 - 但这不是问题。顺便说一句:如果我尝试通过 require.js 加载 FormEngine,控制台会抛出 TypeError: TYPO3.settings.FormEngine is undefined

有人有在自己的后端模块中使用元素浏览器(文件或页面)的工作代码吗?或者是否有一个现有的扩展可以让我深入研究代码?

最佳答案

虽然这个问题有点过时,但我是这样做的:

这是在我的扩展程序的 Controller 中

$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”是 Controller 使用的表,“editform”是表单名称,“url”是用于存储值的数据库字段。

出于某种原因,您需要将表单命名为“editform”,因为 sysext-JS 引用了该表单。

您需要将其添加到 Controller 中才能使其正常工作:

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

在流体模板中,您必须使用:

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

因为它返回 html 代码。

关于javascript错误:那是因为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会抛出上述错误。

希望这对某人有帮助。

关于javascript - TYPO3:如何在自己的后端模块中使用元素浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com