3

我有一个页面,这个页面有很多评论,一个评论或没有评论。在某一时刻,我只想显示评论的数量,而不是遍历所有评论。然而,由于翻译需要区分评论计数的两个复数版本,所以一个简单的调用$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();
}

但这感觉有点乏味。

4

2 回答 2

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/

于 2012-03-07T00:48:34.653 回答
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,因为它更清晰。

于 2012-02-08T23:35:51.853 回答