Старожил
Сообщения: 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 попроще передать. Но...пример работает и я не заморачивался.
Результат: тоже самое - список пейджей как на этом форуме.
|