porthd / simpledataedit
使用TYPO3进行简单前端编辑
Requires
- typo3/cms-core: ^10.1
- typo3/cms-extbase: ^10.1
- typo3/cms-install: ^10.1
Replaces
- porthd/simpledataedit: v10.0.1
This package is auto-updated.
Last update: 2022-01-24 18:20:02 UTC
README
为抄写员编写的序言辅助句
一篇好的报纸文章在第一段/句中概述以下信息需求
- 谁和谁/什么在何时何地以及如何做?
- 在第二段中的“为什么”,就像热力学第二定律,总是信仰问题吗?
- 任何人如果问错问题,一定会得到一个确切的结果:错误答案!( 我希望我没有回答太多错误的描述性问题。 ;-)
谁和谁/什么在何时何地以及如何做?
该扩展通过Ajax/JavaScript直接在数据库中保存网站前端可编辑区域中的简单文本更改,如果编辑同时登录到后端,并且集成商已在模板中提供支持,则可这样做。这样,编辑可以直接在前端进行简单文本更改,并享受您的WYSIWYG感觉。
从技术角度看,该扩展仅通过一个通用的AJAX过程定义了在特定数据库中的特定记录中单个字段的隔离。每个数据记录的哈希值确保更改始终基于之前看到的文本。多个编辑员不能无意中(!)覆盖彼此的文本。
编辑器是如何工作的?
- 编辑器登录到网站的后端。
- 他在浏览器的第二个标签页中打开网站的网站前端视图。
- 可编辑区域以颜色突出显示。
- 如果收到错误消息,编辑器必须重新加载浏览器中的前端。
技术要求?
- 现代浏览器
什么不起作用?
从CRUDE(创建、读取、更新、删除、编辑)来看,目前仅限于RUE。
- 在多域名设置中,BE_TYPO3_USER饼干仅在编辑登录的当前域名中使用。如果您想在域名B中更改某些内容,您必须通过域名B登录后端。
- 后端的形式化字段(如RTE字段、日期字段或嵌入在f: translate中的数据)尚不能编辑。
- 不支持更改关系(图片、类似消息等)。
- 不支持数据记录的创建或删除。
- 更改属性中的数据或空、未显示的数据字段。
未来可能会发生什么?
我期待以下两个方面的社区
- 形式化字段使编辑过程更加复杂。这应该能够通过新的编辑器类来实现。该扩展允许定义和集成
Editor
类。 - 更改关系需要前端特殊方法以及后端通用流程。这可以通过新的编辑器类来实现。该扩展允许定义和集成
Editor
类。 - 在属性或空、不显示的数据字段中更改数据。这也可以通过新的编辑器类来实现。该扩展允许定义和集成
Editor
类。
其他两点需要开发者稍微重新思考。
- 不支持创建和删除数据记录。
- 不支持创建和删除与现有数据记录的新关系。
- 不支持创建和删除与新创建的数据记录的新关系。
为什么需要重新思考?(我是在从自己推断到别人。)在TYPO3后端中,数据记录仅在显式保存时创建。这允许在保存之前编辑数据记录。另一方面,这里提出的概念要求创建默认数据记录。你可能需要重新加载页面才能看到所有可编辑字段。因此,你需要比以前更深入地思考,初始数据记录必须包含哪些数据,并且不仅要将其锚定在TCA中,还要在模型中锚定。
集成器需要做什么
目前只支持可修剪的纯文本字段。集成器只需使用Viewhhelper Include <simpledataedit: editor ...>
输入相应的数据字段。
有没有为集成器提供的示例代码?
为了在实时系统中进行无故障测试以及经典的扩展上传形式,该扩展有自己的后端布局。为了能够用于测试,示例TypoScript也必须集成。
后端布局定义了一个测试列,其ColPos值为(7387)。激活此扩展的测试TypoScript后,列(7387)中的测试页面将使 header
字段在一个特殊模板中可编辑,该模板适用于TYPO3的仅文本
内容元素。(见代码 simpledataedit/Resources/Private/Templates/FluidElements/Text.html )
自定义样式
JavaScript的路径位于扩展的设置中,并传递给样式。
扩展的工作原理是什么?工作流程是如何的?
工作原理很简单。Viewhelper将所有前端编辑数据存储在前端。随着字体渲染,编辑器的JavaScript函数也被渲染,并集成了Ajax过程的JavaScript库。一旦离开一个更改过的字段(focusout),Ajax过程就会启动并在中间件中处理。
发生错误时,Ajax过程将写入带有注释的重定向错误消息。如果成功,则返回新的哈希值。
视图帮助器的参数
基本的视图帮助器属性也适用于 <simpledataedit: editor ...>
。
参数 | 类型 | 默认 | function |
---|---|---|---|
editor | string | 必需 | 标识符,用于适应的编辑器处理类 |
pid | int | 必需 | 显示内容项的页面ID。 |
raw | string | 必需 | 这包含原始数据。它是哈希值的基础。 |
字段名 | String | 必需 | 模型中的字段名称。如果自定义过程使用自定义的获取和更新过程获取数据,则可能不存在。 |
uid | int | 必需 | UID的数量,通过UID字段指定模型中的行。如果自定义过程使用自定义的获取和更新过程来获取数据,则可能不存在。 |
类型 | Int | 2 | 模型字段值的类型名称(int = 1, str = 2, bool = 5)。如果自定义过程使用自定义的获取和更新过程来获取数据,则可能不存在。 |
表 | String | 'tt_content' | 模型的名称。如果自定义过程使用自定义的获取和更新过程来获取数据,则可能不存在。 |
identname | string | 'uid' | 在模型中指定行的标识字段名称。如果自定义过程使用自定义的获取和更新过程来获取数据,则可能不存在。 |
paramList | string | "[]" | 自定义解析过程的参数列表,以数组格式。它被转换为JSON字符串 |
角色 | String | 未定义 | 用逗号分隔的用户组列表,包括它们的UID和/或它们的标题。 |
always | bool | false | 始终允许所有人前端编辑。必须在扩展配置中释放许可。 |
开发者能做什么
创建自己的编辑器
编辑器类必须提供CustomEditorInterface
接口的功能。参数通过从CustomEditorInfoInterface
接口派生的CustomEditorInfo
类传递。目前无法使用单独的类覆盖CustomEditorInfo
。
编辑器类的示例
在代码中查看 simpledataedit/Classes/Editor/PlainTextEditor.php
在自己的扩展中安装编辑器类
如果您已定义类 MyVendor\MyExtension\Editor\MyEditor,则当然还必须让系统知道。在您的ext_localconf.php
中定义以下代码块
/**
* define your own editor-class, if you have special elements
*/
$whoAmI = 'whoAmI'; // if i use the name directly, PHPStorm remarks it with a warning ;-(
$listOfCustomEditorClasses = [
\MyVendor\MyExtension\Editor\MyEditor::$whoAmI() =>
\MyVendor\MyExtension\Editor\MyEditor::class,
];
\Porthd\Simpledataedit\Utilities\ConfigurationUtility::mergeCustomGlobals(
$listOfCustomEditorClasses
);
静态方法确保您的类名称被输入到$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['simpledataedit']['editor']['editor'] ['your-whoAmI-name']。为了避免不希望的重写,您的whoAmI名称应包含您的供应商名称。
待办事项
- 引用页面和记录的缓存。(一个大问题)
- 我还没有弄清楚如何设置跨域cookies。或者如何简单地实现OAuth过程。我非常乐意接受带有代码示例的建议。
- 如果Simpledataedit支持以下功能将很理想
- 日期和时间以datetime格式
- 日期和时间以UNIX时间戳格式(整数)
- 逗号分隔的数字
- 翻译字段中集成数据的编辑
- 创建/删除/更改简单关系的通用查询
- 创建/删除/更改MM关系的通用查询
- 删除关系并创建新默认对象