1

SilverStripe:
使用的 v4 模块:https ://github.com/unclecheese/silverstripe-display-logic

你好,美好的一天!

我在安全页面(成员列表)中,并试图在另一个 ListboxField 上找到某个字符串或值时显示 ListboxField。

安全页面.

使用上图,我想在Groups字段中选择或输入销售代表角色,一旦销售代表出现在Groups中,那就是我将显示另一个字段的时刻

这是我的代码片段

$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:刷新页面,3:重新启动应用程序),命名的所需字段$codes仍然不会出现。

安排销售代表后

但是,如果我将它应用于像 FirstName (这是一个简单的 TextField)这样的普通字段,它工作得非常好......

$codesList = Member::get()->column('Code');
$codes = ListboxField::create(
    'AccountPurchases',
    'Account Purchases',
    $codesList);
$fields->insertAfter('DirectGroups', $codes);

$codes->displayIf("FirstName")->contains("Sales Representative");

鳍

任何想法如何执行我想要的输出?

4

1 回答 1

2

对于非标准表单字段,您需要使用显示逻辑包装器。https://github.com/unclecheese/silverstripe-display-logic#dealing-with-non-standard-form-fields

“非标准”的定义有点难找,但根据我的经验,它是任何非普通 html 输入的东西。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);
于 2021-02-25T19:19:53.593 回答