1

我需要在默认设备和移动设备之间显示不同的内容。有没有办法根据设备创建语言版本?或者是否可以创建一个处理程序或模块,我可以在其中识别当前设备类型?另外,是否可以创建一个自定义MediaRequestHandler,我可以在其中识别当前设备并更改MediaPath请求的图像?

这是我对管道处理器的实现:

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)
                {

                }
            }
        }
    }
}
4

1 回答 1

0

对于您问题的第一部分,您可以查看创建自定义设备解析器。查看<processor type="Sitecore.Pipelines.HttpRequest.DeviceResolver, Sitecore.Kernel" />web.config,然后使用 dotPeek 查看 Sitecore 中的实现方式。用您自己的解析器替换标准解析器通常非常简单 - 您可以从 Sitecore 的设备解析器继承并添加您想要的任何设备检测代码。然后,您可以在此设备解析器中设置语言上下文。

对于您网站的移动版本,您是否使用单独的演示组件?如果是这样,您可以考虑在模板中简单地包含一组用于移动演示组件的字段。

关于风俗MediaRequestHandler;我不确定这是必要的。如果您有媒体项目的替代内容字段,则这些字段只会引用您的媒体项目的移动等效项。如果您对移动内容使用不同的语言,那么这将再次指向您的图像的移动等效项。

编辑

如果您选择为移动/默认内容使用不同语言版本的内容,您可以使用“版本化”媒体模板(基于/sitecore/templates/System/Media/Versioned/File)而不是“未版本化”(基于/sitecore/templates/System/Media/Unversioned/File)进行调查。有一个配置设置允许您设置创建新媒体项目时使用的默认值。这意味着您可以为移动网站创建相应语言版本的媒体项目(上传不同的图像),在这种情况下您不需要特殊的媒体处理程序。

于 2013-01-25T19:32:02.410 回答