当前位置: 首页 > 知识库问答 >
问题:

我的扩展如何读取文本字段从tt_content在TYPO3 CMS 7.6?

督俊雅
2023-03-14

我写一个TYPO3扩展使用TYPO3 CMS 7.6. x LTS和扩展生成器。我的扩展的任务之一是扫描TYPO3tt_content表的“标题”和“主体文本”字段;匹配“主体文本”中的特定文本模式;解析找到的文本;并将结果数据与tt_content的标签一起放入扩展的日志表"标题"字段。

“使用Extbase和Fluid开发TYPO3扩展”中的“使用外国数据源”,位于[https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html]讨论使用打字脚本映射将数据放入tt_地址。相反,我从tt_内容中读取数据,并且宁愿留在扩展中的PHP中。

以TYPO3前端用户外键中的图形为例,我在extension Builder中将第二个模型添加到扩展的域模型中。我制作了一个“TtContent”模型,并使用它的“域对象设置”来“映射到现有表”,它的条目是“tt_content”。我没有在“使用模型类扩展”字段中输入值。我在我的日志模型中创建了一个“关系”字段,并运行了一条从我的Log:ttContent关系字段到我的ttContent模型标题栏的连接线。当我单击“保存”时,扩展生成器回答:“表“tt_content”的配置与extbase不兼容。如果要映射到此表,您必须自己配置它(错误606)”。我不明白这个错误信息。

在Extension Builder中,我是否在日志模型中建立与现有外部类的关系?如果是,我应该使用哪个外部类?或者,我是否在Extension Builder中创建了tt_内容的模型,并以某种方式克服了错误606?这似乎不难做到,因为我想从TYPO3中已有的表中读取。

共有1个答案

沙小白
2023-03-14

解决方案:创建一个Extbase模型和一个表示现有tt_内容表的存储库,然后编写一个打字脚本属性映射。

在TYPO3扩展生成器的域建模器中,添加一个名为“内容”的模型或一些提醒您tt_content表的名称。在内容模型的“域对象设置”部分,将“tt_content”放在“映射到现有表”框中。不要介意“扩展现有模型类”框,因为Extbase没有这样一个tt_content类。

同样在域对象设置中,将对象类型设置为“实体”,选中“是聚合根”框,取消选中“添加删除字段”、“添加隐藏字段”、“添加开始/结束时间字段”和“启用分类”框。将对象类型设置为“实体”,并检查“是聚合根?”Box会导致扩展生成器为内容模型创建存储库。

向内容模型中添加表示要在tt_内容数据库表中访问的列的属性。在我的内容模型中,我只添加了“header”和“bodytext”属性。

注意:您不需要将TYPO3的uid或pid属性添加到内容模型中。这些属性已从父\TYPO3\CMS\Extbase\DomainObject\AbstractDomainObject类扩展而来。

在Extension Builder中单击“保存”以保存新的域模型。您将收到一条消息:“警告!表“tt_content”的配置与extbase不兼容。如果要映射到此表,您必须自己配置它(错误606)。是否仍要保存?”是的,无论如何要保存。扩展生成器将回答:“成功。扩展已保存。您的扩展尚未安装。”退出扩展生成器。

注意:如果您在Extension Builder中进行了多次建模迭代,您可能会在扩展的最终代码中找到工件,这些工件是您以前的迭代遗留下来的。Extension Builder覆盖部分扩展区域,但保留其他区域。请参见[https://docs.typo3.org/typo3cms/extensions/extension_builder/Configuration/Index.html ].

使用Extbase表映射来配置并访问TYPO3 tt_content表中的内容。使用“typo3conf/ext/yourextensionkey/ext\u TypoScript\u setup.txt”文件中的TypoScript“config.tx\u extbase.persistence.classes”映射参数执行此配置。扩展生成器在保存域模型时创建了此文件。这是错误606中提到的配置。

参见“使用外部数据源”中的代码示例[https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/4-use-foreign-data-sources.html ]. 这个打字脚本代码示例定义了映射线本身。您可能希望使用“config.tx_extbase”而不是“plugin.tx_myextension”。下一页,在[https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/5-modeling-the-class-hierarchy.html],具有“config.tx_extbase”的代码示例;但它并没有显示映射线本身。

在我的情况下,我在ext_typoscript_setup.txt中添加了打字稿指令来映射“标题”和“正文”列。我还删除了扩展生成器编写的recdType=Tx_Myextensionkey_Content行,因为我想读取tt_content已经存在的记录,而不是我的扩展生成的记录。

config.tx_extbase{
    persistence{
        classes{

            Mynamespace\Myextensionkey\Domain\Model\Content {
                mapping {
                    tableName = tt_content
                    columns {
                        header.mapOnProperty = header
                        bodytext.mapOnProperty = bodytext
                    }
                }
            }

        }
    }
}

我的TYPO3扩展现在可以读取tt_内容。

注意:在ext\u typoscript\u设置中为recordType指定一个值。txt使Extbase持久层在底层tt_内容中搜索该值。CType列。Extbase通过其\TYPO3\CMS\Extbase\Configuration\AbstractConfigurationManager getConfiguration()$frameworkConfiguration数组及其\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapFactory buildDataMapInternal()函数实现这一点。在撰写本文时,您不能在recordType值中使用通配符,如*%;并且您不能给出值列表,例如text、textmedia

 类似资料:
  • 问题内容: 在一个项目上,我通过一个类似于控制台的小窗口运行Java应用程序。由于这里有一个很棒的社区,我设法通过从流程输出数据来解决问题,但是由于没有输入流,我运行的命令行应用程序将不断出错。 基于该线程中最后一个有用的答复,我想我将以类似的方式实现该实现,但是在javadocs中以及整个google和互联网中寻找某个类,该类确实没有发现任何解释方法。 因此,我需要一些链接,示例,教程,示例代码

  • 场景:我有一个jasper报告,在详细信息带内有多个文本字段。每个文本字段都具有以下属性: 位置:浮动 伸展类型:相对于最高对象 详细信息溢出时打印:false 溢出伸展:true null 问题:我希望所有的文本字段能够延伸在下一页以及。如果我使用属性'print When Detail overflows:true',那么这将导致文本字段“重印”,数据重复。那不是我的本意。我希望能够将文本字段

  • 在我的公司,我们的任务是实现一个可自动扩展的文本字段。由于默认情况下不提供此功能,我们必须从头开始开发它。web上有许多可能性,如何实现它,但没有人为as工作,所以我们决定将代码放在so上,以便其他开发人员也可以使用它。由于无法展开文本字段,因此解决方案基于文本区域: 我希望它能帮助你:)

  • 我为我创建的驱动程序的测试创建了一个自定义标记。我正在寻找一种方法,使用新的Junit5 jupiter扩展在beforeach和AfterEach期间初始化和退出这个驱动程序。 我看到有一个AnnotationSupport.class应该可以帮助你获得用特定注释标注的字段,但是没有找到任何例子。 我想要的只是能够使用扩展中用我的注释标注的字段。

  • 我是Go语言开发者。我们的团队选择使用协议缓冲区来转换数据。我选择了这个protobuf包:https://github.com/golang/protobuf.但是,这个包没有方法来处理协议缓冲区中的字段。我只在protoc生成的类文件中找到了以下代码: 那么,如何在Go中设置/获取字段?

  • 问题内容: 我想从我的文本字段中获取数据并将其设置为int h。并改变了矩形的大小,但我不确定如何从文本字段中获取数据,我在actionperfomred中使用e.getsource很累,但找不到我的文本字段。我的代码如下: 问题答案: 该变量是本地变量。如果要从访问它,则需要将其更改为实例变量。