【问题标题】:Sitecore Filter Pages based on Parent of Parent PageSitecore 根据父页面的父页面过滤页面
【发布时间】:2019-07-23 05:27:13
【问题描述】:

我的页面结构

-职业页面 1(模板通用页面)

  • 前端开发人员(普通文件夹)

    • Page1(模板-作业页面)
    • Page2(模板-作业页面)
    • Page3(模板-作业页面)
    • Page4(模板-作业页面)
  • 后端开发人员(普通文件夹)

    • Page1(模板-作业页面)
    • Page2(模板-作业页面)
    • Page3(模板-作业页面)
    • Page4(模板-作业页面)

-职业页面 2(模板通用页面)

  • 前端开发人员(普通文件夹)

    • Page1(模板-作业页面)
    • Page2(模板-作业页面)
    • Page3(模板-作业页面)
    • Page4(模板-作业页面)
  • 后端开发人员(普通文件夹)

    • Page1(模板-作业页面)
    • Page2(模板-作业页面)
    • Page3(模板-作业页面)
    • Page4(模板-作业页面)

我的问题是:我的编码方式使得每当我点击时(职业第 1 页) 我得到了使用作业页面模板的页面列表 所以我得到了职业第1页的第1-8页列表和职业第2页第1-8页的列表 但我只想要 (Career Page 1) 的页面

我已经尝试 GetQueryable 来获取模板 id 等于作业页面模板的页面列表

IQueryable search = context.GetQueryable().Where(x => x.TemplateId == PageID); //这将为我获取从 PageID(Job page) 模板创建的所有页面的列表

当我点击职业页面 1 时,我只想要(职业页面 1)的页面,而当我点击职业页面 2 时,我只想要(职业页面 2)的页面列表

【问题讨论】:

    标签: c# sitecore


    【解决方案1】:

    您也应该过滤Paths(索引为_path)。它包含ID 的列表,表示项目所在的路径。所以它看起来像这样(取决于你的模型是什么样的):

    contex.GetQueryable<MyType>().Where(x => x.TemplateId == JobPageTemplateId && x.Paths.Contains(careerPageId))
    

    根据您的解决方案的外观,考虑过滤语言和_latestversion,以避免意外结果和潜在重复。

    【讨论】:

    • 感谢您的回答,不胜感激
    【解决方案2】:

    可以使用多种方式过滤

    1. 使用 Axes.GetAncestors 获取 Ancestors 列表并运行循环到 Page type 是否包含该 Ancestors
    2. 使用 Path 属性检查职业页面 Name{Attribute} 是否存在,这可以通过 Jobpage.Path.Contains(Sitecore.Context.Item.Name) 来完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多