3

私はページを持っています、このページには多くの、1つの、またはまったくコメントがありません。ある時点で、コメントの数だけを表示し、すべてを繰り返すことはしたくありません。ただし、翻訳のため、コメント数の2つの複数形を区別する必要があるため、の単純な呼び出し$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

ヘルプと readme はこちら: 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を返すようなメソッドを好みます.IMHOはより明確です。

于 2012-02-08T23:35:51.853 に答える