2012-02-08 72 views
3

我有一个页面,此页面有很多,一个或没有评论。 在某一点上,我只想显示评论数量,而不是遍历所有评论。然而,由于翻译,它需要区分两个评论计数的多个版本,所以简单地调用$Comment.Count就没有了。由于翻译器组件似乎没有任何多元化的支持,我需要在模板级别上进行。SilverStripe模板:显示DataObject :: Count不重复

到目前为止,所有我得到的是:

<% if Comments %> 
<% control Comments %> 
<span class="comments"> 
<% if Count == 1 %> ein Kommentar<% else %>$Count Kommentare<% end_if %></span> 
<% end_control %> 
<% end_if %> 

这工作,但重复计数时报。有没有解决方法?林知道的可能性在我的网页类中创建一个功能类似

function CommentCount(){ 
    return $this->Comments->Count(); 
} 

,但这种感觉有点乏味。

回答

3

我做了一个litle装饰,因为这种事情让我很烦。

这对于一件小事来说可能有点重量级,但是您可以轻松扩展它以提供您所需要的。

基本上它增加了一个方法来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/

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,因为它是IMHO清晰的。