Контроллеры в клиентском разделе
Kotoff писал(а):
Большое спс!!! Я готов оплатить вам 500 руб. за помощь (скиньте вмр кошелек)
Большое спс!!! Я готов оплатить вам 500 руб. за помощь (скиньте вмр кошелек)
ipsus, мои актуальные платежные реквизиты здесь
Хотя написанный мною код столько не стоит
Хотя написанный мною код столько не стоит

Заказов не беру. Консультирую редко.
Kotoff писал(а):
Спасибо, отправил. Дело не в тогм сколько стоит, дело в том как быстро помогли! Спасибо еще раз!
Спасибо, отправил. Дело не в тогм сколько стоит, дело в том как быстро помогли! Спасибо еще раз!
ipsus писал(а):
дело в том как быстро помогли!
Тоже, кстати, чистая случайность.
Заказов не беру. Консультирую редко.
HostCMS писал(а):
Подскажите пожалуйста, на каком этапе (в коде какого документ/типовой страницы/чего угодно) происходит объединение таблиц) Или какие операторы/методы там используются, по ним сам найду и разберусь)
TemaLesnik,
все там просто, откройте таблицы, они одинаковые. Может вы просто с таблицей property_value_floats не объединяете.
все там просто, откройте таблицы, они одинаковые. Может вы просто с таблицей property_value_floats не объединяете.
Подскажите пожалуйста, на каком этапе (в коде какого документ/типовой страницы/чего угодно) происходит объединение таблиц) Или какие операторы/методы там используются, по ним сам найду и разберусь)
TemaLesnik,
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?
HostCMS писал(а):
КОД:
Макет: (Несущественная разметка в приведённом ниже коде удалена)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- Стандарт -->
<!-- Главный макет сайта -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Скрипты -->
<!-- Мета -->
<!-- Стили -->
</head>
<body>
<div style="width: 80%; max-width:980px; margin: 0 auto;">
<div class="header">
<?php // Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('Верхнее меню'))
->menu(1)
->show();
?>
<!-- Вывод меню с категориями -->
<div id="shopCategoryMenu">
<!-- Вывод меню с категориями -->
</div>
<div class="content">
<?php //Вызов шаблона для текущей страницы
Core_Page::instance()->execute();
?>
</div>
<div id="footer">
<p align="right"><a href="http://www.hostcms.ru" target="_blank">Система управления сайтом Host CMS</a></p>
</div>
</div>
</body>
</html>
Код типовой динамической страницы (Интернет магазин).
Настройки типовой динамической страницы:
TemaLesnik,
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?
Тип свойства - число с плавающей точкой ("11" в таблице "properties"

Я не знаю, где конкретно в коде вызывается контроллер, поэтому приведу код (в конце сообщения), который относится к интернет магазину.
При попытке заменить
$element['sufix'] = "AND property_value_ints.value <= $value";
на
$element['sufix'] = "AND property_value_floats.value <= $value";
Выдаёт ошибку
Цитата:
Exception: Query error 1054: Unknown column 'PROPERTY_VALUE_FLOATS.VALUE' in 'where clause'. Query: SELECT DISTINCT SQL_CALC_FOUND_ROWS
КОД:
Макет: (Несущественная разметка в приведённом ниже коде удалена)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- Стандарт -->
<!-- Главный макет сайта -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Скрипты -->
<!-- Мета -->
<!-- Стили -->
</head>
<body>
<div style="width: 80%; max-width:980px; margin: 0 auto;">
<div class="header">
<?php // Верхнее меню
$Structure_Controller_Show = new Structure_Controller_Show(
Core_Entity::factory('Site', CURRENT_SITE));
$Structure_Controller_Show->xsl(Core_Entity::factory('Xsl')
->getByName('Верхнее меню'))
->menu(1)
->show();
?>
<!-- Вывод меню с категориями -->
<div id="shopCategoryMenu">
<!-- Вывод меню с категориями -->
</div>
<div class="content">
<?php //Вызов шаблона для текущей страницы
Core_Page::instance()->execute();
?>
</div>
<div id="footer">
<p align="right"><a href="http://www.hostcms.ru" target="_blank">Система управления сайтом Host CMS</a></p>
</div>
</div>
</body>
</html>
Код типовой динамической страницы (Интернет магазин).
<?php
// КОД ТИПОВОЙ ДИНАМИЧЕСКОЙ СТРАНИЦЫ "ИНТЕРНЕТ МАГАЗИН"
function SetGroups($mas_groups, $set)
{
$mas_groups = Core_Type_Conversion::toArray($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 = Core_Type_Conversion::toStr($GLOBALS['LA']['shopXsl']);
$xsl_item = Core_Type_Conversion::toStr($GLOBALS['LA']['shopItemXsl']);
$current_shop_id = Core_Type_Conversion::toInt($GLOBALS['LA']['shopId']);
$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']))
{
/* Проверяем CAPCHA*/
$Captcha = new Captcha();
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
$xmlData .= '<document>' . "\n";
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(Core_Type_Conversion::toStr($_POST['captcha_key']), Core_Type_Conversion::toStr($_POST['captcha_keystring'])))
{
$param['shop_items_catalog_item_id'] = $GLOBALS['shop_item_path']['item'];
$param['shop_comment_user_name'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_name']);
$param['shop_comment_user_email'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_email']);
$param['shop_comment_subject'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_subject']);
$param['shop_comment_text'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_text']);
$param['shop_comment_grade'] = Core_Type_Conversion::toInt($_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'] = Core_Type_Conversion::toInt($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 (Core_Type_Conversion::toStr($GLOBALS['LA']['addCommentAdminMailXsl']) != '')
{
// Формируем XML для комментария
$xmlData .= $shop->GenXml4Comment($shop_comment_id);
$xmlData .= '</document>' . "\n";
$xsl = new xsl();
// Формируем текст письма администратору
$message = $xsl->build($xmlData, $GLOBALS['LA']['addCommentAdminMailXsl']);
// Формат письма - текст
if (Core_Type_Conversion::toInt($GLOBALS['LA']['commentMailNoticeType']) == 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 = Core_Type_Conversion::toStr($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(Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_name']));
$external_propertys['shop_comment_user_email'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_email']));
$external_propertys['shop_comment_subject'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_subject']));
$external_propertys['shop_comment_text'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_text']));
$external_propertys['shop_comment_grade'] = Core_Type_Conversion::toInt($_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 = Core_Type_Conversion::toStr($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;
}
/* Ограничиваем по производителю */
if (Core_Type_Conversion::toInt($_GET['producer_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_producer_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = Core_Type_Conversion::toInt($_GET['producer_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['producer_id'] = Core_Type_Conversion::toInt($_GET['producer_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по продавцу */
if (Core_Type_Conversion::toInt($_GET['saller_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_seller_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = Core_Type_Conversion::toInt($_GET['saller_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['saller_id'] = Core_Type_Conversion::toInt($_GET['saller_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
$price_from = str_replace(',', '.', Core_Type_Conversion::toFloat($_GET['price_from']));
/* Ограничиваем по цене ОТ */
if ($price_from > 0)
{
$external_propertys['price_from'] = $price_from;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
$price_to = str_replace(',', '.', Core_Type_Conversion::toFloat($_GET['price_to']));
/* Ограничиваем по цене ДО */
if ($price_to > 0)
{
$external_propertys['price_to'] = $price_to;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Число элементов на странице */
$on_page = Core_Type_Conversion::toInt($_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) && Core_Type_Conversion::toInt($regs[1]) > 1)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
}
else
{
$items_begin = 0;
}
$param['items_begin'] = $items_begin;
/* Направление сортировки, 0 - по-возрастанию, 1 - по-убыванию */
$order_direction = Core_Type_Conversion::toInt($_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 = Core_Type_Conversion::toInt($_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'] = '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 = 'price';
if(isset($param['sql_external_select']))
{
$param['sql_external_select'] .= ', shop_discounts.percent';
}
else
{
$param['sql_external_select'] = ', shop_discounts.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.shop_currency_id = {$currency_row['shop_currency_id']}, IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * $currency_coefficient / 100, shop_items.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_discounts ON (shop_items.id = shop_item_discounts.id) LEFT JOIN shop_discounts ON (shop_item_discounts.id = shop_discounts.id AND (shop_discounts.end_datetime >= '$current_date' OR shop_discounts.end_datetime ='0000-00-00 00:00:00') AND shop_discounts.start_datetime <= '$current_date')";
}
else
{
$param['sql_from'] = "LEFT JOIN shop_item_discounts ON (shop_items.id = shop_item_discounts.id) LEFT JOIN shop_discounts ON (shop_item_discounts.id = shop_discounts.id AND (shop_discounts.end_datetime >= '$current_date' OR shop_discounts.end_datetime ='0000-00-00 00:00:00') AND shop_discounts.start_datetime <= '$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);
print_r("Количество свойств: ".$count_properties);
// Массив идентификаторов доп. свойств, для которых задан тип отображения "Список - флажками"
$mas_key_list_checkbox = array();
print_r("<ul>");
for ($i = 0; $i < $count_properties; $i++)
{
$msg="";//Дебаг
$row = mysql_fetch_assoc($resource_properties);
print_r("<li><span class='spoilerTitle'>Тип отображения:".$row['shop_list_of_properties_show_kind']."</span>");
print_r("<div class='spoilerBody' folded='folded'>ROW:");
print_r($row);
$element['value'] = 0;
switch ($row['shop_list_of_properties_show_kind'])
{
case 1: // Поле ввода
case 2: // Список - списком
case 3: // Список - переключателями
case 5: // Флажок
{
/* Выбираем режим отображения */
$get_param = 'property_' . $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 || $row['shop_list_of_properties_show_kind'] == 2) //Все типа 0 или с флажком "отображать"
{
//$msg.="<p>Тип 0 или вид 1 или 2.</p>";//Дебаг
if (Core_Type_Conversion::toStr($_GET[$get_param]) !== '')
{
$element['value'] = quote_smart(Core_Type_Conversion::toStr($_GET[$get_param]));
$external_propertys['property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '=' . $element['value'];
//$element['value'] = '%' . $element['value'] . '%';
}
}
// Флажок
elseif($row['shop_list_of_properties_type'] == 7)
{
//$msg.="<p>Тип 7.</p>";//Дебаг
$element['value'] = 1;
$external_propertys['property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '=' . $element['value'];
}
else
{
//$msg.="<p>Числовая интерпретация ".$get_param."(".$_GET[$get_param].")=".Core_Type_Conversion::toInt($_GET[$get_param])."</p>";//Дебаг
if (Core_Type_Conversion::toInt($_GET[$get_param]) > 0)
{
$element['value'] = Core_Type_Conversion::toInt($_GET[$get_param]);
$external_propertys['property_'.Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_'.Core_Type_Conversion::toInt($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
}
if ($element['value'])
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$element['property_id'] = Core_Type_Conversion::toInt($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;
}
/*if (isset($_GET[$get_param]))
{
$msg.="<p>Параметр ".print_r($get_param,true).": (установлен) = ".print_r($_GET[$get_param],true)."</p>";
}
else
{
$msg.="<p>Параметр ".print_r($get_param,true).": (не установлен)</p>";
}
$msg.="<p>Тип: ".print_r($row['shop_list_of_properties_type'],true)."</p>";//Дебаг
$msg.="<p>Вид: ".print_r($row['shop_list_of_properties_show_kind'],true)."</p>";
$msg.="<p>XML свойства: ".print_r($property_xml,true)."</p>";
$msg.="<p>Список типов свойств".print_r($row['shop_list_of_properties_type'],true)."</p>";
$msg.="<p>element['value']: ".print_r($element['value'],true)."</p>";
$msg.="<p>element['type']".print_r($element['type'],true)."</p>";
$msg.="<p>element['if']".print_r($element['if'],true)."</p>";
$msg.="<p>element['sufix']".print_r($element['sufix'],true)."</p>";
$msg.="<p>element['prefix']".print_r($element['prefix'],true)."</p>";
echo sprintf('<script type="text/javascript">
var win=window.open("","popup","width=500,height=200,left=300,top=400,menubar=0,resizable=0,scrollbars=0,titlebar=0,toolbar=0",true);
win.document.writeln("%s");
</script>',$msg);*/
}
case 4: // Тип отображения - список флажками
{
// Модуль "Списки" подключен и значенич доп. свойства не обработаны ранее
if (class_exists('lists') && !in_array($row['lists_id'], $mas_key_list_checkbox))
{
$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_' . $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'] = Core_Type_Conversion::toInt($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_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($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_' . $row['shop_list_of_properties_id'] . '_from';
$get_param_to = 'property_' . $row['shop_list_of_properties_id'] . '_to';
print_r("</br>От: ");
print_r($get_param_from);
print_r("</br>До: ");
print_r($get_param_to);
if (isset($_GET[$get_param_from]) && mb_strlen($_GET[$get_param_from]) > 0)
{
$value = floatval($_GET[$get_param_from]);
print_r("</br>Значение: ");
print_r($value);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$external_propertys['property_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']) . '_from'] = $value;
$property_xml .= '&property_' . Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']).'_from=' . $value;
print_r("</br>external_propertys: ");
print_r($external_propertys);
print_r("</br>property_xml: ");
print_r($property_xml);
$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
$element['property_id'] = Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']);
$element['if'] = 'IS NOT NULL'; /* Условие */
$element['value'] = '';
print_r("</br>element: ");
print_r($element);
$property_row = $shop->GetPropretyOfItems($element['property_id']);
print_r("</br>property_row (shop->GetPropretyOfItems(");
print_r($element['property_id']);
print_r(")): ");
print_r($property_row);
print_r("</br>property_row['shop_list_of_properties_type']: ");
print_r($property_row['shop_list_of_properties_type']);
if($property_row['shop_list_of_properties_type'] == 2)
{
$lists_id = Core_Type_Conversion::ToFloat($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 property_value_ints.value IN ('.implode(',', $in).') ';
}
else
{
$element['sufix'] = "";
}
}
else
{
print_r("</br>Тип свойства не равен 2, поэтому AND property_value_ints.value >= $value");
$element['sufix'] = " AND property_value_ints.value >= $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_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']) . '_to'] = $value;
$property_xml .= '&property_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']).'_to='.$value;
$element['property_id'] = Core_Type_Conversion::ToFloat($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 = Core_Type_Conversion::ToFloat($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 property_value_ints.value IN ('.implode(',', $in).') ';
}
else
{
$element['sufix'] = "";
}
}
else
{
print_r("</br>Тип свойства не равен 2, поэтому AND property_value_ints.value <= $value");
$element['sufix'] = "AND property_value_ints.value <= $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_' . $row['shop_list_of_properties_id']]) && is_array($_GET['property_' . $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_' . $row['shop_list_of_properties_id']]))
{
if ($count_condition || $k > 0)
{
$element['prefix'] = ' OR '; /* префикс */
}
else
{
$element['prefix'] = ' ';
}
$element['property_id'] = Core_Type_Conversion::toInt($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_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id'] . '=' . $element['value'];
$k++;
}
}
// Задан фильтр по одному из значений списка
if ($k > 0)
{
$count_condition++;
}
}
break;
}
}
print_r("</div></li></br>");
}
print_r("</ul>");
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.id';
$param['sql_having'] = "HAVING COUNT(shop_item_properties.id) = {$count_condition}";
}
else
{
$param['sql_having'] = 'HAVING 1 ';
}
$element['sufix'] = ' ) ';
/* Добавляем в общий список условий */
$param['select'][] = $element;
print_r(str_replace("[","<br/>[",print_r($param,true)));
}
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'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['prefix'] = ' AND';
$element['property_id'] = 40;
$element['if'] = '=';
$element['value'] = 'Угловая'; // Значение поля (или параметра)
$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'] = false;
// Запрещаем передачу в XML свойств групп
$param['xml_show_group_property'] = false;
$param['xml_show_group_type'] = 'all';
$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);
}
}
?>
// КОД ТИПОВОЙ ДИНАМИЧЕСКОЙ СТРАНИЦЫ "ИНТЕРНЕТ МАГАЗИН"
function SetGroups($mas_groups, $set)
{
$mas_groups = Core_Type_Conversion::toArray($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 = Core_Type_Conversion::toStr($GLOBALS['LA']['shopXsl']);
$xsl_item = Core_Type_Conversion::toStr($GLOBALS['LA']['shopItemXsl']);
$current_shop_id = Core_Type_Conversion::toInt($GLOBALS['LA']['shopId']);
$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']))
{
/* Проверяем CAPCHA*/
$Captcha = new Captcha();
$xmlData = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
$xmlData .= '<document>' . "\n";
if ($site_user_id > 0
|| $Captcha->ValidCaptcha(Core_Type_Conversion::toStr($_POST['captcha_key']), Core_Type_Conversion::toStr($_POST['captcha_keystring'])))
{
$param['shop_items_catalog_item_id'] = $GLOBALS['shop_item_path']['item'];
$param['shop_comment_user_name'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_name']);
$param['shop_comment_user_email'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_email']);
$param['shop_comment_subject'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_subject']);
$param['shop_comment_text'] = Core_Type_Conversion::toStr($_REQUEST['shop_comment_text']);
$param['shop_comment_grade'] = Core_Type_Conversion::toInt($_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'] = Core_Type_Conversion::toInt($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 (Core_Type_Conversion::toStr($GLOBALS['LA']['addCommentAdminMailXsl']) != '')
{
// Формируем XML для комментария
$xmlData .= $shop->GenXml4Comment($shop_comment_id);
$xmlData .= '</document>' . "\n";
$xsl = new xsl();
// Формируем текст письма администратору
$message = $xsl->build($xmlData, $GLOBALS['LA']['addCommentAdminMailXsl']);
// Формат письма - текст
if (Core_Type_Conversion::toInt($GLOBALS['LA']['commentMailNoticeType']) == 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 = Core_Type_Conversion::toStr($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(Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_name']));
$external_propertys['shop_comment_user_email'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_user_email']));
$external_propertys['shop_comment_subject'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_subject']));
$external_propertys['shop_comment_text'] = strip_tags(Core_Type_Conversion::toStr($_REQUEST['shop_comment_text']));
$external_propertys['shop_comment_grade'] = Core_Type_Conversion::toInt($_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 = Core_Type_Conversion::toStr($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;
}
/* Ограничиваем по производителю */
if (Core_Type_Conversion::toInt($_GET['producer_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_producer_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = Core_Type_Conversion::toInt($_GET['producer_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['producer_id'] = Core_Type_Conversion::toInt($_GET['producer_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по продавцу */
if (Core_Type_Conversion::toInt($_GET['saller_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_seller_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = Core_Type_Conversion::toInt($_GET['saller_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['saller_id'] = Core_Type_Conversion::toInt($_GET['saller_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
$price_from = str_replace(',', '.', Core_Type_Conversion::toFloat($_GET['price_from']));
/* Ограничиваем по цене ОТ */
if ($price_from > 0)
{
$external_propertys['price_from'] = $price_from;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
$price_to = str_replace(',', '.', Core_Type_Conversion::toFloat($_GET['price_to']));
/* Ограничиваем по цене ДО */
if ($price_to > 0)
{
$external_propertys['price_to'] = $price_to;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Число элементов на странице */
$on_page = Core_Type_Conversion::toInt($_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) && Core_Type_Conversion::toInt($regs[1]) > 1)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
}
else
{
$items_begin = 0;
}
$param['items_begin'] = $items_begin;
/* Направление сортировки, 0 - по-возрастанию, 1 - по-убыванию */
$order_direction = Core_Type_Conversion::toInt($_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 = Core_Type_Conversion::toInt($_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'] = '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 = 'price';
if(isset($param['sql_external_select']))
{
$param['sql_external_select'] .= ', shop_discounts.percent';
}
else
{
$param['sql_external_select'] = ', shop_discounts.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.shop_currency_id = {$currency_row['shop_currency_id']}, IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * $currency_coefficient / 100, shop_items.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_discounts ON (shop_items.id = shop_item_discounts.id) LEFT JOIN shop_discounts ON (shop_item_discounts.id = shop_discounts.id AND (shop_discounts.end_datetime >= '$current_date' OR shop_discounts.end_datetime ='0000-00-00 00:00:00') AND shop_discounts.start_datetime <= '$current_date')";
}
else
{
$param['sql_from'] = "LEFT JOIN shop_item_discounts ON (shop_items.id = shop_item_discounts.id) LEFT JOIN shop_discounts ON (shop_item_discounts.id = shop_discounts.id AND (shop_discounts.end_datetime >= '$current_date' OR shop_discounts.end_datetime ='0000-00-00 00:00:00') AND shop_discounts.start_datetime <= '$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);
print_r("Количество свойств: ".$count_properties);
// Массив идентификаторов доп. свойств, для которых задан тип отображения "Список - флажками"
$mas_key_list_checkbox = array();
print_r("<ul>");
for ($i = 0; $i < $count_properties; $i++)
{
$msg="";//Дебаг
$row = mysql_fetch_assoc($resource_properties);
print_r("<li><span class='spoilerTitle'>Тип отображения:".$row['shop_list_of_properties_show_kind']."</span>");
print_r("<div class='spoilerBody' folded='folded'>ROW:");
print_r($row);
$element['value'] = 0;
switch ($row['shop_list_of_properties_show_kind'])
{
case 1: // Поле ввода
case 2: // Список - списком
case 3: // Список - переключателями
case 5: // Флажок
{
/* Выбираем режим отображения */
$get_param = 'property_' . $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 || $row['shop_list_of_properties_show_kind'] == 2) //Все типа 0 или с флажком "отображать"
{
//$msg.="<p>Тип 0 или вид 1 или 2.</p>";//Дебаг
if (Core_Type_Conversion::toStr($_GET[$get_param]) !== '')
{
$element['value'] = quote_smart(Core_Type_Conversion::toStr($_GET[$get_param]));
$external_propertys['property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '=' . $element['value'];
//$element['value'] = '%' . $element['value'] . '%';
}
}
// Флажок
elseif($row['shop_list_of_properties_type'] == 7)
{
//$msg.="<p>Тип 7.</p>";//Дебаг
$element['value'] = 1;
$external_propertys['property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '=' . $element['value'];
}
else
{
//$msg.="<p>Числовая интерпретация ".$get_param."(".$_GET[$get_param].")=".Core_Type_Conversion::toInt($_GET[$get_param])."</p>";//Дебаг
if (Core_Type_Conversion::toInt($_GET[$get_param]) > 0)
{
$element['value'] = Core_Type_Conversion::toInt($_GET[$get_param]);
$external_propertys['property_'.Core_Type_Conversion::toInt($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_'.Core_Type_Conversion::toInt($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
}
if ($element['value'])
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$element['property_id'] = Core_Type_Conversion::toInt($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;
}
/*if (isset($_GET[$get_param]))
{
$msg.="<p>Параметр ".print_r($get_param,true).": (установлен) = ".print_r($_GET[$get_param],true)."</p>";
}
else
{
$msg.="<p>Параметр ".print_r($get_param,true).": (не установлен)</p>";
}
$msg.="<p>Тип: ".print_r($row['shop_list_of_properties_type'],true)."</p>";//Дебаг
$msg.="<p>Вид: ".print_r($row['shop_list_of_properties_show_kind'],true)."</p>";
$msg.="<p>XML свойства: ".print_r($property_xml,true)."</p>";
$msg.="<p>Список типов свойств".print_r($row['shop_list_of_properties_type'],true)."</p>";
$msg.="<p>element['value']: ".print_r($element['value'],true)."</p>";
$msg.="<p>element['type']".print_r($element['type'],true)."</p>";
$msg.="<p>element['if']".print_r($element['if'],true)."</p>";
$msg.="<p>element['sufix']".print_r($element['sufix'],true)."</p>";
$msg.="<p>element['prefix']".print_r($element['prefix'],true)."</p>";
echo sprintf('<script type="text/javascript">
var win=window.open("","popup","width=500,height=200,left=300,top=400,menubar=0,resizable=0,scrollbars=0,titlebar=0,toolbar=0",true);
win.document.writeln("%s");
</script>',$msg);*/
}
case 4: // Тип отображения - список флажками
{
// Модуль "Списки" подключен и значенич доп. свойства не обработаны ранее
if (class_exists('lists') && !in_array($row['lists_id'], $mas_key_list_checkbox))
{
$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_' . $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'] = Core_Type_Conversion::toInt($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_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($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_' . $row['shop_list_of_properties_id'] . '_from';
$get_param_to = 'property_' . $row['shop_list_of_properties_id'] . '_to';
print_r("</br>От: ");
print_r($get_param_from);
print_r("</br>До: ");
print_r($get_param_to);
if (isset($_GET[$get_param_from]) && mb_strlen($_GET[$get_param_from]) > 0)
{
$value = floatval($_GET[$get_param_from]);
print_r("</br>Значение: ");
print_r($value);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$external_propertys['property_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']) . '_from'] = $value;
$property_xml .= '&property_' . Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']).'_from=' . $value;
print_r("</br>external_propertys: ");
print_r($external_propertys);
print_r("</br>property_xml: ");
print_r($property_xml);
$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
$element['property_id'] = Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']);
$element['if'] = 'IS NOT NULL'; /* Условие */
$element['value'] = '';
print_r("</br>element: ");
print_r($element);
$property_row = $shop->GetPropretyOfItems($element['property_id']);
print_r("</br>property_row (shop->GetPropretyOfItems(");
print_r($element['property_id']);
print_r(")): ");
print_r($property_row);
print_r("</br>property_row['shop_list_of_properties_type']: ");
print_r($property_row['shop_list_of_properties_type']);
if($property_row['shop_list_of_properties_type'] == 2)
{
$lists_id = Core_Type_Conversion::ToFloat($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 property_value_ints.value IN ('.implode(',', $in).') ';
}
else
{
$element['sufix'] = "";
}
}
else
{
print_r("</br>Тип свойства не равен 2, поэтому AND property_value_ints.value >= $value");
$element['sufix'] = " AND property_value_ints.value >= $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_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']) . '_to'] = $value;
$property_xml .= '&property_'.Core_Type_Conversion::ToFloat($row['shop_list_of_properties_id']).'_to='.$value;
$element['property_id'] = Core_Type_Conversion::ToFloat($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 = Core_Type_Conversion::ToFloat($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 property_value_ints.value IN ('.implode(',', $in).') ';
}
else
{
$element['sufix'] = "";
}
}
else
{
print_r("</br>Тип свойства не равен 2, поэтому AND property_value_ints.value <= $value");
$element['sufix'] = "AND property_value_ints.value <= $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_' . $row['shop_list_of_properties_id']]) && is_array($_GET['property_' . $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_' . $row['shop_list_of_properties_id']]))
{
if ($count_condition || $k > 0)
{
$element['prefix'] = ' OR '; /* префикс */
}
else
{
$element['prefix'] = ' ';
}
$element['property_id'] = Core_Type_Conversion::toInt($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_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id']] = $element['value'];
$property_xml .= '&property_' . Core_Type_Conversion::toInt($row['shop_list_of_properties_id']) . '_item_id_' . $row_list_item['lists_items_id'] . '=' . $element['value'];
$k++;
}
}
// Задан фильтр по одному из значений списка
if ($k > 0)
{
$count_condition++;
}
}
break;
}
}
print_r("</div></li></br>");
}
print_r("</ul>");
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.id';
$param['sql_having'] = "HAVING COUNT(shop_item_properties.id) = {$count_condition}";
}
else
{
$param['sql_having'] = 'HAVING 1 ';
}
$element['sufix'] = ' ) ';
/* Добавляем в общий список условий */
$param['select'][] = $element;
print_r(str_replace("[","<br/>[",print_r($param,true)));
}
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'] = 1; // 0 - основное св-во, 1 - дополнительное
$element['prefix'] = ' AND';
$element['property_id'] = 40;
$element['if'] = '=';
$element['value'] = 'Угловая'; // Значение поля (или параметра)
$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'] = false;
// Запрещаем передачу в XML свойств групп
$param['xml_show_group_property'] = false;
$param['xml_show_group_type'] = 'all';
$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
/* НАСТРОЙКИ ТИПОВОЙ ДИНАМИЧЕСКОЙ СТРАНИЦЫ "ИНТЕРНЕТ МАГАЗИН"
Создаем экземпляр класса магазина (при создании устанавливаем флаг необходимости очистки cookie) */
$shop = new shop(true);
$kernel = & singleton('kernel');
$current_shop_id = Core_Type_Conversion::toInt($GLOBALS['LA']['shopId']);
// Обработка скачивания файла электронного товара
if (isset($_GET['download_file']))
{
$eitem_path = Core_Type_Conversion::toStr($_GET['download_file']);
// Получаем заказанный товар с данным путем
if ($order_item_row = $shop->GetOrderItemByPath($eitem_path))
{
// Получаем информацию о заказе
$order_row = $shop->GetOrder($order_item_row['shop_order_id']);
if ($order_row)
{
$DateClass = new DateClass();
// Проверяем, доступна ли ссылка (Ссылка доступна в течение суток после оплаты)
if ($DateClass->DateSqlToUnix($order_row['shop_order_date_of_pay']) > time() - 24 * 60 * 60)
{
// Получаем информацию об электронной сущности заказанного товара
$eitem_row = $shop->GetEitem($order_item_row['shop_eitem_id']);
if ($eitem_row['shop_eitem_filename'] != '')
{
if (class_exists('File'))
{
$File = new File();
$ext = $kernel->GetExtension($eitem_row['shop_eitem_filename']);
$file_path = CMS_FOLDER . UPLOADDIR . "shop_{$current_shop_id}/eitems/item_catalog_{$eitem_row['shop_items_catalog_item_id']}/{$eitem_row['shop_eitem_id']}.{$ext}";
if (is_file($file_path))
{
$File->Download($file_path, $eitem_row['shop_eitem_filename'], array('content_disposition' => 'attachment'));
}
unset($File);
}
}
}
}
}
}
if(preg_match("^user-(.*)^u", end($GLOBALS['URL_ARRAY']), $regs))
{
// Установка cookies для аффилиат-программы
setcookie('affiliate_name', $regs[1], time() + 31536000, '/');
$break_if_path_not_found = false;
}
else
{
$break_if_path_not_found = true;
}
// получаем для пути ассоциативный массив с id группы и id/url элемента
$GLOBALS['shop_item_path'] = $shop->GetItemPath($current_shop_id, '', $break_if_path_not_found);
/* Если путь существует */
if ($GLOBALS['shop_item_path'])
{
$group_path = '';
// получаем массив с деревом от текущей группы до корня
$mas_groups_to_root = $shop->GetShopGroupsToRoot($GLOBALS['shop_item_path']['group'], $current_shop_id);
// получаем данные о группе
$row_group = $shop->GetGroup($GLOBALS['shop_item_path']['group']);
// получаем данные из seo - полей для групп
$seo_title = trim($row_group['shop_groups_seo_title']);
$seo_description = trim($row_group['shop_groups_seo_description']);
$seo_keywords = trim($row_group['shop_groups_seo_keywords']);
// цикл по массиву с деревом для формирования пути по группам
$count_groups=count($mas_groups_to_root);
for ($i = $count_groups - 1; $i >= 0; $i--)
{
if ($i < $count_groups-1)
{
$group_path .= ' — ';
}
if (trim($mas_groups_to_root[$i]['shop_groups_seo_title'])=='')
{
$group_path .= $mas_groups_to_root[$i]['shop_groups_name'];
}
else
{
$group_path .= $mas_groups_to_root[$i]['shop_groups_seo_title'];
}
}
$item_name='';
// Если вывод информационного элемента
if ($GLOBALS['shop_item_path']['item'])
{
// получаем данные о товаре
$row_item = $shop->GetItem($GLOBALS['shop_item_path']['item']);
// имя элемента
$item_name = $row_item['shop_items_catalog_name'];
// проверяем если seo_title непустой, то в заголовок страницы подставляем его
if (trim($row_item['shop_items_catalog_seo_title'])!='')
{
$item_name = trim($row_item['shop_items_catalog_seo_title']);
}
if ($group_path != '')
{
$item_name = ' — '. $item_name;
}
}
if (isset($GLOBALS['shop_item_path']['tag_name']) && class_exists('Tag'))
{
$oTag = new Tag();
$tag_row = $oTag->GetTagByPath($GLOBALS['shop_item_path']['tag_name']);
if ($tag_row)
{
$tag_name = "Метка: {$tag_row['tag_name']}. ";
}
}
// формируем заголовок страницы
$new_title = Core_Type_Conversion::toStr($tag_name) . $group_path . $item_name;
}
else
{
// Элемент/группа не найдены, возвращаем 404 ошибку.
ShowHeader404();
// Запрещаем отдавать 200-й заголовок
if (!defined('IS_ERROR_404'))
{
define('IS_ERROR_404', true);
}
$site = & singleton('site');
$site_row = $site->GetSite(CURRENT_SITE);
if ($site_row['site_error404'])
{
$structure = & singleton('Structure');
$structure_id = intval($site_row['site_error404']);
$structure_row = $structure->GetStructureItem($structure_id);
// Если тип - страница
if ($structure_row['structure_type'] == 0)
{
$documents = & singleton('documents');
$documents_version_row = $documents->GetCurrentDocumentVersion($structure_row['documents_id']);
$documents_version_id = $documents_version_row['documents_version_id'];
// Текущая страница
$kernel->set_current_page($documents->GetDocumentVersionPath($documents_version_id));
}
elseif ($structure_row['structure_type'] == 1)
{
// Текущая страница - модуль
$kernel->set_current_page($structure->GetStructureFilesPath() . "/Structure{$structure_id}.php");
}
else
{
// Типовая динамическая страница
$lib_id = intval($structure_row['lib_id']);
// Получаем параметры типовой динамической страницы
$lib = new lib();
$GLOBALS['LA'] = $lib->LoadLibPropertiesValue($lib_id, $structure_id);
$kernel->set_current_page($lib->GetLibPath($lib_id) . "/lib_{$lib_id}.php");
}
// Шаблон вывода для страницы
$kernel->set_current_page_data_template($structure_row['data_templates_id']);
}
elseif (Core_Type_Conversion::toStr($_SERVER['REQUEST_URI']) != '/')
{
header('Location: /');
// Прекращаем выполнение
exit();
}
}
if (!empty($new_title))
{
// отображаем группу
if (!isset($row_item))
{
// Заголовок для группы задан
if (!empty($seo_title))
{
Core_Page::instance()->title($seo_title);
}
else // Описание для группы не задано
{
Core_Page::instance()->title($new_title);
}
// Описание для группы задано
if (!empty($seo_description))
{
Core_Page::instance()->description($seo_description);
}
else // Описание для группы не задано
{
Core_Page::instance()->description($new_title);
}
// Ключевые слова для группы заданы
if (!empty($seo_keywords))
{
Core_Page::instance()->keywords($seo_keywords);
}
else // Ключевые слова для группы не заданы
{
Core_Page::instance()->keywords($new_title);
}
}
else // отображаем элемент
{
// Описание для элемента задано
if (!empty($row_item['shop_items_catalog_seo_title']))
{
Core_Page::instance()->title(trim($row_item['shop_items_catalog_seo_title']));
}
else // Описание для элемента не задано
{
Core_Page::instance()->title($new_title);
}
// Описание для элемента задано
if (!empty($row_item['shop_items_catalog_seo_description']))
{
Core_Page::instance()->description(trim($row_item['shop_items_catalog_seo_description']));
}
else // Описание для элемента не задано
{
Core_Page::instance()->description($new_title);
}
// Ключевые слова для элемента заданы
if (!empty($row_item['shop_items_catalog_seo_keywords']))
{
Core_Page::instance()->keywords(trim($row_item['shop_items_catalog_seo_keywords']));
}
else // Ключевые слова для элемента не заданы
{
Core_Page::instance()->keywords($new_title);
}
}
}
/* Обработка сравнения товаров */
/* Десериализуем массив */
if (isset($_COOKIE['SHOPCOMPARE']))
{
$compare_items = @unserialize($shop->GetCookie('SHOPCOMPARE'));
$compare_items = Core_Type_Conversion::toArray($compare_items);
}
else
{
$compare_items = array();
}
/* Добавление элементов */
foreach ($_GET as $key => $value)
{
/* Выбираем из запроса товары, которые нужно добавить в список для сравнения */
if (preg_match("/compare_id_(\d*)/u", $key, $matches))
{
$compare_id = Core_Type_Conversion::toInt($matches[1]);
/* Проверяем, есть ли этот товар в кукисах для сравнения */
if (!in_array($compare_id, $compare_items))
{
/*Добавляем в массив кукисов*/
$compare_items[] = $compare_id;
}
}
}
/* Удаление выбранного товара из сравнения */
if (isset($_GET['delete_compare']))
{
foreach ($_GET as $key => $value)
{
/* Извлекаем индекс товара, который нужно удалить из сравнения и кукиса */
if (preg_match("/del_compare_id_(\d*)/u", $key, $matches))
{
$compare_id = Core_Type_Conversion::toInt($matches[1]);
$i = array_search($compare_id, $compare_items);
if ($i !== false)
{
unset($compare_items[$i]);
}
}
}
}
/* Удаление всех сравнений */
if (isset($_GET['delete_all_compare']))
{
$compare_items = array();
}
/* Устанавливаем кукисы */
if (count($compare_items) > 0)
{
$shop->SetCookie("SHOPCOMPARE", serialize($compare_items), time() + 31536000, '/');
}
else
{
$shop->SetCookie("SHOPCOMPARE", '', 0, '/');
unset($_COOKIE['SHOPCOMPARE']);
}
?>
/* НАСТРОЙКИ ТИПОВОЙ ДИНАМИЧЕСКОЙ СТРАНИЦЫ "ИНТЕРНЕТ МАГАЗИН"
Создаем экземпляр класса магазина (при создании устанавливаем флаг необходимости очистки cookie) */
$shop = new shop(true);
$kernel = & singleton('kernel');
$current_shop_id = Core_Type_Conversion::toInt($GLOBALS['LA']['shopId']);
// Обработка скачивания файла электронного товара
if (isset($_GET['download_file']))
{
$eitem_path = Core_Type_Conversion::toStr($_GET['download_file']);
// Получаем заказанный товар с данным путем
if ($order_item_row = $shop->GetOrderItemByPath($eitem_path))
{
// Получаем информацию о заказе
$order_row = $shop->GetOrder($order_item_row['shop_order_id']);
if ($order_row)
{
$DateClass = new DateClass();
// Проверяем, доступна ли ссылка (Ссылка доступна в течение суток после оплаты)
if ($DateClass->DateSqlToUnix($order_row['shop_order_date_of_pay']) > time() - 24 * 60 * 60)
{
// Получаем информацию об электронной сущности заказанного товара
$eitem_row = $shop->GetEitem($order_item_row['shop_eitem_id']);
if ($eitem_row['shop_eitem_filename'] != '')
{
if (class_exists('File'))
{
$File = new File();
$ext = $kernel->GetExtension($eitem_row['shop_eitem_filename']);
$file_path = CMS_FOLDER . UPLOADDIR . "shop_{$current_shop_id}/eitems/item_catalog_{$eitem_row['shop_items_catalog_item_id']}/{$eitem_row['shop_eitem_id']}.{$ext}";
if (is_file($file_path))
{
$File->Download($file_path, $eitem_row['shop_eitem_filename'], array('content_disposition' => 'attachment'));
}
unset($File);
}
}
}
}
}
}
if(preg_match("^user-(.*)^u", end($GLOBALS['URL_ARRAY']), $regs))
{
// Установка cookies для аффилиат-программы
setcookie('affiliate_name', $regs[1], time() + 31536000, '/');
$break_if_path_not_found = false;
}
else
{
$break_if_path_not_found = true;
}
// получаем для пути ассоциативный массив с id группы и id/url элемента
$GLOBALS['shop_item_path'] = $shop->GetItemPath($current_shop_id, '', $break_if_path_not_found);
/* Если путь существует */
if ($GLOBALS['shop_item_path'])
{
$group_path = '';
// получаем массив с деревом от текущей группы до корня
$mas_groups_to_root = $shop->GetShopGroupsToRoot($GLOBALS['shop_item_path']['group'], $current_shop_id);
// получаем данные о группе
$row_group = $shop->GetGroup($GLOBALS['shop_item_path']['group']);
// получаем данные из seo - полей для групп
$seo_title = trim($row_group['shop_groups_seo_title']);
$seo_description = trim($row_group['shop_groups_seo_description']);
$seo_keywords = trim($row_group['shop_groups_seo_keywords']);
// цикл по массиву с деревом для формирования пути по группам
$count_groups=count($mas_groups_to_root);
for ($i = $count_groups - 1; $i >= 0; $i--)
{
if ($i < $count_groups-1)
{
$group_path .= ' — ';
}
if (trim($mas_groups_to_root[$i]['shop_groups_seo_title'])=='')
{
$group_path .= $mas_groups_to_root[$i]['shop_groups_name'];
}
else
{
$group_path .= $mas_groups_to_root[$i]['shop_groups_seo_title'];
}
}
$item_name='';
// Если вывод информационного элемента
if ($GLOBALS['shop_item_path']['item'])
{
// получаем данные о товаре
$row_item = $shop->GetItem($GLOBALS['shop_item_path']['item']);
// имя элемента
$item_name = $row_item['shop_items_catalog_name'];
// проверяем если seo_title непустой, то в заголовок страницы подставляем его
if (trim($row_item['shop_items_catalog_seo_title'])!='')
{
$item_name = trim($row_item['shop_items_catalog_seo_title']);
}
if ($group_path != '')
{
$item_name = ' — '. $item_name;
}
}
if (isset($GLOBALS['shop_item_path']['tag_name']) && class_exists('Tag'))
{
$oTag = new Tag();
$tag_row = $oTag->GetTagByPath($GLOBALS['shop_item_path']['tag_name']);
if ($tag_row)
{
$tag_name = "Метка: {$tag_row['tag_name']}. ";
}
}
// формируем заголовок страницы
$new_title = Core_Type_Conversion::toStr($tag_name) . $group_path . $item_name;
}
else
{
// Элемент/группа не найдены, возвращаем 404 ошибку.
ShowHeader404();
// Запрещаем отдавать 200-й заголовок
if (!defined('IS_ERROR_404'))
{
define('IS_ERROR_404', true);
}
$site = & singleton('site');
$site_row = $site->GetSite(CURRENT_SITE);
if ($site_row['site_error404'])
{
$structure = & singleton('Structure');
$structure_id = intval($site_row['site_error404']);
$structure_row = $structure->GetStructureItem($structure_id);
// Если тип - страница
if ($structure_row['structure_type'] == 0)
{
$documents = & singleton('documents');
$documents_version_row = $documents->GetCurrentDocumentVersion($structure_row['documents_id']);
$documents_version_id = $documents_version_row['documents_version_id'];
// Текущая страница
$kernel->set_current_page($documents->GetDocumentVersionPath($documents_version_id));
}
elseif ($structure_row['structure_type'] == 1)
{
// Текущая страница - модуль
$kernel->set_current_page($structure->GetStructureFilesPath() . "/Structure{$structure_id}.php");
}
else
{
// Типовая динамическая страница
$lib_id = intval($structure_row['lib_id']);
// Получаем параметры типовой динамической страницы
$lib = new lib();
$GLOBALS['LA'] = $lib->LoadLibPropertiesValue($lib_id, $structure_id);
$kernel->set_current_page($lib->GetLibPath($lib_id) . "/lib_{$lib_id}.php");
}
// Шаблон вывода для страницы
$kernel->set_current_page_data_template($structure_row['data_templates_id']);
}
elseif (Core_Type_Conversion::toStr($_SERVER['REQUEST_URI']) != '/')
{
header('Location: /');
// Прекращаем выполнение
exit();
}
}
if (!empty($new_title))
{
// отображаем группу
if (!isset($row_item))
{
// Заголовок для группы задан
if (!empty($seo_title))
{
Core_Page::instance()->title($seo_title);
}
else // Описание для группы не задано
{
Core_Page::instance()->title($new_title);
}
// Описание для группы задано
if (!empty($seo_description))
{
Core_Page::instance()->description($seo_description);
}
else // Описание для группы не задано
{
Core_Page::instance()->description($new_title);
}
// Ключевые слова для группы заданы
if (!empty($seo_keywords))
{
Core_Page::instance()->keywords($seo_keywords);
}
else // Ключевые слова для группы не заданы
{
Core_Page::instance()->keywords($new_title);
}
}
else // отображаем элемент
{
// Описание для элемента задано
if (!empty($row_item['shop_items_catalog_seo_title']))
{
Core_Page::instance()->title(trim($row_item['shop_items_catalog_seo_title']));
}
else // Описание для элемента не задано
{
Core_Page::instance()->title($new_title);
}
// Описание для элемента задано
if (!empty($row_item['shop_items_catalog_seo_description']))
{
Core_Page::instance()->description(trim($row_item['shop_items_catalog_seo_description']));
}
else // Описание для элемента не задано
{
Core_Page::instance()->description($new_title);
}
// Ключевые слова для элемента заданы
if (!empty($row_item['shop_items_catalog_seo_keywords']))
{
Core_Page::instance()->keywords(trim($row_item['shop_items_catalog_seo_keywords']));
}
else // Ключевые слова для элемента не заданы
{
Core_Page::instance()->keywords($new_title);
}
}
}
/* Обработка сравнения товаров */
/* Десериализуем массив */
if (isset($_COOKIE['SHOPCOMPARE']))
{
$compare_items = @unserialize($shop->GetCookie('SHOPCOMPARE'));
$compare_items = Core_Type_Conversion::toArray($compare_items);
}
else
{
$compare_items = array();
}
/* Добавление элементов */
foreach ($_GET as $key => $value)
{
/* Выбираем из запроса товары, которые нужно добавить в список для сравнения */
if (preg_match("/compare_id_(\d*)/u", $key, $matches))
{
$compare_id = Core_Type_Conversion::toInt($matches[1]);
/* Проверяем, есть ли этот товар в кукисах для сравнения */
if (!in_array($compare_id, $compare_items))
{
/*Добавляем в массив кукисов*/
$compare_items[] = $compare_id;
}
}
}
/* Удаление выбранного товара из сравнения */
if (isset($_GET['delete_compare']))
{
foreach ($_GET as $key => $value)
{
/* Извлекаем индекс товара, который нужно удалить из сравнения и кукиса */
if (preg_match("/del_compare_id_(\d*)/u", $key, $matches))
{
$compare_id = Core_Type_Conversion::toInt($matches[1]);
$i = array_search($compare_id, $compare_items);
if ($i !== false)
{
unset($compare_items[$i]);
}
}
}
}
/* Удаление всех сравнений */
if (isset($_GET['delete_all_compare']))
{
$compare_items = array();
}
/* Устанавливаем кукисы */
if (count($compare_items) > 0)
{
$shop->SetCookie("SHOPCOMPARE", serialize($compare_items), time() + 31536000, '/');
}
else
{
$shop->SetCookie("SHOPCOMPARE", '', 0, '/');
unset($_COOKIE['SHOPCOMPARE']);
}
?>
Так у Вас режим эмуляции, никаких контроллеров в ТДС и нет. Также, к сожалению, и не будет работать то, что Вы заменяете. Только на чистом API6.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
alexander.egorov писал(а):
Благодарю за подсказку. Эмуляцию нигде не включал, сделал копию своего старого сайта (ещё на 5ой версии) и выполнил на ней обновление, т.е. пологал что у меня API6 сейчас, ведь обновился до самой новой версии, где можно почитать про режим эмуляции и о про то как переключиться на API6?
Так у Вас режим эмуляции, никаких контроллеров в ТДС и нет. Также, к сожалению, и не будет работать то, что Вы заменяете. Только на чистом API6.
Благодарю за подсказку. Эмуляцию нигде не включал, сделал копию своего старого сайта (ещё на 5ой версии) и выполнил на ней обновление, т.е. пологал что у меня API6 сейчас, ведь обновился до самой новой версии, где можно почитать про режим эмуляции и о про то как переключиться на API6?
TemaLesnik,
открыть файл bootstrap.php и закоментировать строку
открыть файл bootstrap.php и закоментировать строку
define('USE_HOSTCMS_5', TRUE);
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация