0
我有以下的小腳本更新鏈接的項目?
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
using (new Sitecore.SecurityModel.SecurityDisabler())
{
foreach (Sitecore.Data.Items.Item child in item.Children)
{
foreach (ItemLink link in child.Links.GetAllLinks())
{
Item itm = link.GetTargetItem();
if (itm != null) {
Response.Write(link.TargetPath + " (" + itm.Paths.IsMediaItem + ", " + itm.ID + ")" + "<br/>");
} else
{
Response.Write("<span style='color:red;font-weight:bold;'>NULL ITEM ("+ link.TargetPath + ")</span><br/>");
}
}
if (item.Paths.ContentPath.Split("/".ToCharArray()).Length <= 10)
RecurseLinks(child, reset);
}
}
這遍歷從指定startpath所有項目(和孩子),並獲得在項目中定義的所有鏈接。
一些我需要更新的鏈接,因爲它們中的一些正在用絕對路徑,而不是它鏈接到(媒體或內容項目)的項目的ID定義。
我將如何實現這一目標中提到的腳本?
我不明白爲什麼你正在使用SecurityDisabler,除非內容被保護,或者您正試圖修改Sitecore的內容項。另外,從你的問題來看,你不清楚你想要實現什麼:在數據庫中重寫sitecore項目的URL或者渲染項目的絕對路徑? – xoail
@xoail我使用SecurityDisabler,因爲我想修改的內容 - 只是還沒有想出如何,但:-)腳本舉出的清單我的項目中的所有鏈接。這是一個Sitecore 6.5解決方案,所以默認情況下鏈接將與GUID一起列出。但是,由於某些內容是從另一個解決方案導入的,其中一些鏈接直接鏈接到媒體庫中的文件。就像「〜/ media/my folder/my pdf file.pdf.ashx」。那些我想改變,所以他們鏈接到GUID(然後我可以控制它如何通過web.config設置顯示給用戶)。 – brother
我懷疑它會工作,但你有沒有嘗試過調用Sitecore.Links.LinkDatabaseHelper.UpdateLink(child);爲每個孩子? –