【问题标题】:Silverstripe display logic for Front-end/Bootstrap forms前端/引导表单的 Silverstripe 显示逻辑
【发布时间】:2017-04-22 02:59:08
【问题描述】:

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 已经过时了。

【问题讨论】:

  • 因此,如果您将Wetsuit 下拉值更改为CustomFins 字段不会显示?您是否验证过实际下拉值包含 Custom ?也许您需要发布您的下拉创建代码。
  • 没错,是的。它将显示在 CMS 中,但不会显示在前端。该值确实包含Custom。我看到前端有 JS 错误。将更新 OP。
  • 我猜你需要包含 entwine...
  • 包含? /framework/thirdparty/jquery-entwine 除非我遗漏了某些东西并需要将其包含在其他地方?以前从未使用过缠绕。

标签: forms logic frontend silverstripe


【解决方案1】:

我认为大多数字段都不需要DisplayLogicWrapper……它适用于像UploadField 这样的字段。

你试过了吗?

NumericField::create('Fins','Fins')
    ->displayIf('Wetsuit')
    ->isEqualTo('Custom')
    ->end(),

【讨论】:

  • 对不起,我应该提到我已经尝试过使用和不使用DisplayLogicWrapper
【解决方案2】:

这里不是问题,但值得注意的是,Display Logic 1.3 及更低版本中存在一个错误,其中自定义模板存在于 /templates/ 而不是 /templates/forms/ 中,从而导致优先级问题。

如果您遇到 FieldGroup 无法呈现正确模板等问题。升级到 Display Logic 1.4 将解决此问题。

【讨论】:

  • 只是一个注释。我降级到了 Display Logic 的 1.0.8 版,它可以工作了。它不使用传统的引导主题,但它仍然可以工作。所以 SilverStripe 3.5、Bootstrap Forms 1.20 和 Display Logic 1.0.8 有效。相当过时,但它似乎对我有用
  • 我敢打赌,如果您从中复制了 Bootstrap 项目:github.com/unclecheese/silverstripe-display-logic/tree/1.0.8/… 到您的主题/{mytheme} 并升级到最新的 DisplayLogic。您将拥有最新版本并且一切正常。似乎旧版本具有内置的 Bootstrap 支持。
【解决方案3】:

您需要包含 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');
    }
}

【讨论】:

  • 谢谢,它们都已经包含了。我可以在页面源代码中看到它们。
  • 它们包含什么顺序?显示逻辑应该在 jQuery 和 jQuery Entwine 之后。
  • 顺序是Jquery 1.11.3,Bootstrap Forms,Jquery Entwine,Display Logic。使用 Jquery 1.12 会引发 JS 错误。使用 1.11.3 不会引发任何错误,但仍然无法正常工作。
猜你喜欢
  • 1970-01-01
  • 2019-06-13
  • 2021-08-12
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2014-06-05
  • 2019-09-08
  • 2023-04-07
相关资源
最近更新 更多