Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


чтож представлю свой вариант решения этой задачи...

на входе:
PHP код: Выделить весь код

<pages sel="2" mess="2">

    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
</
pages

шаблон:
PHP код: Выделить весь код

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <
xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <
xsl:template match="/">
        <
xsl:call-template name="nav"/>
    </
xsl:template>
    <
xsl:template name="nav">
        <
xsl:apply-templates select="//pages" mode="nav"/>
    </
xsl:template>
    <
xsl:template match="pages" mode="nav">
        <
xsl:variable name="start" select="@sel - @mess"/>
        <
xsl:variable name="end" select="@sel + @mess"/>
        <
xsl:variable name="prev" select="@sel - 1"/>        
        <
xsl:variable name="next" select="@sel + 1"/>        
        <
xsl:variable name="all" select="count(item)"/>
        <
table border="1">
            <
tbody>
            <
tr>
                <
td>
                    <
xsl:value-of select="concat(@sel, ' of ', $all)"/>
                </
td>
                <
xsl:if test="@sel != 1">
                    <
xsl:apply-templates select="item[1]" mode="nav_f" />                    
                    <
xsl:apply-templates select="item[$prev]" mode="nav_p" />                    
                </
xsl:if>
                <
xsl:apply-templates select="item[position() >= $start and position() <= $end]" mode="nav" />
                <
xsl:if test="$end < $all">
                    <
xsl:apply-templates select="item[$next]" mode="nav_n" />                    
                    <
xsl:apply-templates select="item[$all]" mode="nav_l" />                    
                </
xsl:if>
            </
tr>
            </
tbody>
        </
table>
    </
xsl:template>
    <
xsl:template match="item" mode="nav">
        <
td>
            <
xsl:value-of select="position()"/>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_f">
        <
td>
            <
xsl:text>f</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_l">
        <
td>
            <
xsl:text>last</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_p">
        <
td>
            <
xsl:text>&lt;</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_n">
        <
td>
            <
xsl:text>&gt;</xsl:text>
        </
td>
    </
xsl:template>
</
xsl:stylesheet

benya
вы бы хоть предупредели что ваш шаблон использует XSL2.0

<xsl:variable name="item" select="item[position() = $sel]"/> - этого в XSL1.0 вроде как нету... там переменные только текстовые...

benya
я наложил структирирование на ваш пример и пофиксил пару багов(очевидных) в шаблоне.

Отправлено: 23:26, 12-08-2006 | #174