Фильтрация с ошибкой "STRICT"

#
Re: Фильтрация с ошибкой "STRICT"
wbags, проверьте, выбраны ли нужные доп. свойства доступными для определенной группы товаров(в разделе администрирования в "Интернет-магазине" в Вашем магазине в группе товаров перейдите по ссылке "Свойства товаров, доступные для текущей группы".
#
Re: Фильтрация с ошибкой "STRICT"
С этим все впорядке. Повторюсь, если нужен код макета, тогда вечером. А может всетаки попробуете без кода подсказать где "рыть и каким методом".Еще раз повторю задачу:1).Нужен фильтр по основным и доп.свойствам во всех группах и вложенным подгруппам товаров независимо в какой группе сейчас находимся(сейчас работает этот фильтр только для доп.свойств)/*применил Ваш код, спасибо*/ .2).Нужно чтобы фильтр выводил искомые товары, независимо от страницы которая открыта(сейчас работает только при открытой странице инт.магазина). Сейчас фильтр встроен в макет(присутствует на всех страницах). Видимо необходимый код нужно тоже прописывать в макете.
momentomore
#
Re: Фильтрация с ошибкой "STRICT"
1. получается, что фильтр не работает для основных свойств? Если задавать значения только основных параметров, то результаты выборки пусты?
2. сообщите, когда сайт будет доступен в интернете.
#
Re: Фильтрация с ошибкой "STRICT"
natalya писал(а):
1. получается, что фильтр не работает для основных свойств? Если задавать значения только основных параметров, то результаты выборки пусты?
Да, не работает (применительно к моей задаче,а именно поиск во всех разделах и подразделах каталога товаров инт.маг.,работает фильтр доп.свойств после вставки вашего кода). Фильтр по основным свойствам работает по умолчанию(а именно только в том разделе,в котором сейчас находимся),а мне нужно сквозной поиск в глубину дерева каталога.
natalya писал(а):
2. сообщите, когда сайт будет доступен в интернете.
В том и проблема,что не скоро(разрабатываю на локальном пока). Может как-то поэтапно решить.Сначала код подобный приведенному для доп.свойств. А потом уже решать как его прикрутить к макету, чтобы работал на всех страницах?
momentomore
#
Re: Фильтрация с ошибкой "STRICT"
Приведите код типовой динамической страницы "Интернет-магазин".
#
Re: Фильтрация с ошибкой "STRICT"
Ок. Я понял, без моего кода Вам сложно сориентироваться. Тогда вечером отправлю. Удачи!
momentomore
#
Re: Фильтрация с ошибкой "STRICT"
Привожу все необходимые коды:
1) /*Типовая страница интерн.магазина*/
<?
$xsl_catalog = to_str($GLOBALS['LA']['xsl_catalog']);
$xsl_item = to_str($GLOBALS['LA']['xsl_item']);
$current_shop_id = to_int($GLOBALS['LA']['shop_id']);

$param = array();

if($GLOBALS['shop_item_path'] != false)
{
   if (class_exists("SiteUsers")
   {
      /* Получаем id текущего пользователя сайта */
      $SiteUsers = new SiteUsers();
      $param['user_id'] = $SiteUsers->GetCurrentSiteUser();
   }

   $external_propertys = array();

   if (isset($_POST['submit_comment']))
   {
      /* Проверяем CAPCHA*/
      $Captcha = new Captcha();
      if (isset($_POST['captcha_key']) && isset($_POST['captcha_keystring']))
      {
         $cpt = $Captcha->ValidCaptcha($_POST['captcha_key'], $_POST['captcha_keystring']);
      }
      else
      {
         $cpt = false;
      }

      if ($cpt)
      {
         $param['shop_items_catalog_item_id'] = to_int($_REQUEST['shop_items_catalog_item_id']);
         $param['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
         $param['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
         $param['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
         $param['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
         $param['shop_comment_date_time'] = date("Y-m-d H:i:s";

         /* Активность/неактивность комментария */
         $shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
         if ($shop_row)
         {
            $param['shop_comment_active'] = to_int($shop_row['shop_comment_active']);
         }
         else
         {
            $param['shop_comment_active'] = false;
         }
         $external_propertys['comment_is_active'] = $param['shop_comment_active'];

         $GLOBALS['shops']->InsertComment($param);
      }
      else
      {
         /* Неправильно введен код изображенный на картинке */
         $external_propertys['error'] = 1;

         /* Запиминаем значения */
         $external_propertys['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
         $external_propertys['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
         $external_propertys['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
         $external_propertys['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
         $external_propertys['shop_comment_date_time'] = date("Y-m-d H:i:s";
      }
   }

   /* Вывод списка */
   if(!$GLOBALS['shop_item_path']['item'])
   {
      $param['current_group_id'] = $GLOBALS['shop_item_path']['group']; # корневая группа

      /* Определяем номер элемента, с которого начинается показ в текущей группе */
      $page = end($GLOBALS['URL_ARRAY']);
      $page = to_str($page);

      $shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
      if ($shop_row)
      {
         $items_on_page = $shop_row['shop_items_on_page'];
      }
      else
      {
         $items_on_page = 10;
      }

      /*
      Порядок сортировки ('Asc' - по возрастанию, 'Desc' - по убыванию, 'Rand' - произвольный порядок)
      $param['items_order']='Asc';
      Поле, по которому сортируем (наименование элемента)
      $param['items_field_order']='shop_items_catalog_name';
      */

      /* Ограничиваем по производителю */
      if (to_int($_GET['producer_id']) > 0)
      {
         $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
         $element['name'] = 'shop_producers_list_id';
         $element['prefix'] = 'AND'; // префикс
         $element['if'] = '='; // Условие
         $element['value'] = to_int($_GET['producer_id']);
         $element['sufix'] = '';
         $param['select'][] = $element;

         $external_propertys['producer_id'] = to_int($_GET['producer_id']);

         /* Применять фильтр */
         $external_propertys['apply_filter'] = true;
      }

      /* Ограничиваем по продавцу */
      if (to_int($_GET['saller_id']) > 0)
      {
         $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
         $element['name'] = 'shop_sallers_id';
         $element['prefix'] = 'AND'; // префикс
         $element['if'] = '='; // Условие
         $element['value'] = to_int($_GET['saller_id']);
         $element['sufix'] = '';
         $param['select'][] = $element;

         $external_propertys['saller_id'] = to_int($_GET['saller_id']);

         /* Применять фильтр */
         $external_propertys['apply_filter'] = true;
      }

      /* Ограничиваем по цене ОТ */
      if (to_float($_GET['price_from']) > 0)
      {
         $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
         $element['name'] = 'shop_items_catalog_price';
         $element['prefix'] = 'AND'; // префикс
         $element['if'] = '>'; // Условие
         $element['value'] = to_float($_GET['price_from']);
         $element['sufix'] = '';
         $param['select'][] = $element;

         $external_propertys['price_from'] = to_float($_GET['price_from']);

         /* Применять фильтр */
         $external_propertys['apply_filter'] = true;
      }

      /* Ограничиваем по цене ДО */
      if (to_float($_GET['price_to']) > 0)
      {
         $element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
         $element['name'] = 'shop_items_catalog_price';
         $element['prefix'] = 'AND'; // префикс
         $element['if'] = '<'; // Условие
         $element['value'] = to_float($_GET['price_to']);
         $element['sufix'] = '';
         $param['select'][] = $element;

         $external_propertys['price_to'] = to_float($_GET['price_to']);

         /* Применять фильтр */
         $external_propertys['apply_filter'] = true;
      }

      /* Число элементов на странице */
      $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;

      /* Направление сортировки, 0 - по-возрастанию, 1 - по-убыванию */
      $order_direction = to_int($_GET['order_direction']);
      switch ($order_direction)
      {
         case 1: /* По-возрастанию */
         {
            $order_direction = 'ASC';
            break;
         }
         case 2: /* По-убыванию */
         {
            $order_direction = 'DESC';
            break;
         }
         default: /* По-умолчанию */
         {
            $order_direction = 'ASC';
            break;
         }
      }

      /* Поле сортировки */
      $sort_field = to_int($_GET['sort_by_field']);
      switch ($sort_field)
      {
         case 1: /* По имени */
         {
            $param['items_field_order'] = 'shop_items_catalog_name';
            $param['items_order'] = $order_direction;
            $external_propertys['sort_by_field'] = $sort_field;
            $external_propertys['order_direction'] = $order_direction;
            break;
         }
         case 2: /* По цене */
         {
            $param['items_field_order'] = 'shop_items_catalog_price';
            $param['items_order'] = $order_direction;
            $external_propertys['sort_by_field'] = $sort_field;
            $external_propertys['order_direction'] = $order_direction;
            break;
         }
      }

      /* Обработка дополнительных свойств.
      Получаем список свойств, разрешенных для отображения в данной группе и в фильтре */
      $shop = new shop();
      $resource_properties = $shop->GetPropertiesOfGroupForXml($current_shop_id, $param['current_group_id']);
      if ($resource_properties)
      {
         $element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */

         /* Префикс, если нужен. */
         $element['prefix'] = ' and ('; // префикс

         /* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
         $element['name'] = ''; // Имя


         /* поля для основного св-ва, если тип = 1, то не указывается */
         $element['if'] = ''; // Условие

         /* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
         ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
         $element['value'] = ''; /* Значение поля (или параметра) */
         $element['sufix']=' ';

         /* Добавляем в общий список условий */
         $param['select'][] = $element;

         $count_condition = 0;
         $property_xml = '';

         $count_properties = mysql_num_rows($resource_properties);
         for ($i = 0; $i < $count_properties; $i++)
         {
            $row = mysql_fetch_assoc($resource_properties);

            $element['value'] = 0;

            foreach ($_GET as $key => $value)
            {
               if (preg_match("/property_id_{$row['shop_list_of_properties_id']}_item_id_(\d*)/", $key, $matches))
               {
                  $get_param = 'property_id_'.$row['shop_list_of_properties_id'].'_item_id_'.$matches[1];
                  if (isset($_GET[$get_param]) > 0 && to_int($matches[1]) > 0)
                  {
                     $element['value'] = to_int($matches[1]);
                     $external_propertys['property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value']] = $element['value'];
                     $property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value'].'='.$element['value'];
                  }
               }
            }

            /* Выбираем режим отображения */
            $get_param = 'property_id_'.$row['shop_list_of_properties_id'];
            if (isset($_GET[$get_param]))
            {
               if ($row['shop_list_of_properties_type'] == 0 || $row['shop_list_of_properties_show_kind'] == 1)
               {
                  if (to_str($_GET[$get_param]) ==! ""
                  {
                     $element['value'] = quote_smart(to_str($_GET[$get_param]));
                     $external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
                     $property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
                  }
               }
               else
               {
                  if (to_int($_GET[$get_param]) > 0)
                  {
                     $element['value'] = to_int($_GET[$get_param]);
                     $external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
                     $property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
                  }
               }
            }
            if ($element['value'])
            {
               /* Применять фильтр */
               $external_propertys['apply_filter'] = true;

               $element['property_id'] = to_int($row['shop_list_of_properties_id']);
               $element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
               //$element['prefix'] = 'AND'; /* префикс */
               $element['if'] = '='; /* Условие */
               $element['sufix'] = '';
               if ($count_condition)
               {
                  $element['prefix'] = ' or '; /* префикс */
               }
               else
               {
                  $element['prefix'] = ' '; /* префикс */
               }

               ++$count_condition;
               $param['select'][] = $element;
            }
         }

         if (!$count_condition)
         {
            $element['prefix'] = ' 1'; /* префикс */
         }
         else
         {
            $element['prefix'] = ''; // префикс
         }
         /* добавляем конечный элемент, содержащий HAVING */
         $element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */

         /* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
         $element['name'] = ''; /* Имя */

         /* поля для основного св-ва, если тип = 1, то не указывается */
         $element['if'] = ''; /* Условие */


         /* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
         ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
         $element['value'] = ''; // Значение поля (или параметра)
         $having_count = '';

         if ($count_condition != 0)
         {
            $having_count = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= '.$count_condition.'  ';

         }
         $element['sufix'] = ' ) '.$having_count;

         /* Добавляем в общий список условий */
         $param['select'][] = $element;
      }
      if (!empty($property_xml))
      {
         $external_propertys['property_xml'] = $property_xml;
   if(isset($_GET['apply_filter']))
{
$param['current_group_id']=false;
   }
}
      $GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
   }
   else
   {
      /* Вывод конкретного элемент */
      $GLOBALS['shops']->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
   }
}
?>
2) /*Это фрагмент макета где вызывается фильтр*/
<?
$shop=new shop();
$xsl_catalog='МагазинКаталогТоваровФильтр';
$shop->ShowShop(1,$xsl_catalog);
?>
3)/*Это шаблон фильтра*/
<?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="/">
   <xsl:apply-templates select="shop"/>
</xsl:template>

<!-- Шаблон для магазина -->
<xsl:template match="/shop">
   <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
   <xsl:variable name="parent_group_id" select="@current_group_id"/>
   
   <!-- Выводим фильтр, если количество товаров больше 0 или был применен фильтр -->
   
   <xsl:if test="count(item) > 0 or apply_filter = 1">
      <form method="get" action="./">
      <!--<p>-->
      <div style="background: #F5F5F7; padding: 7px;">
      <p>Производитель&#xa0;
      <select name="producer_id">
         <option value="0">&#x2026;</option>
         <xsl:apply-templates select="producerslist/producer"/>
      </select></p>
      
      <p>&#xa0;Цена от&#xa0;
      <input name="price_from" size="5" type="text">
         <xsl:if test="/shop/price_from != 0">
            <xsl:attribute name="value">
               <xsl:value-of disable-output-escaping="yes" select="/shop/price_from"/>
            </xsl:attribute>
         </xsl:if>   
      </input>
          </p>
      <p>&#xa0;Цена до&#xa0;
      <input name="price_to" size="5" type="text">
         <xsl:if test="/shop/price_to != 0">
            <xsl:attribute name="value">
               <xsl:value-of disable-output-escaping="yes" select="/shop/price_to"/>
            </xsl:attribute>
         </xsl:if>   
      </input>
               </p>
      <p>&#xa0;Товаров на странице&#xa0;
      <select name="on_page">
         <option value="0">&#x2026;</option>
         <xsl:call-template name="for_on_page">
            <xsl:with-param name="i" select="10"/>
            <xsl:with-param name="n" select="50"/>
         </xsl:call-template>
      </select>
                </p>
      <p>&#xa0;<input name="apply_filter" value="Применить" type="submit" />
      </p>
      <xsl:if test="count(properties_for_group/property) > 0">
      <p><b>Фильтр по дополнительным свойствам товара:</b></p>
         <table cellpadding="10px" cellspacing="0">
            <tr><td></td></tr>            
                                    <xsl:apply-templates select="properties_for_group/property"/>
        <tr><td></td></tr>

            
         </table>
      </xsl:if>
      </div>
      <!--</p>-->
      </form>
   </xsl:if>
   
   <!-- На строку - не более 1-х пунктов, если уже 1 выведено - начинаем новую строку -->
   <xsl:if test="position() mod 1 = 0">
   <xsl:text disable-output-escaping="yes">
      &lt;/tr&gt;
      &lt;tr&gt;
   </xsl:text>
   </xsl:if>
   
   <!-- Определяем ссылку с параметрами фильтра -->
   <xsl:variable name="filter">
   <xsl:choose>
      <xsl:when test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
         <xsl:if test="/shop/property_xml/node()">
            <!-- GET для доп. свойств -->
                  
            <xsl:value-of select="/shop/property_xml"/>
                      

         </xsl:if>
      </xsl:when>
      <xsl:otherwise></xsl:otherwise>
   </xsl:choose>
   </xsl:variable>
   <!-- Определяем первый символ вопрос или амперсанд -->
   <xsl:variable name="first_symbol">
   <xsl:choose>
      <xsl:when test="$filter != ''">&amp;</xsl:when>
      <xsl:otherwise>?</xsl:otherwise>
   </xsl:choose>
   </xsl:variable>

   <!-- Строка ссылок на другие страницы каталога -->
   <!--<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>

<!-- Шаблон для фильтра производителей -->

<xsl:template match="producerslist/producer">
   <option value="{@id}">
   <xsl:if test="@id = /shop/producer_id">
      <xsl:attribute name="selected"> </xsl:attribute>
   </xsl:if>
   <xsl:value-of disable-output-escaping="yes" select="name"/>
   </option>
</xsl:template>


<!-- Шаблон для фильра по дополнительным свойствам -->
<xsl:template match="properties_for_group/property">
   <td>
   <xsl:value-of disable-output-escaping="yes" select="property_name"/>&#xa0;
   <xsl:if test="property_show_kind = 1">
      <!-- Отображаем поле ввода -->
      <xsl:variable name="nodename">property_id_<xsl:value-of select="@id"/></xsl:variable>
      <br /><input type="text" name="property_id_{@id}">
         <xsl:if test="/shop/*[name()=$nodename] != ''">
            <xsl:attribute name="value">
            <xsl:value-of disable-output-escaping="yes" select="/shop/*[name()=$nodename]"/>
            </xsl:attribute>
         </xsl:if>
      </input>
   </xsl:if>
   <xsl:if test="property_show_kind = 2">
      <!-- Отображаем список -->
      <br /><select name="property_id_{@id}">
          <option value="0">...</option> -->
         <xsl:apply-templates select="list_items/list_item"/>
      </select>
   </xsl:if>   
   <xsl:if test="property_show_kind = 3">
      <!-- Отображаем переключатели -->
      <br /><input type="radio" name="property_id_{@id}" value="0" id="id_prop_radio_{@id}_0"></input>
      <label for="id_prop_radio_{@id}_0">Любой вариант</label>
      <xsl:apply-templates select="list_items/list_item"/>
   </xsl:if>   
   <xsl:if test=" property_show_kind = 4">
      <!-- Отображаем флажки -->
      <xsl:apply-templates select="list_items/list_item"/>
   </xsl:if>   
   </td>
   <xsl:if test="position() mod 1 = 0">
      <xsl:text disable-output-escaping="yes">
         &lt;/tr&gt;
         &lt;tr valign="top"&gt;
      </xsl:text>
   </xsl:if>
</xsl:template>

<xsl:template match="list_items/list_item">
   <xsl:if test="../../property_show_kind = 2">
      <!-- Отображаем список -->
      <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/></xsl:variable>
      <option value="{@id}">      
         <xsl:if test="/shop/*[name()=$nodename] = @id">
            <xsl:attribute name="selected"> </xsl:attribute>
         </xsl:if>
         <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
      </option>
   </xsl:if>   
   <xsl:if test="../../property_show_kind = 3">
      <!-- Отображаем переключатели -->
      <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/></xsl:variable>
      <br /><input type="radio" name="property_id_{../../@id}" value="{@id}" id="id_property_id_{../../@id}_{@id}">
         <xsl:if test="/shop/*[name()=$nodename] = @id">
            <xsl:attribute name="checked"> </xsl:attribute>
         </xsl:if>
         <label for="id_property_id_{../../@id}_{@id}">
            <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
         </label>
      </input>
   </xsl:if>
   <xsl:if test="../../property_show_kind = 4">
      <!-- Отображаем флажки -->
      <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/>_item_id_<xsl:value-of select="@id"/></xsl:variable>
      <br /><input type="checkbox" name="property_id_{../../@id}_item_id_{@id}" id="id_property_id_{../../@id}_{@id}">
         <xsl:if test="/shop/*[name()=$nodename] = @id">
            <xsl:attribute name="checked"> </xsl:attribute>
         </xsl:if>
         <label for="id_property_id_{../../@id}_{@id}">
            <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
         </label>
      </input>
   </xsl:if>   
</xsl:template>

<!-- Цикл с шагом 10 для select'a количества элементов на страницу -->
<xsl:template name="for_on_page">
   <xsl:param name="i" select="0"/>
   <xsl:param name="n"/>

   <option value="{$i}">
      <xsl:if test="$i = /shop/on_page">
         <xsl:attribute name="selected"> </xsl:attribute>
      </xsl:if>
      <xsl:value-of select="$i"/>
   </option>
   
   <xsl:if test="$n > $i">   
      <!-- Рекурсивный вызов шаблона -->
      <xsl:call-template name="for_on_page">
         <xsl:with-param name="i" select="$i + 10"/>
         <xsl:with-param name="n" select="$n"/>
      </xsl:call-template>
   </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">
         
         <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
         <xsl:variable name="parent_group_id" select="/shop/@current_group_id"/>
         
         <!-- Определяем группу для формирования адреса ссылки -->
         <xsl:variable name="group_link"><xsl:choose>
            <!-- Если группа не корневая (!=0) -->
            <xsl:when test="$parent_group_id != 0"><xsl:value-of select="/shop//group[@id=$parent_group_id]/fullpath"/></xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <!-- Определяем адрес ссылки -->
         <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>

         <!-- Передаем фильтр -->
         <xsl:variable name="filter">
         <xsl:choose>
         <xsl:when test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
            <xsl:if test="/shop/property_xml/node()">
               <!-- GET для доп. свойств -->
               <xsl:value-of select="/shop/property_xml"/>
            </xsl:if>
         </xsl:when>
         <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         
         <!-- Определяем первый символ вопрос или амперсанд -->
         <xsl:variable name="first_symbol">
         <xsl:choose>
            <xsl:when test="$filter != ''">&amp;</xsl:when>
            <xsl:otherwise>?</xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         
         <!-- Данные для стрелок сортировки -->
         <xsl:variable name="arrows">
         <xsl:choose>
            <xsl:when test="(/shop/sort_by_field = 1) or (/shop/sort_by_field = 2)">
               <xsl:choose>
                  <!-- Стрелка вверх -->
                  <xsl:when test="/shop/order_direction = 'ASC'"><xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=1</xsl:when>
                  <!-- Стрелка вниз -->
                  <xsl:otherwise><xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=2</xsl:otherwise>
               </xsl:choose>   
            </xsl:when>
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
         </xsl:variable>
         <a href="{/shop/path}{$group_link}{$number_link}{$filter}{$arrows}" 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:template match="group" mode="goup_path">
   <xsl:param name="parent_id" select="@parent"/>

   <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
   <xsl:param name="parent_group_id" select="/shop/@current_group_id"/>

   <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>

   <xsl:if test="@parent=0">
      <a href="{/shop/path}"><xsl:value-of disable-output-escaping="yes" select="/shop/name"/></a>
   </xsl:if>

   <span class="path_arrow">&#8594;</span>

   <!-- ============================================================================================== -->
   <!-- Если ID группы, для которой выводим список элементов, равен ID текущей группы - выводим жирным -->
   <!-- ============================================================================================== -->
   <xsl:if test="$parent_group_id=@id">
      <a href="{/shop/path}{fullpath}"><b><xsl:value-of disable-output-escaping="yes" select="name"/></b></a>
   </xsl:if>

   <!-- ============================ -->
   <!-- Иначе выводим обычную ссылку -->
   <!-- ============================ -->
   <xsl:if test="$parent_group_id!=@id">
      <a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </xsl:if>

</xsl:template>

</xsl:stylesheet>
ЖДУ ВАШИХ РЕКОМЕНДАЦИЙ!
momentomore
#
Re: Фильтрация с ошибкой "STRICT"
1. приведенный мною код нужно было вставить немного по-другому. Сейчас у Вас так
   if (!empty($property_xml))
      {
         $external_propertys['property_xml'] = $property_xml;
   if(isset($_GET['apply_filter']))
{
$param['current_group_id']=false;
   }
}
      $GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);

а нужно так:
if (!empty($property_xml))
{
   $external_propertys['property_xml'] = $property_xml;
}

if(isset($_GET['apply_filter']))
{
$param['current_group_id'] = false;
}

$GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);

2. -3. в XSL-шаблоне "МагазинКаталогТоваровФильтр" вместо:
<form method="get" action="./">

используйте:
<form method="get" action="{path}">
#
Re: Фильтрация с ошибкой "STRICT"
СУПЕР!!! Все работает. Огроменное MERSI Удачи техподдержке! Тему закрываем.
momentomore
Авторизация