这是一个很奇怪的问题,但我认为如果我解释它会更容易理解:我在Sitecore 7中工作了很长一段时间,致力于构建子页面的侧面导航。这是子页面是如何设置的站点树:Sitecore 7 - 根据子页面中的特定父项目维护导航
- 产品(1级)
- 产品超五类(等级2)(不是被在 网站上浏览的网页 - 这是更多的组织)
- 产品类别(3级)
- 产品列表(4级)
- 产品(5级)
如果我的产品登陆页面,然后我得到所有的产品类别(我已经完成了这个功能)。当我在“产品类别”页面上时,我会看到所有产品列表(产品类别模板的子代)(此功能正在运行)。
但是,当我在产品列表页面或产品页面上时,我对如何维护“产品类别”页面上的相同导航方式感到困惑。我知道我需要检查当前页面的父母,但我不确定最好的办法。
这就是我开始的,它适用于产品类别页面,因为它可以获取所有产品列表子代和所有产品子代。
private void Page_Load(object sender, EventArgs e)
{
var db = Sitecore.Context.Database;
this.currentItem = Sitecore.Context.Item;
//get the product
var productCategoryItem = db.Items.GetItem(this.currentItem.ID);
var productListings = productCategoryItem.Children
.Where(d => d.TemplateID.ToString() == productListingTemplateID);
ProductCategories.DataSource = productListings;
ProductCategories.DataBind();
}
protected void ProductCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
var catItem = e.Item.DataItem as Item;
Repeater categoriesRepeater = e.Item.FindControl("CategoriesRepeater") as Repeater;
var catProducts = catItem.GetChildren();
if (catProducts.ToList().Count == 0)
{
return;
}
categoriesRepeater.DataSource = catProducts;
categoriesRepeater.DataBind();
}
更新:此代码以我想要的方式工作,但是当我进入产品页面时,我发现它的重复性和不够清晰。我无法指定产品商品ID或模板ID,因为产品使用不同的模板(不知道为什么,但是这是如何设置的。尽管如此,产品页面是产品列表页面的子代,产品列表页面是儿童的产品分类页面,等等):
if (currItem.TemplateID.ToString() == productCategoryTemplateID.ToString())
{
productCategoryItem = db.Items.GetItem(currItem.ID);
}
else
{
if (currItem.TemplateID.ToString() == productListingTemplateID.ToString())
{
productCategoryItem = db.Items.GetItem(currItem.ParentID);
}
else
{
productCategoryItem = db.Items.GetItem(currItem.Parent.ParentID);
}
}
var productListings = productCategoryItem.Children
.Where(d => d.TemplateID.ToString() == productListingTemplateID);
ProductCategories.DataSource = productListings;
ProductCategories.DataBind();
虽然我对如何用if语句,我不想让代码成为重复和繁琐的做到这一点的想法。有可能通过某种while循环完成我想要的功能吗?