问题描述
SilverStripe:v4
使用的模块:https://github.com/unclecheese/silverstripe-display-logic
你好,美好的一天!
我在安全页面(成员列表)中,并试图在某个字符串或值在另一个 ListBoxField 上找到时显示 ListBoxField。
通过上图,我想在组字段中选择或输入销售代表角色,一旦销售代表是出现在组中,那是我将显示另一个字段的时刻
这是我的代码片段
$codesList = Member::get()->column('Code');
$codes = ListBoxField::create(
'AccountPurchases','Account Purchases',$codesList);
$fields->insertAfter('DirectGroups',$codes);
$codes->displayIf("DirectGroups")->contains("Sales Representative");
但问题是,无论我做什么(1: dev/build?flush=1,2: refresh the page,3: restart the app)所需的名为 $codes
的字段仍然不会出现.
但是如果我将它应用到像 FirstName 这样的普通字段(它是一个简单的 TextField),它工作得非常好......
$codesList = Member::get()->column('Code');
$codes = ListBoxField::create(
'AccountPurchases',$codes);
$codes->displayIf("FirstName")->contains("Sales Representative");
任何想法如何执行我想要的输出?
解决方法
对于非标准表单字段,您需要使用显示逻辑包装器。 https://github.com/unclecheese/silverstripe-display-logic#dealing-with-non-standard-form-fields
“非标准”的定义有点难找,但根据我的经验,它是任何非普通 html-input 的东西。 Listbox 是一个花哨的前端东西,所以它是合格的。文档中的示例可能会令人困惑,但如果您使用的是 SS4 和最新的显示逻辑,则使用 Wrapper::create
而不是 DisplayLogicWrapper::create
。如果你包装它,它应该可以工作。
$codesList = Member::get()->column('Code');
$codes = Wrapper::create(
ListboxField::create('AccountPurchases','Account Purchases',$codesList);
)->displayIf("DirectGroups")->contains("Sales Representative")->end();
$fields->insertAfter('DirectGroups',$codes);