2012-09-11 90 views
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定義。

我將如何實現這一目標中提到的腳本?

+0

我不明白爲什麼你正在使用SecurityDisabler,除非內容被保護,或者您正試圖修改Sitecore的內容項。另外,從你的問題來看,你不清楚你想要實現什麼:在數據庫中重寫sitecore項目的URL或者渲染項目的絕對路徑? – xoail

+0

@xoail我使用SecurityDisabler,因爲我想修改的內容 - 只是還沒有想出如何,但:-)腳本舉出的清單我的項目中的所有鏈接。這是一個Sitecore 6.5解決方案,所以默認情況下鏈接將與GUID一起列出。但是,由於某些內容是從另一個解決方案導入的,其中一些鏈接直接鏈接到媒體庫中的文件。就像「〜/ media/my folder/my pdf file.pdf.ashx」。那些我想改變,所以他們鏈接到GUID(然後我可以控制它如何通過web.config設置顯示給用戶)。 – brother

+0

我懷疑它會工作,但你有沒有嘗試過調用Sitecore.Links.LinkDatabaseHelper.UpdateLink(child);爲每個孩子? –

回答

0

「重構鏈接數據庫」的動作應該工作。 空的ID可能是由於鏈接斷開(在更新鏈接時未在數據庫中找到目標項)。 因此,應通過控制面板或代碼(請參見LinkDatabaseHelper)重建鏈接。

+0

問題在於,某些鏈接在富文本編輯器中是「硬編碼」的。我想更改這些以鏈接到項目的GUID而不是絕對鏈接。 – brother