Аналог Switch в XSLT
Реализуя логику в xslt-шаблонах UMI.CMS часто нужно сделать конструкцию, похожую на if…else или switch, но, к сожалению, данная технология не имеет такой конструкции. Если идти прямым путем, то для каждой ситуации можно сделать свой if:
1 2 3 4 5 6 7 8 9 10 11 12 | <xsl:if test="<i>expression 1</i>"> ...some output if the expression is true... </xsl:if> <xsl:if test="<i>expression 2</i>"> ...some output if the expression is true... </xsl:if> <xsl:if test="<i>expression 3</i>"> ...some output if the expression is true... </xsl:if> <xsl:if test="<i>expression 4</i>"> ...some output if the expression is true... </xsl:if> |
данное решение, как я называю, не элегантное. В таких случаях гораздо лучше и правильнее воспользоваться конструкцией xsl:choose:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <xsl:choose> <xsl:when test="<i>expression</i> 1"> ...some output if the expression is true... </xsl:when> <xsl:when test="<i>expression</i> 2"> ...some output if the expression is true... </xsl:when> <xsl:when test="<i>expression</i> 3"> ...some output if the expression is true... </xsl:when> <xsl:when test="<i>expression</i> 4"> ...some output if the expression is true... </xsl:when> <xsl:otherwise> ...some output if the expression else... </xsl:otherwise> </xsl:choose> |
xsl:choose можно применять как при двух вариантах условия так и при гораздо большем количестве вариантов.
Итак, конструкция if…else или switch в XSLT имеет вид xsl:choose.
а есть аналог switch в smarty?
конкретно switch нет, если хотите switch, то нужно писать свою функцию для smarty