Как разбить на страницы прайс-лист?

#
Как разбить на страницы прайс-лист?
У меня проблема. В интернет-магазине слишком много записей и полей и обработчик не успевает всё обработать. Поэтому выдает мне не закончинный код. Хотелось бы тогда разбить его на страницы, но не знаю поможет это или нет. И как это сделать?
#
Re: Как разбить на страницы прайс-лист?
korsus3, необходимо выяснить реальные причины проблемы с генерацией страницы. В любом случае т.к. прайс-лист выводится из соответствующей тип. дин. страницы методом ShowShop, то можно организовать вывод прайса на несколько страниц(причем в данную тип. дин. страницу следует добавить обработку этих самых ссылок на страницы аналогично тому, как это уже реализовано для каталога магазина в тип. дин. странице "Интернет-магазин" ).
#
Re: Как разбить на страницы прайс-лист?
natalya писал(а):
необходимо выяснить реальные причины проблемы с генерацией страницы.


Как?

natalya писал(а):
В любом случае т.к. прайс-лист выводится из соответствующей тип. дин. страницы методом ShowShop, то можно организовать вывод прайса на несколько страниц(причем в данную тип. дин. страницу следует добавить обработку этих самых ссылок на страницы аналогично тому, как это уже реализовано для каталога магазина в тип. дин. странице "Интернет-магазин" ).


Честно говоря, я пробовала это сделать, но никак не могу разобраться с этим кодом. Вы не могли бы показать кусок, который нужно вставить?
#
Re: Как разбить на страницы прайс-лист?
если честно, абсолютно не представляю как можно разбить на страницы прайс, когда вывод идет из нескольких групп. korsus3, попробуйте разбить не на страницы, а на группы. Т.е. первая страница прайса - список групп, когда кликаете на группу - появляются прайс для этой группы
#
Re: Как разбить на страницы прайс-лист?
Только у меня групп нет
#
Re: Как разбить на страницы прайс-лист?
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"/>&#xA0;<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'].
#
Re: Как разбить на страницы прайс-лист?
Огромное СПАСИБО! Получилось!!!!
#
Re: Как разбить на страницы прайс-лист?
пожалуйста
#
Re: Как разбить на страницы прайс-лист?
Подскажите а как отсортировать в таком прайсе группы товаров?
Я добавила в дин.страницу параметры
$param['group_order'] ='Asc';  
$param['items_order'] ='Asc';

Сами товары отсортировались, а группы нет, получается часть группы "Видиокамеры" на первой странице - 6 элементов, оставшие 4 элемента на второй странице.
И так все группы, кусочками на обеих страницах...
Как сделать чтобы группы шли по алфавиту, сперва группа "Видеокамеры" и все товары из нее, потом следующая группа и т.д.?
Модератор
#
Re: Как разбить на страницы прайс-лист?
KovalenkoMV писал(а):
а группы нет

Совсем не отсортировались? Они должны были сортироваться внутри подгрупп.

KovalenkoMV писал(а):
получается часть группы «Видиокамеры» на первой странице — 6 элементов, оставшие 4 элемента на второй странице.

Это вполне нормально.

KovalenkoMV писал(а):
Как сделать чтобы группы шли по алфавиту, сперва группа «Видеокамеры» и все товары из нее, потом следующая группа и т.д.?

Переделать XSL-шаблон.
Авторизация