我正在尝试在 Sitecore 中创建一个 WFFM 表单来编辑当前用户的配置文件,该配置文件存储在 Session 中(与 Session 不同Sitecore.Context.User.Profile
)。为此,我正在寻找一种方法来使用会话中的配置文件数据预加载表单的字段。
这可以做到吗?我正在使用 Sitecore CMS 6.5 和 WFFM 2.3。
我正在尝试在 Sitecore 中创建一个 WFFM 表单来编辑当前用户的配置文件,该配置文件存储在 Session 中(与 Session 不同Sitecore.Context.User.Profile
)。为此,我正在寻找一种方法来使用会话中的配置文件数据预加载表单的字段。
这可以做到吗?我正在使用 Sitecore CMS 6.5 和 WFFM 2.3。
WFFM 不能开箱即用地做到这一点。我们选择了另一种方法来解决问题。在表单呈现下,您可以/sitecore/layout/Renderings/Modules/Web Forms for Marketers/Form
在Parameters
其中添加FormTemplate
带有自定义用户控件的参数以呈现表单:
FormTemplate=/sitecore modules/web/Web Forms for Marketers/Control/CustomSimpleFormAscx.ascx
在这个用户控件中,我们循环遍历每个字段并根据用户的自定义属性设置输入字段的值。当然,您可以将其增强到其他字段,例如 select 等。这是一些示例代码:
public partial class CustomSimpleFormAscx : SitecoreSimpleFormAscx
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
FillInUserData(this.FieldContainer);
}
private void FillInUserData(System.Web.UI.Control control)
{
foreach (System.Web.UI.Control child in control.Controls)
{
if (child is BaseControl)
{
if (child is InputControl)
{
InputControl field = (InputControl)child;
field.Text = Sitecore.Context.User.Profile.GetCustomProperty(field.ControlName);
}
}
FillInUserData(child);
}
}
}
我建议您反编译FormRenderer
WebControl 并构建自己的来执行此操作。这是通过 WFFM 模块呈现表单的标准表示控件。
似乎问题的解决方案涉及更多。首先,我将所有个人资料信息从会话移至Sitecore.Context.User
's Profile
。为此,必须实现自定义用户配置文件类。使用这种方法,我知道需要从这个自定义配置文件而不是会话预加载表单字段。
为此,我在内容树下创建了一个名为“配置文件变量”的文件夹,它以点表示法表示需要读取的自定义配置文件属性。例如:{ DisplayName: "Home Telephone", Value: "ContactDetails.HomeTelephone" }
。
最后,我创建了一个自定义 WFFM 字段类型,基于 Single Line Text 字段类型,该类型还有一个属性,PreloadField
从“配置文件变量”节点获取值,以及OnInit
我从上下文用户的配置文件中读取的自定义字段类型反射存储在其中的属性的值PreloadField
并将文本字段的Text
属性设置为该值。
希望这可以帮助其他人寻找类似的东西。
我正在寻找做类似的事情。在 WFFM 的 2.3 版本中,有一些规则操作允许您从用户配置文件中设置字段的值。
请参阅操作:使用用户配置文件特定字段选项中的默认值,直到您选择表单字段时的规则。
您可以使用全名、电子邮件、评论或任何其他自定义属性。
不包括的一个字段是 UserName 字段。您可以编写自定义操作返回用户名字段。