我正在尝试在Sitecore中创建一个WFFM表单来编辑当前用户的个人资料,该个人资料存储在会话中(与Sitecore.Context.User.Profile
不同)。为此,我正在寻找一种方法来使用Session中的配置文件数据预加载表单的字段。
可以这样做吗?我正在使用Sitecore CMS 6.5和WFFM 2.3。
答案 0 :(得分: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);
}
}
}
答案 1 :(得分:0)
我建议您反编译FormRenderer
WebControl并构建自己的WebControl。这是通过WFFM模块呈现表单的标准表示控件。
答案 2 :(得分:0)
似乎问题的解决方案涉及更多。首先,我将会话中的所有个人资料信息移至Sitecore.Context.User
的{{1}}。为此,必须实现自定义用户配置文件类。使用这种方法,我知道需要从此自定义配置文件而不是会话中预加载表单字段。
为此,我在内容树下创建了一个名为“Profile Variables”的文件夹,它以点表示法表示需要读取的自定义配置文件属性。例如:Profile
。
最后,我创建了一个基于单行文本字段类型的自定义WFFM字段类型,它采用了另一个属性{ DisplayName: "Home Telephone", Value: "ContactDetails.HomeTelephone" }
,从“配置文件变量”节点获取值,并在自定义字段类型上PreloadField
我使用反射来查看上下文用户的配置文件中存储在OnInit
中的属性的值,并将文本字段的PreloadField
属性设置为该值。
希望这有助于其他人寻找类似的东西。
答案 3 :(得分:0)
我正在寻找类似的事情。在2.3版本的WFFM中,有一些规则操作允许您从用户配置文件中设置字段的值。
请参阅操作:使用特定于用户配置文件字段选项的默认值,直到选择表单字段时的规则。
您可以使用全名,电子邮件,评论或任何其他自定义属性。
未包含的一个字段是UserName字段。您可以编写自定义操作返回用户名字段。