2013-12-20 6 views
1

이미지 등 아래Sitecore 미디어 라이브러리 경로

~/media/OSS/Images/MyImage 

사용되는 것과 같은 웹 페이지, URL에 렌더링하지만 있습니다 Sitecore 6.5을 사용하면 콘텐츠 편집기 A의 라이브러리에서 이미지를 추가하는 경우 다음과 같은 경로가 사용됩니다.

~/media/1CFDDC34C94E460FAA2B1518DCA22360.PNG 

이는 웹용으로 렌더링 할 때 의미있는 경로를 사용하려고하기 때문에 의미가 있습니다.

첫 번째 미디어 이미지 경로를 사용하여 기본 두 번째 방법이 아닌 HTML보기에서 이미지를 콘텐츠 편집기에 추가하고 싶습니다. 이는 실제로 일부 HTML 파일을 가져 와서 스크립트를 통해 Sitecore에 자동으로 추가하기 때문에 이미지를 표시 할 수 있도록 규칙을 사용하여 첫 번째 이미지 형식을 사용하는 경우 미디어 라이브러리의 위치로 이미지 경로를 변경할 수 있기 때문입니다 새로 생성 된 항목. 이제 미디어 라이브러리 이미지 ID에 대한 아이디어를 얻었습니다.

첫 번째 형식은 이미지가 콘텐츠 편집기 디자인 편집기에서 렌더링되고 페이지가 렌더링 될 때 작동하지만 Sitecore는 콘텐츠 편집기에서 깨진 링크로 표시합니다. 이 형식을 사용하는 것이 안전한지에 대한 아이디어가 있습니까?

답변

3

서식있는 텍스트 필드에서 미디어 경로를 하드 코딩하지 않아야 할 수 있습니다. 두 번째 "동적 링크"는 Sitecore의 중요한 기능으로 링크 데이터베이스의 미디어와 항목 간의 연결을 유지합니다. 이렇게하면 미디어를 삭제하거나 이동할 때 보호받을 수 있습니다.

외부 소스에서 콘텐츠를 가져 오는 중이고 이미 이미지 경로를 감지 할 수있는 방법이 있으므로 가능한 경우 이미지를 프로그래밍 방식으로 업로드하고 동적 링크를 삽입하는 것이 좋습니다 (가능한 경우). 다음은

은 미디어 라이브러리에 업로드와 미디어 항목을 다시 얻기 위해 호출 할 수있는 기능입니다 :

예를 사용 :

var file = AddFile("/assets/images/my-image.jpg", "/sitecore/media library/images/example", "my-image"); 

코드 :

private MediaItem AddFile(string relativeUrl, string sitecorePath, string mediaItemName) 
{ 
    var extension = Path.GetExtension(relativeUrl); 

    var localFilename = @"c:\temp\" + mediaItemName + extension; 
    using (var client = new WebClient()) 
    { 
     client.DownloadFile("http://yourdomain.com" + relativeUrl, localFilename); 
    } 

    // Create the options 
    var options = new MediaCreatorOptions 
     { 
      FileBased = false, 
      IncludeExtensionInItemName = false, 
      KeepExisting = false, 
      Versioned = false, 
      Destination = sitecorePath + "/" + mediaItemName, 
      Database = Factory.GetDatabase("master") 
     }; 

    // Now create the file 
    var creator = new MediaCreator(); 
    var mediaItem = creator.CreateFromFile(localFilename, options); 
    return mediaItem; 
} 

로 미디어에 대한 동적 링크를 생성하기 위해 실제로 Sitecore 메서드를 찾지 못했기 때문에 다음 코드를 사용했습니다.

var extension = !String.IsNullOrEmpty(Settings.Media.RequestExtension) 
           ? Settings.Media.RequestExtension 
           : ((MediaItem)item).Extension; 

var dynamicMediaUrl = String.Format(
         "{0}{1}.{2}", 
         MediaManager.MediaLinkPrefix, 
         item.ID.ToShortID(), 
         extension); 
1

아니요 언급 한 바와 같이 깨진 링크 알림과 별도로 렌더링 문제가 발생하지 않습니다. 또한 편집기에서 이미지를 선택하고 미디어 폴더를 편집하도록 선택하면 이미지 자체가 아니라 루트에있게됩니다. 그러나 데릭 (Derek)이 지적했듯이, 동적 링크를 사용하는 것은 무언가가 옮겨 지거나 삭제 될 때 링크가 깨지지 않도록하는 중요한 기능입니다.

난 당신이 스크립트를 통해 텍스트를 추가하고 있기 때문에 당신이 (jQuery를 구문 더 유사) (이미 Sitecore에서 사용) HtmlAgilityPack 또는 FizzlerEx를 사용하여 텍스트에서 이미지를 검색 할 자신이 제공 한 코드를 사용할 수 있다는 그의 대답에 추가 할 수

이미지를 미디어 라이브러리에 업로드하려면 GUID를 잡고 src를 바꾸십시오. 다음 줄의 어떤 것 :

string content = "<whatever your html to go in the rich text field>"; 

HtmlDocument doc = new HtmlDocument(); 
doc.Load(content); 

foreach(HtmlNode img in doc.DocumentElement.SelectNodes("//img[starts-with(@src, '/media/')]") 
{ 
    HtmlAttribute attr = img["src"]; 
    Item scMediaItem = UploadLocalMedia(attr.Value); 
    attr.Value = GetDynamicMediaUrl(scMediaItem); 
}