TYPO3 (7.6.15) Extbase displayCond in flexform.xml在两个扩展之一中不起



我一直在谷歌上搜索这个问题,但没有发现错误。

我有一个非常简单的扩展,我用扩展生成器编写,它按预期工作。但还有一个小错误仍然存在。

该扩展用于课程和课程申请。这些课程有不同的类型。如果我想将插件元素添加到页面,我有两种不同类型的前端显示选项:一种用于主页,显示不同类型的课程,另一种用于相应的课程页面列出该类型的所有课程和注册表。这一切都完美无缺。因此,当我向页面添加插件元素时,我可以选择"主页"或"课程页面"。选择"主页"后,不应显示其他选项。选择"课程页面"时,应显示另一个具有不同课程类型的下拉元素。

直到最近,我才意识到在我的flexform中,我已经消除了displayCons(不记得为什么(,当然它显示了带有"主页"和"课程页面"的课程类型的选项。但是,如果我添加显示康德,它不会显示任何选项。这是带有displayCond的flexform代码:

<?xml version="1.0" encoding="UTF-8"?>
<T3DataStructure>
<sheets>
<general>
<ROOT>
<TCEforms>
<sheetTitle>Kurse</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<switchableControllerActions>
<TCEforms>
<label>Ansicht</label>
<onChange>reload</onChange>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Home</numIndex>
<numIndex index="1">Kurse->listHome</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">Kursseite</numIndex>
<numIndex index="1">Kurse->list;Kunde->sendMail</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</switchableControllerActions>
<settings.kursTypen>
<TCEforms>
<label>Kurstyp</label>
<config>
<type>select</type>
<foreign_table>tx_gicourses_domain_model_kurstyp</foreign_table>
<foreign_table_where>AND (sys_language_uid=CAST('###REC_FIELD_sys_language_uid###' AS UNSIGNED) OR sys_language_uid = '-1') AND tx_gicourses_domain_model_kurstyp.deleted = 0 AND tx_gicourses_domain_model_kurstyp.hidden = 0 order by name</foreign_table_where>
<size>1</size>
<minitems>1</minitems>
<maxitems>1</maxitems>
</config>
<displayCond>
<OR>
<numIndex index="1">FIELD:switchableControllerActions:=:Kurse->list</numIndex>
</OR>
</displayCond>
</TCEforms>
</settings.kursTypen>
</el>
</ROOT>
</general>
</sheets>
</T3DataStructure>

有趣的是,在另一个扩展中,我有一个相应的显示条件,这就像预期的那样工作:

<?xml version="1.0" encoding="UTF-8"?>
<T3DataStructure>
<sheets>
<general>
<ROOT>
<TCEforms>
<sheetTitle>Books</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<switchableControllerActions>
<TCEforms>
<label>Ansicht</label>
<onChange>reload</onChange>
<config>
<type>select</type>
<items type="array">
<numIndex index="0" type="array">
<numIndex index="0">Alle</numIndex>
<numIndex index="1">Buch->list</numIndex>
</numIndex>
<numIndex index="1" type="array">
<numIndex index="0">Nach Kategorie</numIndex>
<numIndex index="1">Buch->listByCat</numIndex>
</numIndex>
</items>
</config>
</TCEforms>
</switchableControllerActions>
<settings.buchKategorie>
<TCEforms>
<label>Buchkategorie</label>
<config>
<type>select</type>
<foreign_table>tx_gibooks_domain_model_buchkategorie</foreign_table>
<foreign_table_where>AND (sys_language_uid=CAST('###REC_FIELD_sys_language_uid###' AS UNSIGNED) OR sys_language_uid = '-1') AND tx_gibooks_domain_model_buchkategorie.deleted = 0 AND tx_gibooks_domain_model_buchkategorie.hidden = 0 order by name</foreign_table_where>
<size>1</size>
<minitems>1</minitems>
<maxitems>1</maxitems>
</config>
<displayCond>
<OR>
<numIndex index="1">FIELD:switchableControllerActions:=:Buch->listByCat</numIndex>
</OR>
</displayCond>
</TCEforms>
</settings.buchKategorie>
</el>
</ROOT>
</general>
</sheets>
</T3DataStructure>

我想到的唯一区别是,与第二个扩展(Buch->listByCat(中的操作相比,第一个扩展(Kurse->list(中的操作是不可缓存的操作,后者是可缓存的操作。但即使更改此设置,在选择插件元素时也没有改变。

这个问题可能从何而来?我必须检查其他内容吗?有没有另一种方法可以实现想要的结果?

我已经读过几个类似的问题,但没有一个说明我拥有的代码有问题(没有错别字错误,条件是正确的......(,尽管我已经阅读了几个与displayCons相关的错误,这些错误似乎已经解决。

由于我对 TYPO3 很陌生,如果您能指出我需要控制和/或解释您的代码的文件,我将不胜感激。谢谢

目前,我可以将选项同时显示在"主页"和"课程页面"上,但对于不太喜欢使用计算机的人来说,这可能会令人困惑......

这是臀部的半个镜头,但是您是否在没有<OR>段的情况下尝试过?通常,当您只有一个条件要检查时,您不需要<AND><OR>- 我怀疑这会混淆条件,因此会产生误报。不过,请对此持保留态度 - 我什至不确定该displayCond是否是检查字符串是否包含另一个字符串的正确方法。

也就是说,已经修复了FlexForm值解析/检查和displayCond - 因此无论如何,升级TYPO3版本肯定是值得的(自您的版本以来已有7 +错误修复版本(。

多亏了克劳斯·杜伊,我发现了我的错误:

修正前我的显示Cond:

FIELD:switchableControllerActions:=:Kurse->list

之后:

FIELD:switchableControllerActions:=:Kurse->list;Kunde->sendMail

当你复制一些应该工作的东西,但你甚至不明白它的作用时,就会发生这种情况。感谢克劳斯·杜的提示,我意识到这是字符串的比较,比较的字符串与想要的字符串不匹配。

因此,如果有人想将其用于其他用途:您必须在"FIELD:switchableControllerActions:=:"之后使用整个操作字符串

。相当容易不是吗...快乐编码

我也有类似的东西。我的displayCond没有效果。我参考了 TYPO3 解释教程中的说明。在给定的示例中,displayCond放置在config标签内。

不工作:

<TCEforms>
<label>Label</label>
<config>
<displayCond>FIELD:switchableControllerActions:=:Extension->themes</displayCond>
<type>input</type>
</config>
</TCEforms>

加工:

<TCEforms>
<label>Label</label>
<displayCond>FIELD:switchableControllerActions:=:Extension->themes</displayCond>
<config>
<type>input</type>
</config>
</TCEforms>

"Kurse->list"在Flexform XML中看起来如何?它应该在那里读"库尔塞->列表",否则您可能有标签不匹配

最新更新