«Комментарий, комментариев, комментария» — с помощью шаблонов

6 views
Skip to first unread message

Andrey Serebryakov

unread,
Feb 9, 2008, 10:11:42 AM2/9/08
to Movable Type на русском
Решил сделать с помощью шаблонов нормальное отображение слова «комментарий» при публикации блога. И вроде даже получилось, но слишком громоздко и некрасиво. Поэтому обращаюсь к участникам группы, может кто подскажет, как улучшить шаблон.

Что хотется получить

Стандартная конструкция вывода информации о количестве комментариев к записи выглядит следущим образом: «комментариев: N». Это самое нормальное, что можно сделать с помощью стандартных средств. Иначе получается что-то типа «21 комментариев», что совершенно неприемлимо.

Нужно сделать так, чтобы в зависимости от количества комментариев слово «комментарий» выводилось в правильной форме. Например:

  • Если комментариев нет: нет комментариев.
  • 1 комментарий.
  • 2 комментария.
  • 8 комментариев.

Сделать это нужно только с помощью языка шаблонов Movable Type.

Моё решение

<MTEntries lastn="10">

 <mt:SetVarBlock name="CommentsCount"><$MTEntryCommentCount$></mt:SetVarBlock>
 <h3><$MTEntryTitle$></h3>

 <mt:if name="CommentsCount" eq="0">
  <p>нет комментариев</p>
 </mt:if>

 <mt:if name="CommentsCount" eq="1">
  <p>1 комментарий</p>
 </mt:if>

 <mt:if name="CommentsCount" like="^(21|31|41|51|61|71|81|91|101|121|131|141|151|161|171|181|191|201|221)">
  <p><$MTEntryCommentCount$> комментарий</p>
 </mt:if>

 <mt:if name="CommentsCount" like="^(2|3|4|22|23|24|32|33|34|42|43|44|52|53|54|62|63|64)">
  <p><$MTEntryCommentCount$> комментария</p>
 </mt:if>

 <mt:if name="CommentsCount" like="^(5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|25|26|27|28|29|30|35|36|37|38|39|40|45|46|47|48|49|50|55|56|57|58|59|60)">
  <p><$MTEntryCommentCount$> комментариев</p>
 </mt:if>
 
</MTEntries>

(Этот пример приложен к письму отдельным файлом.)

Возникшие проблемы

  1. Цифру 1 из четвёртого блока пришлось убрать, так как MT в этом случае выводил информацию о комментариях у одной записи дважды. Поэтому 1 вынесена в отдельный блок if.
  2. Громоздко и некрасиво. К тому же, нужно прописывать весь цикл чисел. Если количество комментариев превысит приписанное количество, то ничего выведено не будет (или будет, но совсем не то).

Задача — описать эти числа с помощью регулярных выражений.

Изначально мы имеем три формы слова, изменяющееся в зависимости от числа, точнее от окончаний числа:

  • Комментарий — заканчивается на 1, но не на 11.
  • Комментария — заканчивается на 2, 3, 4, но не на 12, 13, 14.
  • Комментариев — заканчивается на 5, 6, 7, 8, 9, 0, а также на 11, 12, 13, 14.

Главный вопрос — как это сделать с помощью регулярных выражений?

Ссылки

Информация о теге If.

--
Andrey Serebryakov
http://saahov.ru/
comments.mtml

Andrew Fatman

unread,
Feb 9, 2008, 3:51:53 PM2/9/08
to movabl...@googlegroups.com
А арифметические операции не поддерживаются?

Andrey Serebryakov

unread,
Feb 9, 2008, 5:51:42 PM2/9/08
to movabl...@googlegroups.com
А вот хз… Атрибут like тега if поддерживает регулярные выражения, а вот можно ли туда запихнуть полноценную функцию — не знаю.
Reply all
Reply to author
Forward
0 new messages