<?php

function SetGroups($mas_groups, $set)
{
	$mas_groups = to_array($mas_groups);
	foreach ($mas_groups as $key=>$value)
	{
		foreach ($value as $key1=>$value1)
		{
			$set[] = $value1;
			if ($value1 == $key)
			{
				$set[] = $key;
				SetGroups($mas_groups, $set);
			}
		}
	}
	return $set;
}

$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();

$shop = & singleton('shop');

if ($GLOBALS['shop_item_path'] != false)
{
	$external_propertys = array();

	if (class_exists("SiteUsers"))
	{
		/* Получаем id текущего пользователя сайта */
		$SiteUsers = & singleton('SiteUsers');
		$site_user_id = $SiteUsers->GetCurrentSiteUser();
		$param['user_id'] = $site_user_id;
		$external_propertys['user_id'] = $site_user_id;
	}
	else
	{
		$site_user_id = 0;
		$external_propertys['user_id'] = 0;
	}

	// Если добавление комментария
	if (isset($_POST['submit_comment']) && !empty($GLOBALS['shop_item_path']['item'])
	&& isset($_POST['email']) && isset($_POST['author']) && $_POST['email'] == 'comment@localhost.ru' && $_POST['author'] == '')
	{
		/* Проверяем CAPCHA*/
		$Captcha = new Captcha();

		$xmlData = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
		$xmlData .= '<document>' . "\n";

		if ($site_user_id > 0
		|| $Captcha->ValidCaptcha(to_str($_POST['captcha_key']), to_str($_POST['captcha_keystring'])))
		{
			$param['shop_items_catalog_item_id'] = $GLOBALS['shop_item_path']['item'];
			$param['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);

			$param['shop_comment_user_email'] = to_str($_REQUEST['shop_comment_user_email']);
			$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 = $shop->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'];

			// Если есть модуль "Пользователи сайта", получим текущего пользователя
			if (class_exists('SiteUsers'))
			{
				$SiteUsers = & singleton('SiteUsers');
				$param['site_users_id'] = $SiteUsers->GetCurrentSiteUser();
			}
			else
			{
				$param['site_users_id'] = 0;
			}

			$shop_comment_id = $shop->InsertComment($param);

			// Задан XSL для формирования письма администратору о добавлении комментария к товару
			if (to_str($GLOBALS['LA']['xsl_add_comment_letter_to_admin']) != '')
			{
				// Формируем XML для комментария
				$xmlData .= $shop->GenXml4Comment($shop_comment_id);
				$xmlData .= '</document>' . "\n";

				$xsl = new xsl();
				// Формируем текст письма администратору
				$message = $xsl->build($xmlData, $GLOBALS['LA']['xsl_add_comment_letter_to_admin']);

				// Формат письма - текст
				if (to_int($GLOBALS['LA']['comment_mail_type']) == 0)
				{
					$comment_mail_type = 'text/plain';
				}
				else
				{
					$comment_mail_type = 'text/html';
				}

				$subject = $GLOBALS['MSG_shops']['subject_report_for_comment'];

				$kernel = & singleton('kernel');

				// Получаем e-mail куратора магазина
				$email_to = to_str($shop_row['shop_shops_admin_mail']);

				if (!empty($email_to))
				{
					$kernel->SendMailWithFile($email_to, EMAIL_TO, $subject, $message, array(), $comment_mail_type);
				}
			}
		}
		else
		{
			/* Неправильно введен код изображенный на картинке */
			$external_propertys['error'] = 1;

			/* Запоминаем значения */
			$external_propertys['shop_comment_user_name'] = strip_tags(to_str($_REQUEST['shop_comment_user_name']));
			$external_propertys['shop_comment_user_email'] = strip_tags(to_str($_REQUEST['shop_comment_user_email']));
			$external_propertys['shop_comment_subject'] = strip_tags(to_str($_REQUEST['shop_comment_subject']));
			$external_propertys['shop_comment_text'] = strip_tags(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 = $shop->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 (isset($_GET['all_group']))
		{
			// Выводим из всех групп
$param['current_group_id'] = false;
$external_propertys['property_xml'] = "&all_group=1";
$external_propertys['apply_filter'] = true;
		}

		/* Ограничиваем по производителю */
		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;
		}

		$price_from = str_replace(',', '.', to_float($_GET['price_from']));

		/* Ограничиваем по цене ОТ */
		if ($price_from > 0)
		{
			$external_propertys['price_from'] = $price_from;

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

		$price_to = str_replace(',', '.', to_float($_GET['price_to']));

		/* Ограничиваем по цене ДО */
		if ($price_to > 0)
		{
			$external_propertys['price_to'] = $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_field_order'] = 'item_price_absolute';
					$param['items_order'] = $order_direction;
					$external_propertys['sort_by_field'] = $sort_field;
					$external_propertys['order_direction'] = $order_direction;
					break;
				}
			case 3:  /* По оценке*/
				{
					$param['items_field_order'] = 'shop_comment_grade';
					$param['items_order'] = $order_direction;
					$external_propertys['sort_by_field'] = $sort_field;
					$external_propertys['order_direction'] = $order_direction;
					break;
				}
		}

		// Задан фильтр и/или сортировка по цене
		if ($price_from > 0 || $price_to > 0 || $sort_field == 2)
		{
			// Получаем список валют магазина
			$currency_result = $shop->GetAllCurrency();

			$query_currency_switch = 'shop_items_catalog_price';
			
			if(isset($param['sql_external_select']))
			{
				$param['sql_external_select'] .= ', shop_discount_table.shop_discount_percent';
			}
			else
			{
				$param['sql_external_select'] = ', shop_discount_table.shop_discount_percent';
			}

			// Цикл по валютам магазина
			while ($currency_row = mysql_fetch_assoc($currency_result))
			{
				// Получаем коэффициент пересчета для каждой валюты
				$currency_coefficient = $shop->GetCurrencyCoefficientToShopCurrency($currency_row['shop_currency_id'], $shop_row['shop_currency_id']);

				$query_currency_switch = "IF (shop_items_catalog_table.shop_currency_id = {$currency_row['shop_currency_id']}, IF (shop_discount_table.shop_discount_percent, shop_items_catalog_price * (100 - shop_discount_table.shop_discount_percent) * $currency_coefficient / 100, shop_items_catalog_table.shop_items_catalog_price * $currency_coefficient), $query_currency_switch)";
			}

			$param['sql_external_select'] .= ', ' . $query_currency_switch . ' AS item_price_absolute';

			$current_date = date('Y-m-d H:i:s');
			
if(!isset($param['select_discount']))
{
			if(isset($param['sql_from']))
			{
				$param['sql_from'] .= "LEFT JOIN shop_item_discount_table ON (shop_items_catalog_table.shop_items_catalog_item_id = shop_item_discount_table.shop_items_catalog_item_id) LEFT JOIN shop_discount_table ON (shop_item_discount_table.shop_discount_id = shop_discount_table.shop_discount_id AND (shop_discount_table.shop_discount_to >= '$current_date' OR shop_discount_table.shop_discount_to ='0000-00-00 00:00:00') AND shop_discount_table.shop_discount_from <= '$current_date')";
			}
			else
			{
				$param['sql_from'] = "LEFT JOIN shop_item_discount_table ON (shop_items_catalog_table.shop_items_catalog_item_id = shop_item_discount_table.shop_items_catalog_item_id) LEFT JOIN shop_discount_table ON (shop_item_discount_table.shop_discount_id = shop_discount_table.shop_discount_id AND (shop_discount_table.shop_discount_to >= '$current_date' OR shop_discount_table.shop_discount_to ='0000-00-00 00:00:00') AND shop_discount_table.shop_discount_from <= '$current_date')";
			}
}
		}

		/* Обработка дополнительных свойств.
		 Получаем список свойств, разрешенных для отображения в данной группе и в фильтре */
		$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);

			// Массив идентификаторов доп. свойств, для которых задан тип отображения "Список - флажками"
			$mas_key_list_checkbox = array();


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

				$element['value'] = 0;

				switch ($row['shop_list_of_properties_show_kind'])
				{
					case 1: // Поле ввода
					case 2: // Список - списком
					case 3:	// Список - переключателями
					case 5:	// Флажок
						{
							/* Выбираем режим отображения */
							$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'];

										//$element['value'] = '%' . $element['value'] . '%';
									}
								}
								// Флажок
								elseif($row['shop_list_of_properties_type'] == 7)
								{
									$element['value'] = 1;
									$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'] = ''; /* префикс */

								// Способ отображения "Поле ввода"
								if ($row['shop_list_of_properties_show_kind'] == 1 && !is_numeric($_GET[$get_param]))
								{
									$element['value'] = '%' . $element['value'] . '%';
									$element['if'] = ' LIKE '; /* Условие */
								}
								else
								{
									$element['if'] = '='; /* Условие */
								}

								$element['sufix'] = '';

								if ($count_condition)
								{
									$element['prefix'] = ' OR '; /* префикс */
								}
								else
								{
									$element['prefix'] = ' '; /* префикс */
								}

								$count_condition++;
								$param['select'][] = $element;
							}
                                                break;
						}
					case 4: // Тип отображения - список флажками
						{
							// Модуль "Списки" подключен и  значенич доп. свойства не обработаны ранее
							//if (class_exists('lists') && !in_array($row['lists_id'], $mas_key_list_checkbox))
if (class_exists('lists'))
							{
								//$mas_key_list_checkbox[] = $row['lists_id'];
									
								$lists = & singleton('lists');

								// Получаем информацию о элементах списка, который задан для доп. свойства
								$list_items_resource = $lists->SelectListsItems($row['lists_id']);

								$k = 0;

								// Цикл по элементам списка
								while($row_list_item = mysql_fetch_assoc($list_items_resource))
								{
									// Передано значение элемента списка. Формируем запрос.
									if (isset($_GET['property_id_' . $row['shop_list_of_properties_id'] .'_item_id_' . $row_list_item['lists_items_id']]))
									{

										if ($count_condition || $k > 0)
										{
											$element['prefix'] = ' OR '; /* префикс */
										}
										else
										{
											$element['prefix'] = ' ';
										}
											
										$element['property_id'] = to_int($row['shop_list_of_properties_id']);
											
										$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
										$element['if'] = '='; /* Условие */
										$element['value'] = $row_list_item['lists_items_id'];
										$element['sufix'] = '';
										$param['select'][] = $element;

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

										$external_propertys['property_id_' . to_int($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
										$property_xml .= '&property_id_' . to_int($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id'] . '=' . $element['value'];

										$k++;
									}
								}

								// Задан фильтр по одному из значений списка
								if ($k > 0)
								{
									$count_condition++;
								}
							}
							break;
						}
					case 6: // Тип отображения - диапазон
						{
							$get_param_from = 'property_id_' . $row['shop_list_of_properties_id'] . '_from';
							$get_param_to = 'property_id_' . $row['shop_list_of_properties_id'] . '_to';

							if (isset($_GET[$get_param_from]) && mb_strlen($_GET[$get_param_from]) > 0)
							{

								$value = floatval($_GET[$get_param_from]);

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

								$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id']) . '_from'] = $value;
								$property_xml .= '&property_id_' . to_int($row['shop_list_of_properties_id']).'_from=' . $value;

								$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
								$element['property_id'] = to_int($row['shop_list_of_properties_id']);
								$element['if'] = 'IS NOT NULL'; /* Условие */
								$element['value'] = '';

								$property_row = $shop->GetPropretyOfItems($element['property_id']);

								if($property_row['shop_list_of_properties_type'] == 2)
								{
									$lists_id = to_int($property_row['lists_id']);
									$lists = & singleton('lists');

									$list_row = $lists->GetListItemsById($lists_id);

									$in = array();

									if (is_array($list_row) && count($list_row) > 0)
									{
										foreach ($list_row as $row_lists_items_value)
										{
											if ($row_lists_items_value['lists_items_value'] >= $value)
											{
												$in[] = $row_lists_items_value['lists_items_id'];
											}
										}
									}

									if(count($in) > 0)
									{
										$element['sufix'] = 'AND shop_properties_items_table.shop_properties_items_value - 0.0 IN ('.implode(',', $in).') ';
									}
									else
									{
										$element['sufix'] = "";
									}
								}
								else
								{
									$element['sufix'] = " AND shop_properties_items_table.shop_properties_items_value - 0.0 >=$value";
								}

								if ($count_condition)
								{
									$element['prefix'] = ' OR '; /* префикс */
								}
								else
								{
									$element['prefix'] = ' '; /* префикс */
								}

								$param['select'][] = $element;

								$count_condition++;
							}

							if (isset($_GET[$get_param_to]) && mb_strlen($_GET[$get_param_to]) > 0)
							{
								$value = floatval($_GET[$get_param_to]);

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

								$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id']) . '_to'] = $value;
								$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'_to='.$value;

								$element['property_id'] = to_int($row['shop_list_of_properties_id']);
								$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
								$element['if'] = 'IS NOT NULL'; /* Условие */
								$element['value'] = '';

								$property_row = $shop->GetPropretyOfItems($element['property_id']);

								if ($property_row['shop_list_of_properties_type'] == 2)
								{
									$lists_id = to_int($property_row['lists_id']);
									$lists = & singleton('lists');

									$list_row = $lists->GetListItemsById($lists_id);

									$in = array();

									if (is_array($list_row) && count($list_row) > 0)
									{
										foreach ($list_row as $row_lists_items_value)
										{
											if($row_lists_items_value['lists_items_value'] <= $value)
											{
												$in[] = $row_lists_items_value['lists_items_id'];
											}
										}
									}
										
									if(count($in) > 0)
									{
										$element['sufix'] = 'AND shop_properties_items_table.shop_properties_items_value - 0.0 IN ('.implode(',', $in).') ';
									}
									else
									{
										$element['sufix'] = "";
									}

								}
								else
								{
									$element['sufix'] = "AND shop_properties_items_table.shop_properties_items_value - 0.0 <= $value";
								}

								if (!(isset($_GET[$get_param_from]) && mb_strlen($_GET[$get_param_from]) > 0))
								{
									if ($count_condition)
									{
										$element['prefix'] = ' OR '; /* префикс */
									}
									else
									{
										$element['prefix'] = ' '; /* префикс */
									}

									$count_condition++;
								}
								else
								{
									$element['prefix'] = ' AND ';
								}

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

							break;
						}
					case 7: // Список - список с множественным выбором
						{
							// Модуль "Списки" подключен и передан массив значений доп. свойства
							if (class_exists('lists') && isset($_GET['property_id_' . $row['shop_list_of_properties_id']]) && is_array($_GET['property_id_' . $row['shop_list_of_properties_id']]))
							{
								$lists = & singleton('lists');

								// Получаем информацию о элементах списка, который задан для доп. свойства
								$list_items_resource = $lists->SelectListsItems($row['lists_id']);

								$k = 0;

								// Цикл по элементам списка
								while($row_list_item = mysql_fetch_assoc($list_items_resource))
								{
									// Передано значение элемента списка. Формируем запрос.
									if (in_array($row_list_item['lists_items_id'], $_GET['property_id_' . $row['shop_list_of_properties_id']]))
									{
										if ($count_condition || $k > 0)
										{
											$element['prefix'] = ' OR '; /* префикс */
										}
										else
										{
											$element['prefix'] = ' ';
										}
											
										$element['property_id'] = to_int($row['shop_list_of_properties_id']);
											
										$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
										$element['if'] = '='; /* Условие */
										$element['value'] = $row_list_item['lists_items_id'];
										$element['sufix'] = '';
										$param['select'][] = $element;

										$external_propertys['property_id_' . to_int($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
										$property_xml .= '&property_id_' . to_int($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id'] . '=' . $element['value'];

										$k++;
									}
								}

								// Задан фильтр по одному из значений списка
								if ($k > 0)
								{
									$count_condition++;
								}
							}
								
							break;
						}
				}
			}

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

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

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

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

			//if ($count_condition != 0 && ($price_from > 0 || $price_to >0))
			if ($count_condition != 0)
			{
				$param['sql_group_by'] = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id';
					
				$param['sql_having'] = "HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = {$count_condition}";
			}
			else
			{
				$param['sql_having'] = 'HAVING 1 ';
			}

			$element['sufix'] = ' ) ';

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

		if ($price_from > 0)
		{
			$param['sql_having'] .= ' AND item_price_absolute >= ' . $price_from;
		}

		if ($price_to > 0)
		{
			$param['sql_having'] .= ' AND item_price_absolute <= ' . $price_to;
		}
			
		/* добавляем конечный элемент, содержащий HAVING */
		/*$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
		 $element['prefix'] = ' AND';
		 $element['name'] = 'shop_items_catalog_table.shop_shops_id';
		 $element['if'] = '=';
		 $element['value'] = $current_shop_id; // Значение поля (или параметра)
		 $element['sufix'] = '';
		 $param['select'][] = $element;*/

		if (!empty($property_xml))
		{
			$external_propertys['property_xml'] = $property_xml;
		}

		// Если передано имя тэга - фильтруем
		if (isset($GLOBALS['shop_item_path']['tag_name']))
		{
			if (class_exists('Tag'))
			{
				$oTag = & singleton('Tag');

				$tag_row = $oTag->GetTagByPath($GLOBALS['shop_item_path']['tag_name']);

				$param['tags'] = array($tag_row['tag_id']);

				// При выводе тэгов вывод элементов ведется из всех групп
				$param['current_group_id'] = false;
			}
		}

		// При выводе списка товаров получать подробное описание каждого товара не нужно
		$param['show_text'] = false;

		// При выводе списка товаров получать сопутствующие товары не нужно
		$param['xml_show_tying_products'] = true;

		// Запрещаем передачу в XML свойств групп
		$param['xml_show_group_property'] = true;

		$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
	}
	else
	{
		/* Вывод конкретного элемент */
		//$param['show_catalog_item_type'] = array('active', 'inactive');
		$param['xml_show_group_type'] = 'tree';
		$param['current_group_id'] = $GLOBALS['shop_item_path']['group'];

		// Запрещаем передачу в XML свойств групп
		$param['xml_show_group_property'] = false;

		/* Вывод конкретного элемент */
		$shop->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
	}
}
?>