我正在寻找一种在 Sitefinty 的后端屏幕上有条件地显示模块字段的方法。
例如,假设我通过模块生成器创建了一个模块 - 我有两个字段:一个复选框和一个文本字段。
我希望文本字段仅在内容编辑器选中复选框字段后才显示给他们。理想情况下,该复选框可以通过内容输入过程在现场隐藏/显示一些字段。
- 有没有一种简单、可维护的方法来解决这个问题?
- 目前使用的是 10.2 版,很高兴知道如何通过新旧 UI 来实现这一点。
- 希望有一个我不知道的高级设置,但也
愿意采用 JS 方法。
谢谢!
我正在寻找一种在 Sitefinty 的后端屏幕上有条件地显示模块字段的方法。
例如,假设我通过模块生成器创建了一个模块 - 我有两个字段:一个复选框和一个文本字段。
我希望文本字段仅在内容编辑器选中复选框字段后才显示给他们。理想情况下,该复选框可以通过内容输入过程在现场隐藏/显示一些字段。
谢谢!
经过一番挖掘,我已经找到了一个可行的解决方案。以下是我的处理方式:
注意:[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 类被应用到实际元素的父包装器
现在,当内容编辑器向模块添加新内容项时,检查该特定复选框将显示和隐藏自定义文本框。
除了这个过程似乎有点过头之外,还有其他一些问题:
如果有更好/更简单的方法来解决这个问题,我会暂时不回答这个问题。