2

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

这是我目前所做的:

  1. 解析我们网站的整个树,查看每个项目
  2. 获取每个项目的效果图
  3. 循环浏览每个渲染
  4. 检查“缓存”部分中是否设置了“可缓存”

我的问题是我看到的“可缓存”设置是子布局中的设置(在 Sitecore 中的布局 > 子布局下),而不是我在项目的子布局实例上设置的设置(我的项目 > 演示文稿 > 详细信息> 点击控制)

我的代码是独立编写的

1 号没问题 - 这是我为每个项目所做的:

2)

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

3)

foreach (RenderingReference r in renderings)

4)

bool cacheable = r.RenderingItem.Caching.Cacheable;

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

从子布局获取渲染参数

4

2 回答 2

4

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

通过引用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;
}
于 2013-01-31T17:54:10.110 回答
2

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

于 2013-01-31T19:22:29.583 回答