在我创建的Silverstripe应用中,我NewsArticles
有NewsTags
(使用silverstripe-tagfield创建)。我正在使用NewsTags
创建一个"相关新闻"每个NewsArticle
侧边栏中的小部件。我在RelatedArticles
控制器中创建了NewsArticle
操作,一切正常。
然而,为了使用RelatedArticles
动作,我被迫调用该函数三次。这不是一个大问题,但我希望尽量减少调用多次调用数据库的函数的次数。
以下是我的RelatedNewsModule.ss
模板文件的缩减版本:
// First call to check if there are related articles
<% if $RelatedArticles %>
// second call to get the array
<% loop $RelatedArticles() %>
...
<% end_loop %>
// third call to check if there are more than one so we need navigation
<% if $RelatedArticles.Count > 1 %>
... navigation markup
<% end_if %>
<% end_if %>
我想调用该函数一次,并且可能使用SilverStripe模板中的属性来引用两个检查和文章数组。我不知道怎么做。
处理这种情况的最佳方法是什么?
答案 0 :(得分:0)
正如评论中所说,SilverStripe应该只调用一次数据库并缓存接下来2次调用的RelatedArticles
结果。
为了进一步缓存查询,我们可以使用Partial Caching来缓存部分模板。
<% cached 'RelatedArticles', $ID, $List('RelatedArticles').max('LastEdited'), $List('RelatedArticles').count() %>
<% if $RelatedArticles %>
// second call to get the array
<% loop $RelatedArticles %>
...
<% end_loop %>
// third call to check if there are more than one so we need navigation
<% if $RelatedArticles.Count > 1 %>
... navigation markup
<% end_if %>
<% end_if %>
<% end_cached %>