我正在使用 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 检查?