Контроллеры в клиентском разделе

#
Re: Контроллеры в клиентском разделе
Kotoff писал(а):
Большое спс!!! Я готов оплатить вам 500 руб. за помощь (скиньте вмр кошелек)
#
Re: Контроллеры в клиентском разделе
ipsus, мои актуальные платежные реквизиты здесь http://www.hostcmsblog.ru/demosites/

Хотя написанный мною код столько не стоит
Заказов не беру. Консультирую редко.
#
Re: Контроллеры в клиентском разделе
Kotoff писал(а):
Спасибо, отправил. Дело не в тогм сколько стоит, дело в том как быстро помогли! Спасибо еще раз!
#
Re: Контроллеры в клиентском разделе
ipsus писал(а):
дело в том как быстро помогли!
Тоже, кстати, чистая случайность.
Заказов не беру. Консультирую редко.
#
Re: Контроллеры в клиентском разделе
HostCMS писал(а):
TemaLesnik,
все там просто, откройте таблицы, они одинаковые. Может вы просто с таблицей property_value_floats не объединяете.


Подскажите пожалуйста, на каком этапе (в коде какого документ/типовой страницы/чего угодно) происходит объединение таблиц) Или какие операторы/методы там используются, по ним сам найду и разберусь)
Модератор
#
Re: Контроллеры в клиентском разделе
TemaLesnik,
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?
#
Re: Контроллеры в клиентском разделе
HostCMS писал(а):
TemaLesnik,
Давайте начнем с показа Вашего кода, которым Вы вызываете контроллер. И тип самого свойства у Вас какой указан?



  1. Тип свойства - число с плавающей точкой ("11" в таблице "properties"
  2. Я не знаю, где конкретно в коде вызывается контроллер, поэтому приведу код (в конце сообщения), который относится к интернет магазину.
  3. При попытке заменить
    $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);
   }
}
?>


Настройки типовой динамической страницы:

<?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 .= ' &#151; ';
      }

      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 = ' &#151; '. $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']);
}
?>

Модератор
#
Re: Контроллеры в клиентском разделе
Так у Вас режим эмуляции, никаких контроллеров в ТДС и нет. Также, к сожалению, и не будет работать то, что Вы заменяете. Только на чистом API6.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Контроллеры в клиентском разделе
alexander.egorov писал(а):
Так у Вас режим эмуляции, никаких контроллеров в ТДС и нет. Также, к сожалению, и не будет работать то, что Вы заменяете. Только на чистом API6.

Благодарю за подсказку. Эмуляцию нигде не включал, сделал копию своего старого сайта (ещё на 5ой версии) и выполнил на ней обновление, т.е. пологал что у меня API6 сейчас, ведь обновился до самой новой версии, где можно почитать про режим эмуляции и о про то как переключиться на API6?
#
Re: Контроллеры в клиентском разделе
TemaLesnik,
открыть файл bootstrap.php и закоментировать строку
define('USE_HOSTCMS_5', TRUE);
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация