Сортировка
Здравствуйте!
Постараюсь изложить все правильно
Во вкладке сортировка интернет-магазина поля сортировки товара и групп установлены по порядку, направление по возрастанию. В столбце групп и элементов значения заданы для сортировки. Количество выводимых элементов 12.
Но должного вывода не происходит. Если количество выводимых элементов увеличить, скажем до 30, то вывод происходит должным образом, а как только вывод постранично то сортировка не работает.
В пришедшем хмл при выводе , например 12 элементов, приходят не те 12 элементов, которые должны быть выведены
именно на настоящей странице.
Почему? и как решить проблему?
Заранее спасибо
Постараюсь изложить все правильно

Во вкладке сортировка интернет-магазина поля сортировки товара и групп установлены по порядку, направление по возрастанию. В столбце групп и элементов значения заданы для сортировки. Количество выводимых элементов 12.
Но должного вывода не происходит. Если количество выводимых элементов увеличить, скажем до 30, то вывод происходит должным образом, а как только вывод постранично то сортировка не работает.
В пришедшем хмл при выводе , например 12 элементов, приходят не те 12 элементов, которые должны быть выведены
именно на настоящей странице.
Почему? и как решить проблему?
Заранее спасибо

ТДС:
<?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;
}
function getAllSubGroups($start_groups_id, $current_shop_id, $shop, $groups =
array())
{
// получим число групп и элементов в текущей группе и ее подгруппах.
// подробнее см. API
$count_groups = $shop->GetCountItemsAndGroups($start_groups_id, $current_shop_id, false);
// если есть подгруппы
if ($count_groups['count_groups'] > 0) {
// получим ресурс с подгруппами текущей группы
$resource = $shop->GetGroups($current_shop_id, $start_groups_id);
// обработаем его
while ($row = mysql_fetch_assoc($resource)) {
// итеративно вызовем функцию getAllSubGroups на случай если у рассматриваемой группы
// тоже есть подгруппы
$groups = getAllSubGroups($row['shop_groups_id'], $current_shop_id, $shop, $groups);
// добавим в массив группу id рассматриваемой группы
$groups[] = $row['shop_groups_id'];
}
}
return $groups;
}
$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']; // корневая группа
//$param['current_group_id']=false;
/* Определяем номер элемента, с которого начинается показ в текущей группе */
$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;
$count_groups = $shop->GetCountItemsAndGroups($GLOBALS['shop_item_path']['group'],
$current_shop_id);
if($GLOBALS['shop_item_path']['group']!=0){
$current_group_row = $shop->GetGroup($GLOBALS['shop_item_path']['group']);
// если в текущей группе элементов нет, а в подгруппах есть
if ($count_groups['count_all_items'] > 0) {
// передаим в xml признак того, что вывод будет происходить из подгрупп
$external_propertys['show_items_from_subgroups'] = 1;
// если мы в корневой группе ИМ...
if ($GLOBALS['shop_item_path']['group'] == 0) {
// то проще задать current_group_id = false
// быстрее будет ;)
$param['current_group_id'] = false;
} else {
// если мы не в корне ИМ то возможны варианты:
if ($count_groups['count_groups'] > 0) {
// если у текущей группы есть подгруппы:
//то создаем массив
$groups = array();
//заполняем его деревом подгрупп
$groups = getAllSubGroups($GLOBALS['shop_item_path']['group'], $current_shop_id,
$shop);
// добавляем в массив текущую группу
$groups[] = $GLOBALS['shop_item_path']['group'];
// передаем массив с подгруппами
$param['current_group_id'] = $groups;
$param['xml_show_group_type'] = 'all';
} else {
// если мы не в корне ИМ и подгрупп нету, то ничего и не меняется :)
$param['current_group_id'] = $GLOBALS['shop_item_path']['group'];
}
}
// зададим случайную сортировку
//$param['items_field_order'] = 'RAND()';
}
}
if (to_str($_GET['search']) != "")
{
$param['sql_select_modification'] = true;
$element['type'] = 0; // 0 — основное св-во, 1 — дополнительное
$element['name'] = 'shop_items_catalog_table.shop_items_catalog_name';
$element['prefix'] = 'AND'; // префикс
$element['if'] = 'LIKE'; // Условие
$element['value'] = '%'.quote_smart(to_str ($_GET['search'])) . '%';
$element['sufix'] = '';
$param['select'][] = $element;
if(!isset($_GET['extsearch'])) {
if (!array_key_exists("sql_external_select", $param))
{ $param['sql_external_select'] = ""; }
$param['sql_external_select'] .= ', COUNT(t2.shop_items_catalog_item_id) as count ';
if (!array_key_exists("sql_from", $param))
{ $param['sql_from'] = ""; }
$param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table as t2 ON shop_items_catalog_table.shop_items_catalog_item_id = t2.shop_items_catalog_modification_id AND t2.shop_items_catalog_is_active = 1 ';
if (!array_key_exists("sql_group_by", $param))
{ $param['sql_group_by'] = ' GROUP BY shop_items_catalog_item_id '; }
if (!array_key_exists("sql_having", $param))
{ $param['sql_having'] = ' HAVING count = 0 '; }
else { $param['sql_having'] .= ' and count = 0 '; }
}
$external_propertys['names'] = to_str($_GET['search']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$xsl_catalog='МагазинКаталогТоваровПОИСК';
$param['current_group_id']=false;
}
if(isset($_GET['extsearch']))
{
$param['current_group_id']=false;
$param['sql_select_modification'] = false;
$pref='AND (';
$suf='';
$k=0;
if(to_int($_GET['mark'])>0) {
$res=mysql_query("select shop_list_of_properties_table.* from lists_items_table inner join shop_list_of_properties_table on shop_list_of_properties_table.shop_list_of_properties_name=lists_items_table.lists_items_value and lists_items_table.lists_id=18 and lists_items_table.lists_items_id='{$_GET['mark']}'");
$row=mysql_fetch_assoc($res);
$external_propertys['id_model']=to_int($_GET['mark']);
$external_propertys['id']=$row['shop_list_of_properties_id'];
$k++;
$pref='OR';
$suf=' )';
// Ограничение по цвету
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] = 133;
$element['prefix'] = ' AND ('; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['mark']); //
if(to_int($_GET['model'])==0 and to_int($_GET['year'])==0 and empty($_GET['group']))
$element['sufix'] = ' )';
else
$element['sufix'] = '';
$param['select'][] = $element;
}
$model= to_int($_GET['model']);
if($model>0) {
$k++;
$res=mysql_query("select p.* from lists_table as l inner join lists_items_table as li on l.lists_id=li.lists_id and li.lists_items_id={$model} inner join shop_list_of_properties_table as p on p.shop_list_of_properties_name=l.lists_name and p.shop_shops_id=3");
$row=mysql_fetch_assoc($res);
if(to_int($_GET['year'])>0 or !empty($_GET['group']))
$suf='';
// Ограничение по флажку
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =$row['shop_list_of_properties_id'];
$element['prefix'] = $pref; // префикс
$element['if'] = '='; // Условие
$element['value'] =$model; //
$element['sufix'] = $suf;
$param['select'][] = $element;
}
if(to_int($_GET['year'])>0) {
$k++;
if(empty($_GET['group']))
$suf=' )';
else $suf='';
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =138;
$element['if'] = '='; // Условие
$element['prefix'] = $pref; // префикс
$element['value'] =to_int($_GET['year']);
$element['sufix'] = $suf;
$param['select'][] = $element;
}
if(!empty($_GET['group']))
{
$k++;
if(count($_GET['group'])>1) {
$c=count($_GET['group']);
$i=1;
$v='';
foreach($_GET['group'] as $val) {
if($i==1) {
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$pref=' AND (';
else
$pref='OR (';
$suf='';
}
elseif($c==$i) {
$pref='OR';
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$suf=')';
else
$suf=') )'; }
else
{
$suf='';
$pref='OR';
}
$i++;
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =217;
$element['prefix'] = $pref; // префикс
$element['if'] = '='; // Условие
$element['value'] =$val;
$element['sufix'] =$suf;
$param['select'][] = $element; }
}
else
{
$suf=' )';
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =217;
$element['if'] = '='; // Условие
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$element['prefix'] = 'AND (';
else
$element['prefix'] = 'OR';
$element['value'] =to_int($_GET['group'][0]);
$element['sufix'] = $suf;
$param['select'][] = $element;
}
}
if($k>1) {
$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) = {$k}";
}
$param['current_group_id']=false;
$xsl_catalog='МагазинКаталогТоваровПОИСК';
$external_propertys['extsearch']= http_build_query($_GET);
if($_GET['year']!=0) {
if (!array_key_exists("sql_external_select", $param))
{ $param['sql_external_select'] = ""; }
$param['sql_external_select'] .= ', COUNT(t2.shop_items_catalog_item_id) as count ';
if (!array_key_exists("sql_from", $param))
{ $param['sql_from'] = ""; }
$param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table as t2 ON shop_items_catalog_table.shop_items_catalog_item_id = t2.shop_items_catalog_modification_id AND t2.shop_items_catalog_is_active = 1 ';
if (!array_key_exists("sql_group_by", $param))
{ $param['sql_group_by'] = ' GROUP BY shop_items_catalog_item_id '; }
if (!array_key_exists("sql_having", $param))
{ $param['sql_having'] = ' HAVING count = 0 '; }
else { $param['sql_having'] .= ' and count = 0 '; } }
if($_GET['year']==0)
$param['sql_select_modification'] = true;
}
$external_propertys['year']=to_int($_GET['year']);
$external_propertys['group']=$GLOBALS['shop_item_path']['group'];
$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);
}
}
?>
<?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;
}
function getAllSubGroups($start_groups_id, $current_shop_id, $shop, $groups =
array())
{
// получим число групп и элементов в текущей группе и ее подгруппах.
// подробнее см. API
$count_groups = $shop->GetCountItemsAndGroups($start_groups_id, $current_shop_id, false);
// если есть подгруппы
if ($count_groups['count_groups'] > 0) {
// получим ресурс с подгруппами текущей группы
$resource = $shop->GetGroups($current_shop_id, $start_groups_id);
// обработаем его
while ($row = mysql_fetch_assoc($resource)) {
// итеративно вызовем функцию getAllSubGroups на случай если у рассматриваемой группы
// тоже есть подгруппы
$groups = getAllSubGroups($row['shop_groups_id'], $current_shop_id, $shop, $groups);
// добавим в массив группу id рассматриваемой группы
$groups[] = $row['shop_groups_id'];
}
}
return $groups;
}
$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']; // корневая группа
//$param['current_group_id']=false;
/* Определяем номер элемента, с которого начинается показ в текущей группе */
$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;
$count_groups = $shop->GetCountItemsAndGroups($GLOBALS['shop_item_path']['group'],
$current_shop_id);
if($GLOBALS['shop_item_path']['group']!=0){
$current_group_row = $shop->GetGroup($GLOBALS['shop_item_path']['group']);
// если в текущей группе элементов нет, а в подгруппах есть
if ($count_groups['count_all_items'] > 0) {
// передаим в xml признак того, что вывод будет происходить из подгрупп
$external_propertys['show_items_from_subgroups'] = 1;
// если мы в корневой группе ИМ...
if ($GLOBALS['shop_item_path']['group'] == 0) {
// то проще задать current_group_id = false
// быстрее будет ;)
$param['current_group_id'] = false;
} else {
// если мы не в корне ИМ то возможны варианты:
if ($count_groups['count_groups'] > 0) {
// если у текущей группы есть подгруппы:
//то создаем массив
$groups = array();
//заполняем его деревом подгрупп
$groups = getAllSubGroups($GLOBALS['shop_item_path']['group'], $current_shop_id,
$shop);
// добавляем в массив текущую группу
$groups[] = $GLOBALS['shop_item_path']['group'];
// передаем массив с подгруппами
$param['current_group_id'] = $groups;
$param['xml_show_group_type'] = 'all';
} else {
// если мы не в корне ИМ и подгрупп нету, то ничего и не меняется :)
$param['current_group_id'] = $GLOBALS['shop_item_path']['group'];
}
}
// зададим случайную сортировку
//$param['items_field_order'] = 'RAND()';
}
}
if (to_str($_GET['search']) != "")
{
$param['sql_select_modification'] = true;
$element['type'] = 0; // 0 — основное св-во, 1 — дополнительное
$element['name'] = 'shop_items_catalog_table.shop_items_catalog_name';
$element['prefix'] = 'AND'; // префикс
$element['if'] = 'LIKE'; // Условие
$element['value'] = '%'.quote_smart(to_str ($_GET['search'])) . '%';
$element['sufix'] = '';
$param['select'][] = $element;
if(!isset($_GET['extsearch'])) {
if (!array_key_exists("sql_external_select", $param))
{ $param['sql_external_select'] = ""; }
$param['sql_external_select'] .= ', COUNT(t2.shop_items_catalog_item_id) as count ';
if (!array_key_exists("sql_from", $param))
{ $param['sql_from'] = ""; }
$param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table as t2 ON shop_items_catalog_table.shop_items_catalog_item_id = t2.shop_items_catalog_modification_id AND t2.shop_items_catalog_is_active = 1 ';
if (!array_key_exists("sql_group_by", $param))
{ $param['sql_group_by'] = ' GROUP BY shop_items_catalog_item_id '; }
if (!array_key_exists("sql_having", $param))
{ $param['sql_having'] = ' HAVING count = 0 '; }
else { $param['sql_having'] .= ' and count = 0 '; }
}
$external_propertys['names'] = to_str($_GET['search']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$xsl_catalog='МагазинКаталогТоваровПОИСК';
$param['current_group_id']=false;
}
if(isset($_GET['extsearch']))
{
$param['current_group_id']=false;
$param['sql_select_modification'] = false;
$pref='AND (';
$suf='';
$k=0;
if(to_int($_GET['mark'])>0) {
$res=mysql_query("select shop_list_of_properties_table.* from lists_items_table inner join shop_list_of_properties_table on shop_list_of_properties_table.shop_list_of_properties_name=lists_items_table.lists_items_value and lists_items_table.lists_id=18 and lists_items_table.lists_items_id='{$_GET['mark']}'");
$row=mysql_fetch_assoc($res);
$external_propertys['id_model']=to_int($_GET['mark']);
$external_propertys['id']=$row['shop_list_of_properties_id'];
$k++;
$pref='OR';
$suf=' )';
// Ограничение по цвету
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] = 133;
$element['prefix'] = ' AND ('; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['mark']); //
if(to_int($_GET['model'])==0 and to_int($_GET['year'])==0 and empty($_GET['group']))
$element['sufix'] = ' )';
else
$element['sufix'] = '';
$param['select'][] = $element;
}
$model= to_int($_GET['model']);
if($model>0) {
$k++;
$res=mysql_query("select p.* from lists_table as l inner join lists_items_table as li on l.lists_id=li.lists_id and li.lists_items_id={$model} inner join shop_list_of_properties_table as p on p.shop_list_of_properties_name=l.lists_name and p.shop_shops_id=3");
$row=mysql_fetch_assoc($res);
if(to_int($_GET['year'])>0 or !empty($_GET['group']))
$suf='';
// Ограничение по флажку
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =$row['shop_list_of_properties_id'];
$element['prefix'] = $pref; // префикс
$element['if'] = '='; // Условие
$element['value'] =$model; //
$element['sufix'] = $suf;
$param['select'][] = $element;
}
if(to_int($_GET['year'])>0) {
$k++;
if(empty($_GET['group']))
$suf=' )';
else $suf='';
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =138;
$element['if'] = '='; // Условие
$element['prefix'] = $pref; // префикс
$element['value'] =to_int($_GET['year']);
$element['sufix'] = $suf;
$param['select'][] = $element;
}
if(!empty($_GET['group']))
{
$k++;
if(count($_GET['group'])>1) {
$c=count($_GET['group']);
$i=1;
$v='';
foreach($_GET['group'] as $val) {
if($i==1) {
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$pref=' AND (';
else
$pref='OR (';
$suf='';
}
elseif($c==$i) {
$pref='OR';
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$suf=')';
else
$suf=') )'; }
else
{
$suf='';
$pref='OR';
}
$i++;
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =217;
$element['prefix'] = $pref; // префикс
$element['if'] = '='; // Условие
$element['value'] =$val;
$element['sufix'] =$suf;
$param['select'][] = $element; }
}
else
{
$suf=' )';
$element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['property_id'] =217;
$element['if'] = '='; // Условие
if($_GET['mark']==0 and $_GET['model']==0 and $_GET['year']==0)
$element['prefix'] = 'AND (';
else
$element['prefix'] = 'OR';
$element['value'] =to_int($_GET['group'][0]);
$element['sufix'] = $suf;
$param['select'][] = $element;
}
}
if($k>1) {
$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) = {$k}";
}
$param['current_group_id']=false;
$xsl_catalog='МагазинКаталогТоваровПОИСК';
$external_propertys['extsearch']= http_build_query($_GET);
if($_GET['year']!=0) {
if (!array_key_exists("sql_external_select", $param))
{ $param['sql_external_select'] = ""; }
$param['sql_external_select'] .= ', COUNT(t2.shop_items_catalog_item_id) as count ';
if (!array_key_exists("sql_from", $param))
{ $param['sql_from'] = ""; }
$param['sql_from'] .= ' LEFT JOIN shop_items_catalog_table as t2 ON shop_items_catalog_table.shop_items_catalog_item_id = t2.shop_items_catalog_modification_id AND t2.shop_items_catalog_is_active = 1 ';
if (!array_key_exists("sql_group_by", $param))
{ $param['sql_group_by'] = ' GROUP BY shop_items_catalog_item_id '; }
if (!array_key_exists("sql_having", $param))
{ $param['sql_having'] = ' HAVING count = 0 '; }
else { $param['sql_having'] .= ' and count = 0 '; } }
if($_GET['year']==0)
$param['sql_select_modification'] = true;
}
$external_propertys['year']=to_int($_GET['year']);
$external_propertys['group']=$GLOBALS['shop_item_path']['group'];
$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);
}
}
?>
Если у Вас коммерческая система направьте запрос в поддержку, посмотрим на месте.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Авторизация