Silverstripe显示前端/ Bootstrap表单的逻辑

时间:2016-12-07 08:43:55

标签: forms logic frontend silverstripe

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虽然非常过时。

3 个答案:

答案 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');
    }
}