是否可以通过编程方式确定块的内容是否使用个性化?
我需要知道,当块的内容可以针对不同的访问者群体进行个性化时,才能正确处理缓存。
答案 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);
}