我有一个页面,这个页面有很多,一个或没有评论。
在某一点上,我只想显示注释的数量,而不是遍历所有注释。但是由于翻译,需要区分注释计数的两个复数版本,因此只需调用$Comment.Count
即可。由于翻译器组件似乎没有任何多元化支持,我需要在模板级别上进行。
到目前为止,我得到的只是:
<% if Comments %>
<% control Comments %>
<span class="comments">
<% if Count == 1 %> ein Kommentar<% else %>$Count Kommentare<% end_if %></span>
<% end_control %>
<% end_if %>
这可行,但重复计数时间。这有解决方法吗?我知道在我的Page类中创建函数的可能性,如
function CommentCount(){
return $this->Comments->Count();
}
但这感觉有点单调乏味。
答案 0 :(得分:3)
我做了一个狡猾的装饰师,因为这种事让我烦恼。
对于这么小的东西来说,它可能有点重量级,但你可以轻松扩展它以提供你需要的东西。
基本上它为DataObjectSet添加了一个方法,你可以这样做:
$Comments.Count $Comments.Plural(SingularWord, PluralWord)
目前,如果您不提供PluralWord,它将尝试使用典型的英语拼写更改来猜测复数。
代码在这里: https://github.com/lingo/silverstripe-bits-and-bobs/blob/master/code/Pluraliser.php
帮助和自述文件在这里: https://github.com/lingo/silverstripe-bits-and-bobs/
答案 1 :(得分:2)
从我的头脑 - 它应该工作,但我不确定这些陈述是否有问题:
<% if Comments.TotalItems == 1 %>Singular<% else %>Plural (inklusive 0)<% end_if %>
或者你可以构建这样的东西(也是未经测试的,如果它不起作用,评论,我会尝试修复它):
<% if Comments %>
<% control Comments %>
<% if TotalItems == 1 %>
Singular
<% else %>
Plural
<% end_if %>
<% end_control %>
<% else %>
0
<% end_if %>
然而,这非常丑陋和臃肿(除了必须重复0的复数)。我更喜欢像SingleComment()
这样的方法,对于1个条目返回true,对于0或更多,返回false,因为它是恕我直言的清晰。