korsus3, высылайте адрес сайта и данные доступа к разделу администрирования для анализа быстродействия.
NeX, это не принципиально, что товары выводятся со всех групп. Организовать разбиение на страницы можно.
Пример реализации. Замените код типовой динамической страницы "Прайс" на этот:
<?
$shop_id = to_int($GLOBALS['LA']['shop_id']);
$xsl_name = to_str($GLOBALS['LA']['xsl_name']);
$param = array();
$external_propertys = array();
$param['xml_show_group_type'] = 'all';
$param['current_group_id'] = false;
$param['dec_reques_number'] = true;
$param['items_on_page'] = 10;
$items_on_page = $param['items_on_page'];
$page = end($GLOBALS['URL_ARRAY']);
$page = to_str($page);
/* Число элементов на странице */
$on_page = to_int($_GET['on_page']);
if ($on_page > 0 && $on_page < 150)
{
$param['items_on_page'] = $on_page;
$external_propertys['on_page'] = $on_page;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
// Определяем номер страницы.
if ($on_page)
{
$items_on_page = $on_page;
}
if (ereg("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 1)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
}
else
{
$items_begin = 0;
}
$param['items_begin'] = $items_begin;
$shop = new shop();
$shop->ShowShop($shop_id, $xsl_name, $param, $external_propertys);
?>
А код XSL-шаблона "МагазинПрайс" используйте этот вместо имеющегося:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
<!-- Шаблон "МагазинПрайс" -->
<xsl:template match="/shop">
<!-- CSS для таблицы с прайсом -->
<style TYPE="text/css">
<xsl:comment>
<xsl:text disable-output-escaping="yes">
<![CDATA[
.price_table_border, .price_table_border td
{
border-collapse: collapse;
empty-cells: show;
border-width:1px;
border-color: #CCCCCC;
border-style: dashed;
padding-left: 5px;
}
]]>
</xsl:text>
</xsl:comment>
</style>
<h1>Прайс-лист</h1>
<!-- Отображаем таблицу -->
<table class="price_table_border">
<tr bgcolor="#EEEEEE">
<td align="center" height="25" valign="middle"><b>Наименование</b></td>
<td align="center" height="25" valign="middle"><b>Цена</b></td>
</tr>
<xsl:apply-templates select="/shop/item">
<xsl:with-param name="group_id" select="0"/>
</xsl:apply-templates>
<xsl:apply-templates select="//group"><xsl:sort select="@id" data-type="number" order="ascending"/></xsl:apply-templates>
</table>
<!-- Строка ссылок на другие страницы каталога -->
<p>
<xsl:if test="count_items > 0 and items_on_page > 0">
<xsl:call-template name="for">
<xsl:with-param name="n" select="count_items div items_on_page"/>
<xsl:with-param name="current_page" select="current_page"/>
</xsl:call-template>
<div style="clear: both"></div>
</xsl:if>
</p>
</xsl:template>
<!-- Группы товаров -->
<xsl:template match="group">
<xsl:variable name="attr_group_id"><xsl:value-of select="@id"/></xsl:variable>
<xsl:if test="count(/shop/item[@group=$attr_group_id]) > 0">
<tr>
<td bgcolor="#EEEEEE" colspan="2">
<xsl:value-of select="name"/>
</td>
</tr>
<xsl:apply-templates select="/shop/item">
<xsl:with-param name="group_id" select="@id"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<!-- Товары -->
<xsl:template match="/shop/item">
<xsl:param name="group_id" />
<xsl:if test="$group_id = @group">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="price"/> <xsl:value-of select="currency"/></td>
</tr>
</xsl:if>
</xsl:template>
<!-- ============================ -->
<!-- Цикл для вывода строк ссылок -->
<!-- ============================ -->
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="n"/>
<xsl:param name="current_page"/>
<xsl:if test="$n > $i and $n > 1">
<!-- Ставим ссылку на страницу-->
<xsl:if test="$i != $current_page">
<!-- Определяем адрес ссылки -->
<xsl:variable name="number_link"><xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose></xsl:variable>
<a href="{/shop/path}price/{$number_link}" class="page_link"><xsl:value-of select="$i+1"/></a>
</xsl:if>
<!-- Не ставим ссылку на страницу-->
<xsl:if test="$i = $current_page">
<span class="current"><xsl:value-of select="$i+1"/></span>
</xsl:if>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="n" select="$n"/>
<xsl:with-param name="current_page" select="$current_page"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Задавать количество выводимых на страницу элементов можно в тип. дин. странице "Прайс" с помощью элемента массива $param['items_on_page'].