Silverstripe Display Logic在CMS中的表单上运行得非常完美,但我不能让它在前端的表单上工作,特别是Bootstrap表单。
它将隐藏元素,但在应用逻辑时不会显示它。
//If the wetsuit dropdown is equal to custom then show the fins numerical field.
DisplayLogicWrapper::create(NumericField::create("Fins","Fins"))->displayIf("Wetsuit")->isEqualTo('Custom')->end(),
我看到它只需要显示从无变化到阻止。 有没有办法这样做,以便它仍然保持页面重新加载状态?下拉值将保存为数据库条目。
编辑:这适用于CMS,但在前端不起作用 - Custom
是枚举值的一部分。
DropdownField::create("Wetsuit","Wetsuit")
->setSource(singleton('DiveEquipment')->dbObject('Wetsuit')->enumValues())
->setEmptyString('Select one'),
NumericField::create('Fins','Fins')
->displayIf('Wetsuit')
->isEqualTo('Custom')
->end(),
EDIT2:使用SilversTripe 3.5,Bootstrap Forms 1.20和Display Logic 1.0.8
1.0.8虽然非常过时。
答案 0 :(得分:0)
对于大多数字段,我认为您不需要DisplayLogicWrapper
...它适用于UploadField
等字段。
你试过这个吗?
NumericField::create('Fins','Fins')
->displayIf('Wetsuit')
->isEqualTo('Custom')
->end(),
答案 1 :(得分:0)
这里不是问题,但值得注意的是,Display Logic 1.3中存在一个错误,并且在/ templates / not / templates / forms /中存在自定义模板,导致优先级问题。
如果您遇到FieldGroup无法呈现正确模板或诸如此类的问题。升级到Display Logic 1.4将解决此问题。
答案 2 :(得分:0)
你需要包含jQuery和jQuery Entwine才能在前端工作。这是未经测试的,但应解决您的问题。
class Page_Controller extends ContentController {
public function init() {
parent::init();
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
Requirements::javascript(THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js');
}
}