我可以从项目中获取渲染参数吗?

时间:2013-01-31 15:04:01

标签: c# asp.net sitecore sitecore6

我的任务是找出哪些Sublayouts已启用缓存。我不是在谈论子布局上的缓存 - 我的意思是在渲染参数中设置的子布局的每个单独实例上的缓存。

以下是我目前所做的事情:

  1. 解析我们网站的整个树,查看每个项目
  2. 获取每个项目的效果图
  3. 循环每次渲染
  4. 检查“缓存”部分中是否设置了“可缓存”
  5. 我的问题是我看到的'Cachable'设置是Sublayout中的一个设置(在Sitecore中的Layout> Sublayouts下),而不是我在我的项目上的子布局实例上设置的那个(My Item) >演示文稿>详细信息>点击控制)

    我的代码是独立编写的

    1号没问题 - 这就是我为每件物品做的事情:

    2)

    RenderingReference[] renderings = item.Visualization.GetRenderings(Sitecore.Context.Device, true);
    

    3)

    foreach (RenderingReference r in renderings)
    

    4)

    bool cacheable = r.RenderingItem.Caching.Cacheable;
    

    似乎我错过了一个步骤,我获得了特定于每个子布局的渲染参数。但是,从我已阅读的指南中看来,您需要子布局本身才能访问这些参数。我找不到从项目或渲染引用中获取子布局的方法(可能是有充分理由的?)。任何人都可以帮我进步吗?

    Getting rendering parameters from sublayout

2 个答案:

答案 0 :(得分:4)

  

我的任务是找出我们的Sublayouts中有哪些   缓存打开。我不是在讨论sublayout上的缓存    - 我的意思是在渲染参数中设置的子布局的每个单独实例上的缓存。

通过引用r.RenderingItem,您将访问渲染的定义项,而不是演示文稿详细信息中该子布局的“实例”。

要获取演示文稿详细信息的每个实例的缓存,您可以使用:

RenderingReference[] renderings = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true);
foreach (var renderingReference in renderings)
{
    // var isDefinitionItemCacheable = renderingReference.RenderingItem.Caching.Cacheable;
    var isInstanceCacheable = renderingReference.Settings.Caching.Cacheable;
}

或..

var sublayout = Parent as Sublayout;
if (sublayout != null)
{
    var cacheable = sublayout.Cacheable;
}

答案 1 :(得分:2)

确定这一点的另一种方法是转到/sitecore/admin/stats.aspx页面并检查渲染次数与缓存命中次数。因此,请查看以 Sublayout:开头的行,并查看Cache列是否大于0.如果大于0,那么这些是加载缓存条目的时间。如果它始终为0,那么它不会设置为缓存。