【发布时间】:2013-03-06 20:34:24
【问题描述】:
我正在使用 DataObjectsAsPage 模块。它返回一个 Datalist ($Items) 到循环遍历每个 $Item 的持有者页面。我也在尝试为页面开发部分缓存策略。我在文档中读到您不能将缓存块放在循环内,因此在我的 DataObjectsAsPageHolder 页面中,我有以下内容:
<% cached 'items', LastEdited, CacheSegment %>
<% loop $Items %>
$Me
<% end_loop %>
<% end_cached %>
我检查了 silverstripe-cache/cache 目录,这似乎正在缓存 $Items 列表。
问题是我为每个 $Item 添加了一个 DataExtension,它允许管理员根据 CurrentMember 的组设置是否可以查看 $Item。因此,在每个 $Me 模板中,我都有以下内容:
<% if HasAccess %>
<% end_if %>
我有两个问题:
鉴于上述缓存键,如果授权成员是第一个查看页面的人,则页面会被缓存,并且在后续页面查看中会向非成员显示专有材料。
-
如果我将缓存键调整为以下:
<% cached 'items', Items.max(Created), CacheSegment unless CurrentMember %> <% loop $Items %> $Me <% end_loop %> <% end_cached %>
然后每个 $Me 模板中的内容永远不会为成员缓存 - 这是我网站查看者的最大部分。
有没有一种方法可以缓存成员和非成员的 $Items 列表,并且仍然能够在循环内对 $Item 使用 HasAccess 检查?
【问题讨论】:
标签: silverstripe