2012-08-06 2 views
0

Sitecore 6.5 솔루션에는 다음이 있습니다.미디어 파일에 Sitecore 내부 링크가 있습니까?

<sc:Text runat="server" Field="bodyText"/> 

Sitecore.Context.Item["bodyText"] 

나는 용액에 후자의 많은 장소를 사용 - 너무 처음 없음. 후자를 사용하는 경우 Media.UseItemPaths이 web.config의 true으로 설정되어 있어도 medialibrary에 대한 모든 링크의 형식이 ~/media/31F0E8084F9443789F25836A2B285D3E.ashx임을 발견했습니다.

그러나 첫 번째 언급 된 방법을 사용할 때 <sc:Text /> medialibrary 항목에 대한 링크는 올바른 형식 (GUID가 없지만 미디어 라이브러리의 폴더 구조)에 있습니다.

무슨 일이야?

+0

당신이 페이지의 소스에있는 것을 확인 할 수 - 시작 또는 % 7E 대신 틸다에서 틸다 문자가 있는지? 예 : ~/media/31F0E8084F9443789F25836A2B285D3E.ashx 또는 % 7e/media/31F0E8084F9443789F25836A2B285D3E.ashx? –

답변

3

후자

Sitecore.Context.Item["bodyText"] 

필드의 리터럴 값이다. 링크가 전혀 확장되지 않도록 사이트 코드 RenderField 파이프 라인을 통과하지 않습니다.

당신은 당신이 FieldRenderer 클래스처럼 사용할 수 있습니다 뒤에 코드에서 필드를 렌더링 할 경우 : 그냥 더 명확하게 추가 할 수

Sitecore.Web.UI.WebContols.FieldRenderer.Render("bodyText", Sitecore.Context.Item) 
+1

이것은 내가 쓸 작정입니다. Sitecore 6.X에서는 또는 FieldRenderer를 사용하여 링크를 올바르게 "렌더링"해야합니다. – Holger

0

첫 번째 컨트롤은 특정 파이프 라인을 통과하고 저장된 항목 참조를 친숙한 URL로 전달하는 컨트롤입니다.

두 번째 것은 편집되지 않은 값을 반환하는 직접 값 호출입니다. friednly URL을 얻으려면 컨트롤을 사용해야합니다.

왜 직접 값을 호출해야합니까? halbherz 언급했듯이

1

(어떤 @halbherz을 말할 @marto 완전히 정확) 당신 때문에 왜 ~ 그들이 이런 식으로 더 잘 이해할 수 있을까요?

RichText 필드에서 항목의 '짧은 GUID'를 사용하여 미디어 및 기타 사이트 링크 항목에 대한 링크가이 형식 (~/media/31F0E8084F9443789F25836A2B285D3E.ashx)으로 저장되므로 사용자가 미디어/콘텐츠 항목의 이름을 변경하거나 이동할 경우 필드의 항목에 전체 이름 & 경로를 포함시키지 않고 링크가 여전히 유효합니다.

당신은 (FieldRenderer에서 같은 SC로 상속 또는 컨트롤 : 텍스트/SC : 이미지 등) FieldRenderer 사용할 때 RenderField 파이프 라인이 호출되고 링크가 이상 당신의 Web.config <LinkManager> 섹션을 참조합니다 (LinkManager에 의해 처리됩니다 info on config). LinkManager는 모든 링크가 일관된 방식으로 처리되도록하기 위해 존재합니다. 필드 값을 호출하면이 파이프 라인을 직접 무시하고 필드의 원시 텍스트를 가져옵니다.

사용이 유사 자신의 링크를 만들 수 있습니다 LinkManager.GetDynamicUrl(item);

관련 문제