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

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

Аватара для benya

Старожил


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

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


3kLiN
А я как раз несколько месяцев назад делал тоже самое. Сделал нечто такого:

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

<!-- СТРАНИЦЫ -->

<
xsl:template match="pages" mode="pages">
        <
xsl:variable name="count" select="3"/>
        <
xsl:variable name="sel" select="@sel"/>
        <
xsl:variable name="item" select="item[position() = $sel]"/>
        <
xsl:variable name="items" select="$item/preceding-sibling::item[position() <= $count]| $item | $item/following-sibling::item[position() <= $count]"/>
        <
xsl:variable name="last" select="count(item)"/>
        <
xsl:variable name="allmess" select="@allmess"/>
        <
xsl:variable name="mess" select="@mess"/>
        <
xsl:if test="$last > 1">
            <
table border="0" cellspacing="1" cellpadding="0">
                <
tr>
                    <
td>
                        <
span class="lang_link1">
                            <
xsl:value-of select="concat('Страница',' ',$sel,' ','из',' ',$last)"/>
                            <
xsl:text> </xsl:text>
                        </
span>
                    </
td>
                    <
xsl:if test="not($sel = '1')">
                        <
td>
                            <
a href="page.html" class="page" title="На первую страницу">««</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:if test="not($sel = '1')">
                        <
td>
                            <
a href="page{$sel - 1}.html" class="page" title="Предыдущая страница ({$sel - 1})">«</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:for-each select="$items">
                        <
xsl:variable name="pos">
                            <
xsl:number/>
                        </
xsl:variable>
                        <
xsl:variable name="to" select="($pos * $mess) - $mess"/>
                        <
xsl:variable name="a" select="($sel * $mess) div $mess + 1"/>
                        <
xsl:variable name="psst" select="$to + 1"/>
                        <
xsl:variable name="psend" select="$psst + ($mess - 1)"/>
                        <
td>
                            <
a>
                                <
xsl:attribute name="title"><xsl:choose><xsl:when test="$a != $pos"><xsl:choose><xsl:when test="$allmess = $psst"><xsl:value-of select="concat('Страница',' ',$pos,' ','(',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:when test="$psend > $allmess"><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:otherwise><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$psend,' ','из',' ',$allmess,')')"/></xsl:otherwise></xsl:choose></xsl:when><xsl:when test="$allmess = $psst"><xsl:value-of select="concat('Страница',' ',$pos,' ','(',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:when test="$psend > $allmess"><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:otherwise><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$psend,' ','из',' ',$allmess,')')"/></xsl:otherwise></xsl:choose></xsl:attribute>
                                <
xsl:attribute name="href"><xsl:value-of select="concat('page',$pos,'.html')"/></xsl:attribute>
                                <
xsl:attribute name="class"><xsl:choose><xsl:when test="$pos = $sel">page-a</xsl:when><xsl:otherwise>page</xsl:otherwise></xsl:choose></xsl:attribute>
                                <
xsl:value-of select="$pos"/>
                            </
a>
                        </
td>
                    </
xsl:for-each>
                    <
xsl:if test="not($sel = $last)">
                        <
td>
                            <
a href="page{$sel + 1}.html" class="page" title="Следующая страница ({$sel + 1})">»</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:if test="not($sel = $last)">
                        <
td>
                            <
a href="page{$last}.html" class="page" title="Последняя страница ({$last})">»»</a>
                        </
td>
                    </
xsl:if>
                </
tr>
            </
table>
        </
xsl:if>
    </
xsl:template>
<!-- 
СТРАНИЦЫ --> 

Лишнюю HTML разметку можно выкинуть

На вход нужно подать вот такую структуру XML:
PHP код: Выделить весь код

<pages sel="1" allmess="41" mess="5">

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


Вызывается как-то так:
PHP код: Выделить весь код

<xsl:apply-templates select="pages" mode="pages"/> 


Не факт что мой пример правильный с точки зрения производительности, правильности и тд. Наша профессура из форума может начинать критиковать
Можно было и XML попроще передать. Но...пример работает и я не заморачивался.
Результат: тоже самое - список пейджей как на этом форуме.

Последний раз редактировалось Vlad Drakula, 12-08-2006 в 23:29.


Отправлено: 17:11, 12-08-2006 | #173