Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Slava 15.03.2005 23:31
Дело в том, что я отношу названия месяцев к уровню представления а не содержания. Поэтому возлагаю работы по формированию названий на xslt-шаблон. Например, я работаю над классом news. Я старюсь делать его как можно более универсальным, поэтому его методы возвращают результат в xml-формате. Для каждой новости дата представлена примерно в таком виде:<!-- пример вызова шаблона в result-stat/@total укзано число найденных документов на месте решетки # будет стоять число --> <xsl:template match="results"> <xsl:call-template name="num-decline"> <xsl:with-param name="num" select="result-stat/@total"/> <xsl:with-param name="nominative" select="'Всего найден # документ.'"/> <xsl:with-param name="genitive-singular" select="'Всего найдено # документа.'"/> <xsl:with-param name="genitive-plural" select="'Всего найдено # документов.'"/> </xsl:call-template> </xsl:template> <!-- а вот и сам шаблон --> <xsl:template name="num-decline"> <xsl:param name="num"/> <xsl:param name="nominative"/> <xsl:param name="genitive-singular"/> <xsl:param name="genitive-plural"/> <xsl:choose> <xsl:when test="$num > 10 and floor(($num mod 100) div 10) = 1"> <xsl:value-of select="concat(substring-before($genitive-plural, '#'),$num,substring-after($genitive-plural, '#'))"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="$num mod 10 = 1"><xsl:value-of select="concat(substring-before($nominative, '#'),$num,substring-after($nominative, '#'))"/></xsl:when> <xsl:when test="4 >= $num mod 10 and $num mod 10 >= 2"><xsl:value-of select="concat(substring-before($genitive-singular, '#'),$num,substring-after($genitive-singular, '#'))"/></xsl:when> <xsl:otherwise><xsl:value-of select="concat(substring-before($genitive-plural, '#'),$num,substring-after($genitive-plural, '#'))"/></xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template>Мне интересны следующие моменты: