使用后端条件在Sitefinity中显示模块字段

时间:2018-03-08 04:44:22

标签: sitefinity sitefinity-10 sitefinity-feather

我正在寻找一种在Sitefinty的后端屏幕上有条件地显示模块字段的方法。

例如,假设我已经通过模块构建器创建了一个模块 - 我有两个字段:复选框和文本字段。

我希望文本字段仅在他们选中复选框字段后才显示给内容编辑者。理想情况下,复选框可以通过内容输入过程在现场隐藏/显示一些字段。

  • 有一种直截了当,可维护的方式吗?
  • 目前使用的是10.2版本,知道如何完成它会很棒 这可以通过新旧UI实现。
  • 希望有一个我不知道的高级设置,但是 也愿意采用JS方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

经过一番挖掘,我找到了一个可行的解决方案。以下是我处理它的方式:

注意:[module]和[section]假定您的自定义模块名称和部分。如果您未在backend screens and tweaks中设置部分,则所有字段都位于MainSection

第1步 - 在高级设置中为模块添加自定义脚本。

假设这是一个动态模块......

在项目中创建一个JS文件,并通过转到:

在高级设置中引用它
Advanced settings > Dynamic Modules > Controls > [module] > Views > [Module]View > Scripts

单击Create New并将脚本位置指向您创建的JS文件。

第2步 - 在字段中添加自定义类

保持在高级设置中的位置并导航到您已经制作的字段。例如:

Advanced settings > Dynamic Modules > Controls > [module] > Sections > [Section] > Fields > [Field]

在此页面上向下滚动到CSS Class并向此字段添加自定义CSS类

第3步 - 添加自定义Javascript

Sitefinity使用jQuery所以我使用它并根据类名设置一些非常基本的JS:

$(document).ready(function(){
    $('.myTextBox').hide();

    $('.myCheckbox input').on('change', function(){
        var $this = $(this),
            textBox = $('.myTextBox');

        $this.is(':checked') ? textBox.show() : textBox.hide();
    })
});

注意:自定义CSS类应用于实际元素的父包装

现在,当内容编辑器将新内容项添加到模块时,选中该特定复选框将显示并隐藏自定义文本框。

除了这个过程看起来有点过头之外,还有一些其他问题:

  • 您必须在编辑和插入时设置对自定义脚本的调用 视图。
  • 它没有考虑任何验证。
  • 随着Sitefinity获得后端UI升级,长期可持续性值得怀疑。

如果有更好/更简单的方法,我会暂时不回答这个问题。