public ValueProviderResult GetValue(string key)
{
var context = RenderingContext.CurrentOrNull;
var keyval = key.Split(new[] {'.'}, StringSplitOptions.RemoveEmptyEntries);
var prefix = keyval[0];
var property = keyval.Length > 1 ? keyval[1] : null;
switch (prefix.ToLowerInvariant())
{
case "contextitem":
var contextItem = context == null ? global::Sitecore.Context.Item : context.ContextItem;
if (contextItem == null)
return new ValueProviderResult(null, "contextitem", CultureInfo.CurrentCulture);
return GetValueResult(contextItem, property);
case "pagecontextitem":
if (context == null || context.PageContext == null || context.PageContext.Item == null)
return new ValueProviderResult(null, "contextitem", CultureInfo.CurrentCulture);
return GetValueResult(context.PageContext.Item, property);
case "renderingitem":
if (context == null || context.Rendering == null || context.Rendering.RenderingItem == null)
return new ValueProviderResult(null, "renderingitem", CultureInfo.CurrentCulture);;
return GetValueResult(context.Rendering.RenderingItem.InnerItem, property);
case "datasource":
if (context == null || context.Rendering == null || string.IsNullOrEmpty(context.Rendering.DataSource))
return new ValueProviderResult(null, "datasource", CultureInfo.CurrentCulture);
if (!ID.IsID(context.Rendering.DataSource))
return new ValueProviderResult(context.Rendering.DataSource, context.Rendering.DataSource, CultureInfo.CurrentCulture);;
var item = context.PageContext.Database.GetItem(context.Rendering.DataSource);
return GetValueResult(item, property);
default:
return null;
}
}