這是一個很奇怪的問題,但我認爲如果我解釋它會更容易理解:我在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循環完成我想要的功能嗎?