DataObjectsAsPage 모듈을 사용하고 있습니다. 그것은 각 $ 항목을 반복하는 홀더 페이지에 Datalist ($ Items)를 반환합니다. 또한이 페이지의 부분 캐싱 전략을 개발하려고합니다. 부분 캐시 멤버
<% cached 'items', LastEdited, CacheSegment %>
<% loop $Items %>
$Me
<% end_loop %>
<% end_cached %>
내가 silverstripe 캐시/캐시 디렉토리를 확인하고 이것이 캐싱 것 같다 : 내 DataObjectsAsPageHolder 페이지에서, 나는 그래서 다음, 당신은 루프의 내부 캐시 블록을 배치 할 수 없습니다 워드 프로세서 읽어 $ Items 목록.
문제는 각 $ Item에 관리자가 CurrentMember 그룹을 기반으로 $ Item을 볼 수 있는지 여부를 설정할 수 있도록 DataExtension을 추가 한 것입니다.
<% if HasAccess %>
<% end_if %>
나는 두 가지 문제가 있습니다 : 그래서 각 $ 나 템플릿에서 나는 다음이
인증 된 회원이 다음, 페이지를 볼 수있는 첫 번째의 경우, 위의 캐시 키를 감안할 때페이지가 캐싱되고 후속 페이지 뷰에서 독점 자료가 비회원에게 표시됩니다.
나는 다음 캐시 키를 조정하는 경우 :
<% cached 'items', Items.max(Created), CacheSegment unless CurrentMember %>
<% loop $Items %>
$Me
<% end_loop %>
<% end_cached %>
이 그런 다음 각 $ 나 템플릿의 내용은 회원 캐시되지 않습니다 - 내 사이트 시청자의 가장 큰 부분이다.
회원 및 비회원을 위해 $ Items 목록을 캐시하고 루프 내에서 $ Item에 대한 HasAccess 검사를 계속 사용할 수있는 방법이 있습니까?
두 번째 해결책은 내 상황에 잘 맞습니다. 필요한 유일한 변경 사항은 asArray 메소드를 toArray로 변경하는 것입니다. 그 외에도 캐시 된 페이지를 테스트했으며 유사한 그룹의 구성원은 각각의 캐시 된 페이지를 제공 받고 있습니다. 고마워, 도움을 많이! –
내가 말했듯이, 테스트되지 않았다. 위에서 수정 된 답변. – drzax