我一直在谷歌上搜索这个问题,但没有发现错误。
我使用Extension Builder编写了一个非常简单的扩展,它可以按预期工作。但仍有一个小错误。
该扩展程序用于课程和课程应用程序。这些课程有不同的类型。如果我想将plugin-element添加到页面中,我有两种不同类型的前端显示选项:一个用于主页,显示不同类型的课程,另一个用于相应的课程页面列出所有类型的课程和注册表。一切都很完美。因此,当我向页面添加一个插件元素时,我可以选择" Home"或"课程页面"。选择Home时,不应显示其他选项。当"课程页面"如果选中,则应显示具有不同课程类型的另一个下拉元素。
直到最近我才意识到,在我的flexform中,我已经取消了displayCond(不记得为什么),当然它还显示了#34; home"和"课程页面"。但是,如果我添加displayCond,它不会显示任何一个选项。这是带有displayCond的flexform-code:
<?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>
我唯一的区别是第一个扩展(Kurse-&gt;列表)中的操作与第二个扩展(Buch-&gt; listByCat)中的操作相比是不可缓存的操作。可缓存的动作。但即使改变了这一点,在选择插件元素时也没有任何改变。
这个问题可能来自哪里?我还需要查看其他内容吗?还有另一种方法可以达到想要的结果吗?
我已经阅读了几个类似的问题,但没有一个说明我的代码有问题(没有错字错误,条件是正确的......)虽然我已经阅读了几个与之相关的错误尽管似乎已经解决了displayCond。
由于我是TYPO3的新手,如果您能指出需要控制的文件和/或解释您的代码,我将不胜感激。谢谢
暂时我可以将选项显示在&#34; Home&#34;和&#34;课程页面&#34;但对于那些不喜欢使用计算机的人(编辑)而言,这可能会让人感到困惑......
答案 0 :(得分:1)
这是臀部的一半镜头,但你是否尝试过没有<OR>
段?通常,当您只有一个条件需要检查时,您不需要<AND>
或<OR>
- 我怀疑这会使条件混乱,因此会产生误报。尽管如此 - 我甚至不确定displayCond
是否是检查字符串是否包含另一个字符串的正确方法。
也就是说,已经修复了FlexForm值解析/检查和displayCond - 所以在任何情况下升级你的TYPO3版本肯定是值得的(自你的版本以来已经有7个以上的bug修复版本)。
答案 1 :(得分:0)
感谢Claus Due发现了我的错误:
我的displayCond在更正之前:
FIELD:switchableControllerActions:=:Kurse->list
之后:
FIELD:switchableControllerActions:=:Kurse->list;Kunde->sendMail
当你复制一些应该起作用的东西但你甚至不理解它的作用时会发生什么。感谢Claus Due的暗示我意识到这是字符串的比较,并且比较的字符串与想要的字符串不匹配。
因此,如果有人想要将其用于其他内容:你必须在&#34之后使用整个行动字符串:FIELD:switchableControllerActions:=:&#34; ...
相当简单并非......快乐编码
答案 2 :(得分:0)
我有类似的事情。我的displayCond
无效。我遵循了TYPO3 Explained教程中的说明。在给出的示例中,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>
答案 3 :(得分:-1)
&#34; Kurse-&gt;列表如何&#34;看看Flexform XML?它应该在那里阅读&#34; Kurse-&amp; gt; list&#34;否则你可能有标签不匹配