我需要在默认设备和移动设备之间显示不同的内容。有没有办法根据设备创建语言版本?或者是否可以创建一个处理程序或模块,我可以识别当前的设备类型?此外,是否可以创建自定义MediaRequestHandler
,我可以在其中识别当前设备并更改所请求图像的MediaPath
?
这是我对Pipeline Processor的实现:
public class MediaToDeviceProcessor : HttpRequestProcessor
{
public override void Process(HttpRequestArgs args)
{
HttpContext currentHttpContext = HttpContext.Current;
if (currentHttpContext == null || Context.Database == null || Context.Device == null)
return;
var request = MediaManager.ParseMediaRequest(currentHttpContext.Request);
if (request != null)
{
var media = MediaManager.GetMedia(request.MediaUri);
if (media != null)
{
if (!Context.Device.IsDefault)
{
}
}
}
}
}
答案 0 :(得分:0)
对于问题的第一部分,您可以查看创建自定义设备解析程序。查看web.config中的<processor type="Sitecore.Pipelines.HttpRequest.DeviceResolver, Sitecore.Kernel" />
,然后使用dotPeek查看如何在Sitecore中实现它。用您自己的标准解析器替换标准解析器通常非常简单 - 您可以继承Sitecore的设备解析器并添加您想要的任何设备检测代码。您可以然后在此设备解析器中设置语言上下文。
对于您网站的移动版本,您使用的是单独的演示组件吗?如果是这样,您可以考虑在模板中使用一组用于移动演示组件的字段。
关于自定义MediaRequestHandler
;我不确定这是否必要。如果您有媒体项目的替代内容字段,则这些字段将仅引用媒体项目的移动等效项。如果您为移动内容使用其他语言,则会再次指向图像的移动等效语言。
修改强>
如果您选择使用针对移动设备/默认内容的不同语言版本的内容,则可以使用“版本化”媒体模板(基于/sitecore/templates/System/Media/Versioned/File
)而不是“未版本化”来调查(基于/sitecore/templates/System/Media/Unversioned/File
)。有一个配置设置,允许您设置创建新媒体项时使用的默认值。这意味着您可以为移动网站创建媒体项目的相应语言版本(上传不同的图像),在这种情况下您不需要特殊的媒体处理程序。