【问题标题】:Sitecore return dependant drop down listSitecore 退货相关下拉列表
【发布时间】:2017-02-17 21:50:19
【问题描述】:

我的 CMS 中有以下设置

在 ContactUsPageSettings 下我有一些项目正在使用名为 ContactUsQuestionsOption 的模板,然后在下面我有一些项目正在使用名为 ContactUsSubQuestionOption 的模板。

我想在一个下拉列表中返回所有的 ContactUsQuestionsOption,我已经设法做到了。我遇到的问题是有第二个下拉列表,它只返回所选项目的子项。查看上图,如果选择了 Faculty Research and Publications,我希望第二个下拉菜单显示 BSR、Faculty Inquiries 和 ResearchSupportEnquiries。

我有一个看起来像这样的视图模型:

    [SitecoreType(AutoMap = true)]
public class ContactUsPageSettingsViewModel : ContactUsPageSettings
{
    [SitecoreQuery(".//*[@@templatekey='contactusquestionsoption']", IsLazy = false, IsRelative = true)]
    public IEnumerable<ContactUsQuestionsOption> QuestionsOptionItems { get; set; }

    [SitecoreQuery("./child::*", IsLazy = true, IsRelative = true)]
    public virtual IEnumerable<ContactUsPageSettingsViewModel> Children { get; set; }

}

还有一个像这样的第二个视图模型:

[SitecoreType(AutoMap = true)] 公共类 QuestionsViewModel : ContactUsQuestionsOption { [SitecoreQuery(".//*[@@templatekey='contactussubquestionsoption']", IsLazy = false, IsRelative = true)] 公共虚拟 IEnumerable QuestionsOptionItems { get;放; }

}

但这似乎不是答案。有什么想法吗?

【问题讨论】:

  • 您能否说明哪些项目使用了问题选项,哪些项目使用了子问题模板?
  • 我已更新我的问题以澄清我的问题。
  • 看着 GlassMapper 我想我需要公开父 guid。这是正确的想法吗?

标签: sitecore sitecore8 glass-mapper


【解决方案1】:

我终于找到了解决方案。我更改了 GlassBase 中的父项,在父项上方添加了声明 [SitecoreParent(InferType = true)]。我现在可以根据父 ID 过滤子问题。

谢谢

杰玛:)

【讨论】:

  • 很高兴你能弄明白。在我的回答中,您会看到我通过将查询 SitecoreQuery 属性替换为用 SitecoreChildren 修饰的属性来简化您的代码。
【解决方案2】:

由于您在 Sitecore 中有 3 个独特的数据模板,因此您需要 3 个独特的基于 Glass 的模型。此外,您不必在任何类中使用查询属性,只需使用 Children 属性即可。

旁注,虽然不是完成您尝试做的事情所必需的,但您可能会发现确保您的所有 Glass 模型至少具有以下 GlassBase 类中的属性会很有帮助。

这就是我要做的:

创建一个包含这些属性的基类并更新所有其他 Glass 模型以继承此类,它们将正确映射 children 属性(以及 Parent 属性)。

public class GlassBase
{
    public Guid Id { get; set; }

    [SitecoreParent(InferType = true)]
    public GlassBase Parent { get; set; }

    [SitecoreChildren(InferType = true)]
    public GlassBase Children { get; set; }
}

现在您的特定于模板的模型可以简单地继承这个类:

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)]
public class ContactUsPageSettings : GlassBase
{
}

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)]
public class ContactUsQuestionsOption : GlassBase
{
}

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)]
public class ContactUsSubQuestionOption : GlassBase
{
}

我省略了映射到这些模板中每个字段的属性,因为我不知道每个模板中有哪些字段。

附注,确保在每个 Glass 模型的顶部设置 SitecoreType 装饰器的 TemplateId 属性,以确保它们映射到正确的数据模板网站核心。 GlassBase 不需要 SitecoreType 装饰器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多