2011-05-12 8 views
8

<sc:Image> y <sc:FieldRenderer>, al representar un MediaItem, generar código HTML que se parece a lo siguiente:¿Cómo puedo configurar Sitecore para que genere enlaces absolutos a los elementos multimedia?

<img src="~/media/twitter.gif" alt="Twitter" width="100" height="22" /> 

Aviso la ruta relativa utilizada en src atributo: esto significa que cuando dicha imagen se vuelve a utilizar en varias páginas, la el navegador tiene que buscarlo varias veces (por ejemplo, en la página http://example.com/ y http://example.com/about-us/). Cuando genero la etiqueta img en el código, que puede utilizar el siguiente fragmento de forzar una URL absoluta:

string url = Sitecore.StringUtil.EnsurePrefix('/', 
    Sitecore.Resources.Media.MediaManager.GetMediaUrl(media)); 

¿Cómo puedo configurar Sitecore para forzar la barra inicial en las URL de los medios?

Uso de Reflector Puedo ver que MediaOptions.AbsolutePath controla el comportamiento que quiero lograr, pero no sé cómo puedo configurarlo para los controles incorporados de Sitecore. El ajuste Media.MediaLinkPrefix o mediaPrefixes en web.config no parece cambiar nada.

Respuesta

8

Trabajé en un proyecto donde almacenamos recursos multimedia en CDN de Akamai, por lo que tuvimos que cambiar la forma en que se resolvieron las URL de los medios.

Adaptamos la clase incorporada LinkProvider cambiando ExpandDynamicLinks(). También adaptamos Sitecore.Resources.Media.MediaProvider y actualizamos el método GetMediaUrl().

Estos eran para manejar enlaces a imágenes generadas por renderizadores de campo y enlaces creados dentro de un editor de texto enriquecido.

+0

Esa es la forma en que lo hemos resuelto actualmente, pero esperaba una solución de configuración: Reflector muestra que Sitecore puede hacer esto, simplemente no sé cómo habilitarlo. Pero si no aparece ninguna respuesta de configuración, aceptaré la tuya. – skolima

+0

Estoy de acuerdo - Me encantaría ver una solución de configuración para esto, pero no creo que haya una. * Dedos cruzados * –

+0

No he encontrado una solución de configuración tampoco. Los últimos dos sitios en los que trabajé usaban un CDN para servir elementos multimedia y tuvimos que hacer algo muy similar. – marto

2

Hay una solución mucho más fácil para esto. Puede que esté un poco cansado con mi sintaxis; no dude en corregirme y lo editaremos.

MediaManager.GetItemUrl(item, new MediaUrlOptions { AbsolutePath = true }); 
+1

La sintaxis correcta es 'MediaManager.GetMediaUrl (item, new MediaUrlOptions {AbsolutePath = true});' – dthrasher

0

Create a Link to Sitecore Media Item

Usted no será capaz de buscar el elemento multimedia utilizando el LinkManager.GetItemUrl anterior() Método. Sitecore tiene una API separada para buscar las URL de medios.

public string ResolveSitecoreMediaURL(Sitecore.Data.Items.Item item) 
{ 
    MediaUrlOptions mediaOptions= new MediaUrlOptions(); 
    mediaOptions.AlwaysIncludeServerUrl = true; 
    mediaOptions.AbsolutePath =true; 
    return Sitecore.Resources.Media.MediaManager.GetMediaUrl(item,mediaOptions); 
} 

Como LinkManager tenía el Administrador de Medios URLOptions viene con un MediaUrlOptions donde puede controlar las direcciones URL absolutas y relativas.

Cuestiones relacionadas