[Blogger.com] Отображение количества комментариев с учётом русской морфологии. Добавляем человечности blogspot-у.
Сегодня я расскажу, как сделать отображение счетчика комментариев к постам более человечным. Вы, наверное, замечали, что строчка под текстом поста, в которой пишется число комментариев, выглядит, мягко говоря, не очень.
В англоязычных блогах такой проблемы не возникает: в зависимости от числа комментариев, шаблон выбирает нужную форму слова: comment или comments. Поскольку у них нет зубодробительной системы падежей и согласования существительного с числительным, простая проверка на равенство единице решает все проблемы. В русскоязычных же блогах мы можем наблюдать «0 коммент.», «1 коммент.», «2 коммент.» вместо «0 комментариев», «1 комментарий», «2 комментария» и т.п. Сегодня мы попытаемся этот недостаток исправить.
В зависимости от числа, слово комментарий принимает следующие формы:
- 0 — комментариев
- 1 — комментарий
- от 2 до 4 включительно — комментария
- от 5 до 9 включительно — комментариев
- от 10 до 19 включительно — комментариев
- от 20 до 99 включительно — так же, как для соответствующих чисел от 0 до 9
- от 100 и до бесконечности — так же, как для соответствующих чисел от 0 до99
<b:includable id='commentcounthelper' var='i'> <b:if cond='data:i % 10 == 0'> комментариев <b:else/> <b:if cond='data:i % 10 == 1'> комментарий <b:else/> <b:if cond='data:i % 10 < 5'> комментария <b:else/> комментариев </b:if> </b:if> </b:if> </b:includable> <b:includable id='commentcount' var='i'> <data:i/> <b:if cond='data:i % 100 > 19'> <b:include name='commentcounthelper' data='post.numComments'/> <b:else/> <b:if cond='data:i % 100 < 10'> <b:include name='commentcounthelper' data='post.numComments'/> <b:else/> комментариев </b:if> </b:if> </b:includable>
Сегмент commentcount в переменной i получает количество комментариев, выводит его, а затем выводит слово комментариев, если число попадает в диапазон от 11 до 19. Для чисел вне диапазона вызывается сегмент commentcounthelper, который выводит слово в нужной форме для остальных чисел.
Для того, чтобы обрабатывались любые числа, анализируется не непосредственно число комментариев, а остаток от деления на 100 или на 10.
Далее в коде виджета изменим код, выводящей число комментариев, чтобы из него вызывался сегмент commentcount. Первый фрагмент кода выводит число комментариев при просмотре поста на главной, в архиве, поиске и т.п.
Находим нужный фрагмент:
<span class='post-comment-link'>И заменяем в нём всё, что заключено внутри тела ссылки на вызов сегмента commentcount:
<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:if cond='data:post.numComments == 1'>1 <data:top.commentLabel/><b:else/><data:post.numComments/> <data:top.commentLabelPlural/></b:if></a>
</b:if>
</b:if>
</span>
<span class='post-comment-link'>
<b:if cond='data:blog.pageType != "item"'>
<b:if cond='data:post.allowComments'>
<a class='comment-link' expr:href='data:post.addCommentUrl' expr:onclick='data:post.addCommentOnclick'><b:include name='commentcount' data='post.numComments'/></a>
</b:if>
</b:if>
</span>
Второй фрагмент кода выводит число комментариев непосредствено на странице поста перед списком комментариев:
<h4>Модифицируем:
<b:if cond='data:post.numComments == 1'>
1 <data:commentLabel/>:
<b:else/>
<data:post.numComments/> <data:commentLabelPlural/>:
</b:if>
</h4>
<h4><b:include name='commentcount' data='post.numComments'/></h4>
Вот и всё. Готово.
3 комментария
Спасибо большое за интересную статью и блог!
Узнал много нового, исправил отображение количества комментарием у себя в блоге. Удачи!
Отличный ресурс. Множество полезной информации!
Добрый день! Подскажите, что нужно сделать в селекторе "post-comment-link", чтобы отражалась только цифра кол-ва комментариев, и при отсутствии таковых стояла цифра 0 вместо "нет комментариев".
http://perevirkablogu.blogspot.com
Отправить комментарий