如何在不同的Sitecore设备之间实现不同的内容?

时间:2013-01-25 06:41:34

标签: sitecore asp.net-4.0 asp.net-4.5

我需要在默认设备和移动设备之间显示不同的内容。有没有办法根据设备创建语言版本?或者是否可以创建一个处理程序或模块,我可以识别当前的设备类型?此外,是否可以创建自定义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)
                {

                }
            }
        }
    }
}

1 个答案:

答案 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)。有一个配置设置,允许您设置创建新媒体项时使用的默认值。这意味着您可以为移动网站创建媒体项目的相应语言版本(上传不同的图像),在这种情况下您不需要特殊的媒体处理程序。