Шаблоны SilverStripe: отображение DataObject :: Count без повторения - PullRequest
3 голосов
/ 08 февраля 2012

У меня есть страница, на этой странице много комментариев или комментариев нет. В какой-то момент я хотел бы отобразить только количество комментариев, не просматривая их все. Однако из-за перевода необходимо различать две множественные версии счетчика комментариев, поэтому простой вызов $Comment.Count отсутствует. Поскольку компонент-переводчик, похоже, не поддерживает множественное число, мне нужно сделать это на уровне шаблона.

Пока все, что я получил, это:

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

Это работает, но повторяет Count-Times. Есть ли обходной путь для этого? Мне известно о возможности создания функции в моем классе Page, например

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

но это немного утомительно.

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Я сделал маленький Декоратор, потому что меня это раздражало.

Возможно, это немного тяжеловесно для такой маленькой вещи, но вы можете легко расширить ее, чтобы предоставить то, что вам нужно.

В основном это добавляет метод к 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/

2 голосов
/ 09 февраля 2012

Сверху головы - это должно работать, но я не уверен, если бы не было проблем с такими утверждениями:

<% 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(), возвращающий true для 1 записи и false для 0 или более, поскольку он ИМХО более понятен.

...