检查块是否使用个性化

时间:2015-04-30 10:59:11

标签: episerver

是否可以通过编程方式确定块的内容是否使用个性化?

我需要知道,当块的内容可以针对不同的访问者群体进行个性化时,才能正确处理缓存。

2 个答案:

答案 0 :(得分:0)

为了决定个性化,您需要访问var express = require('express'); var router = express.Router(); var request = require('request'); router.get('/', function(req, res, next) { var result = getJson(); res.render('index', { title: result}); }); function *getJson(){ yield request('https://myjson.json', function (error, response, body){ return body; }); } module.exports = router; 实例本身。

访问ContentAreaItem的最简单方法是挂钩渲染管道。您可能需要使用自己的实现交换ContentAreaItem(请参阅AlloyTech示例网站以获取代码段)。

然后您可以实施ContentAreaRenderer

BeforeRenderContentAreaItemStartTag

接下来的问题当然是你如何将这个决定传递给块类型实例,因为被覆盖的public class MyCustomContentAreaRenderer : ContentAreaRenderer { protected override void BeforeRenderContentAreaItemStartTag(TagBuilder tagBuilder, ContentAreaItem contentAreaItem) { var isPersonalizationApplied = contentAreaItem.AllowedRoles.Any(); } } 方法远远超出了内容区域内的块实例。

答案 1 :(得分:0)

@ keithl8041,您可以使用VisitorGroupHelper检查当前用户是否与特定角色匹配:

using EPiServer.Personalization.VisitorGroups;
using EPiServer.Security;


protected override void BeforeRenderContentAreaItemStartTag(TagBuilder tagBuilder, ContentAreaItem contentAreaItem)
{
    var groupHelper = new VisitorGroupHelper();
    var isPersonalizationApplied = contentAreaItem.AllowedRoles.Any();

    var isCurrentUserInAnyOfGroups = contentAreaItem.AllowedRoles.Any(r => groupHelper.IsPrincipalInGroup(PrincipalInfo.CurrentPrincipal, r);

}