private:koding:hostcms:modules:xsl:declension

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
private:koding:hostcms:modules:xsl:declension [27.09.16 в 15:27]
maximzasorin_gmail.com создано
private:koding:hostcms:modules:xsl:declension [27.06.17 в 14:49] (current)
maximzasorin_gmail.com ↷ Страница перемещена из private:koding:hostcms:xsl:useful:declension в private:koding:hostcms:modules:xsl:declension
Line 1: Line 1:
 ====== Склонение числительных ====== ====== Склонение числительных ======
 +
 +===== Вариант №1 =====
  
 Для склонения числительных обычно применяется подшаблон следующего вида, для использования в него необходимо вставить варианты требуемого для склонения слова: Для склонения числительных обычно применяется подшаблон следующего вида, для использования в него необходимо вставить варианты требуемого для склонения слова:
Line 58: Line 60:
 <​code>​ <​code>​
 2 слова 2 слова
 +</​code>​
 +
 +===== Вариант №2 =====
 +
 +Следующий вариант подходит в случае,​ если слонение слова требуется использовать лишь однажды,​ он более нагляден и универсален,​ его можно использовать с любым словом:​
 +
 +<code xsl>
 +<​xsl:​template name="​declension2">​
 + <​xsl:​param name="​number"​ />
 + <​xsl:​param name="​word"​ />
 +
 + <​xsl:​variable name="​nominative">​
 + <​xsl:​value-of select="​substring-before($word,​ '​|'​)"​ />
 + </​xsl:​variable>​
 +
 + <​xsl:​variable name="​genitive_singular">​
 + <​xsl:​value-of select="​substring-before(substring-after($word,​ '​|'​),​ '​|'​)"​ />
 + </​xsl:​variable>​
 +
 + <​xsl:​variable name="​genitive_plural">​
 + <​xsl:​value-of select="​substring-after(substring-after($word,​ '​|'​),​ '​|'​)"​ />
 + </​xsl:​variable>​
 +
 + <​xsl:​variable name="​last_digit">​
 + <​xsl:​value-of select="​$number mod 10"/>​
 + </​xsl:​variable>​
 +
 + <​xsl:​variable name="​last_two_digits">​
 + <​xsl:​value-of select="​$number mod 100"/>​
 + </​xsl:​variable>​
 +
 + <​xsl:​choose>​
 + <​xsl:​when test="​$last_digit = 1 and $last_two_digits != 11">​
 + <​xsl:​value-of select="​$nominative"/>​
 + </​xsl:​when>​
 + <​xsl:​when test="​$last_digit = 2 and $last_two_digits != 12 or $last_digit = 3 and $last_two_digits != 13 or $last_digit = 4 and $last_two_digits != 14">​
 + <​xsl:​value-of select="​$genitive_singular"/>​
 + </​xsl:​when>​
 + <​xsl:​otherwise>​
 + <​xsl:​value-of select="​$genitive_plural"/>​
 + </​xsl:​otherwise>​
 + </​xsl:​choose>​
 +</​xsl:​template>​
 +</​code>​
 +
 +Как использовать:​
 +
 +<code xsl>
 +<​xsl:​variable name="​count"​ select="​2"​ />
 +
 +<​xsl:​value-of select="​$count"​ />
 +<​xsl:​text>​ </​xsl:​text>​
 +<​xsl:​call-template name="​declension2">​
 + <​xsl:​with-param name="​number"​ select="​$count"/>​
 + <​xsl:​with-param name="​word"​ select="'​слово|слова|слов'"/>​
 +</​xsl:​call-template>​
 +</​code>​
 +
 +Результат:​
 +
 +<​code>​
 +2 слова
 +</​code>​
 +
 +===== PS =====
 +
 +Редко требуется использовать само слово внужной форме без самого числа, задающего эту форму, то есть обычно выводится что-то вроде «2 яблока»,​ «5 яблок»,​ а сами слова «яблока» и «яблок» никакого смысла не несут и по отдельности от числа не используются,​ поэтому в шаблоны можно добавить код, который это число будет выводить,​ например:​
 +
 +<code xsl>
 +<!-- ... -->
 +<​xsl:​value-of select="​$number"​ />
 +<​xsl:​text>​ </​xsl:​text>​
 +
 +<​xsl:​choose>​
 + <​xsl:​when test="​$last_digit = 1 and $last_two_digits != 11">​
 +
 + <!-- ... -->
 </​code>​ </​code>​
  
 <wrap lo>​Страницу создал Максим Засорин 27.09.16 в 15:​23</​wrap>​ <wrap lo>​Страницу создал Максим Засорин 27.09.16 в 15:​23</​wrap>​
 +
 +~~DISCUSSION~~
private/koding/hostcms/modules/xsl/declension.1474979245.txt.gz · Last modified: 27.09.16 в 15:27 by maximzasorin_gmail.com