2012-09-11 3 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

콘텐츠가 보호되어 있거나 sitecore에서 콘텐츠 항목을 수정하려고하지 않는 한 SecurityDisabler를 사용하는 이유를 이해하지 못합니다. 또한, 당신이 달성하고자하는 것이 명확하지 않은 질문 : 데이터베이스에 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

관련 문제