나는 다음과 같은 작은 스크립트아이템의 링크를 업데이트 하시겠습니까?
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가 아니라 업데이트해야하는 링크가 있습니다.
어떻게 내가 언급 한 스크립트에서 이것을 얻을 수 있습니까?
콘텐츠가 보호되어 있거나 sitecore에서 콘텐츠 항목을 수정하려고하지 않는 한 SecurityDisabler를 사용하는 이유를 이해하지 못합니다. 또한, 당신이 달성하고자하는 것이 명확하지 않은 질문 : 데이터베이스에 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)를 호출 해 보았는지 의심 스럽다. 각 어린이에게? –