Вопрос по фильтрам - реализация

#
Re: Вопрос по фильтрам - реализация
Вернуть хлебные крошки не получается, если меняем на
$param['xml_show_group_type'] = 'none';

То, структура папок не выводить, но и хлебных крошек нет.
#
Re: Вопрос по фильтрам - реализация
Обнаружилась ещё одна проблема, куда бы не переходили, по рубрикам Доски Объявлений, всё равно отображается список со всеми объявлениями.
#
Re: Вопрос по фильтрам - реализация
CCron, для реализации подобной сортировки(т.е. по доп. свойству и основному одновременно) вместо кода:
// Сортируем как строку
$param['items_field_order'] = ' shop_properties_items_table.shop_properties_items_value';

$param['items_order'] = 'DESC';

используйте:
// Сортируем как строку
$param['items_field_order'] = ' shop_properties_items_table.shop_properties_items_value DESC, shop_items_catalog_date_time';

$param['items_order'] = 'DESC';
#
Re: Вопрос по фильтрам - реализация
Спасибо, сортировка по доп. свойству и основному одновременно.
Но всё равно везде вместо крошек и пункта подать объявление пусто.
Ксли ставим вместо $param['xml_show_group_type'] = 'none';
$param['xml_show_group_type'] = 'all'; то на месте где должны быть хлебные крошки и подача объявления, выводится вся структура папок Доски Объявлений.

И вместо объявлений из нужной рубрики выводятся все.

      $shop = & singleton('shop');
      $param = array();
      $external_propertys = array();

      $param['current_group_id'] = false;

      $param['xml_show_group_type'] = 'none';
      $param['items_on_page'] = 20;

      // Ограничение по доп. свойству
      $element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
      $element['property_id'] = 212; // идентификатор доп. св-ва
      $element['prefix'] = ' AND '; // префикс
      $element['if'] = '!='; // Условие
      $element['value'] = "''";  //
      $element['sufix'] = '';
      $param['select'][] = $element;

      // Сортируем как строку
      $param['items_field_order'] = ' shop_properties_items_table.shop_properties_items_value DESC, shop_items_catalog_date_time';

      $param['items_order'] = 'DESC';
#
Re: Вопрос по фильтрам - реализация
CCron, см. описание параметра $param['xml_show_group_type'] в API для метода ShowShop:
$param['xml_show_group_type'] - тип генерации XML для групп, может принимать значения:
all - все группы всех уровней;
none - не выбирать группы
...
Поэтому если вы передаете $param['xml_show_group_type'] = 'all', то в XML попадут все группы, а в XSL-шаблоне по умолчанию указан вывод всех подгрупп текущей группы.

В коде также присутствует параметр $param['current_group_id'] = false, который указывает методу на необходимость генерации XML для всех товаров магазина. Поэтому на сайте они отображаются все. Именно поэтому не отображаются хлебные крошки: они ведь генерируются относительно идентификатора текущей группы, а он равен значению false.
#
Re: Вопрос по фильтрам - реализация
Изменил $param['current_group_id'] = false; на $param['current_group_id'] = $GLOBALS['shop_item_path']['group'];
Закоментировал $param['xml_show_group_type'] = 'none';
теперь отображаются хлебные крошки, выводятся объявления только текущей группы и отображается ссылка на "Добавить объявление в этот раздел". Если нажимаем на "Добавить объявление в этот раздел", то нечего не происходит.
#
Re: Вопрос по фильтрам - реализация
Если нажимаем на "Добавить объявление в этот раздел", то нечего не происходит.
Консоль ошибок выдает следующее:
Ошибка: div is null
Источник: http://site.ru/templates/template1/hostcms.js
Строка: 13


Начало js:
var prev_comment = 0;

// Ответ на комментарий
function cr(comment_id)
{
   if (prev_comment && prev_comment != comment_id)
   {
      document.getElementById(prev_comment).style.display = 'none';
   }

   var div = document.getElementById(comment_id);
   
   if (div.style.display != 'block')
   {
      div.style.display = 'block';
   }
   else
   {
      div.style.display = 'none';
   }

   prev_comment = comment_id;
}

var temp_ChildId = '';
var temp_CurrenElementId = '';
var menu_timeout_id = 0;
var filter_timeout_id = 0;
#
Re: Вопрос по фильтрам - реализация
CCron, приведите код тип. дин. страницы для доски объявлений.
#
Re: Вопрос по фильтрам - реализация
<?

$xsl_catalog = to_str($GLOBALS['LA']['xsl_catalog']);
$xsl_item = to_str($GLOBALS['LA']['xsl_item']);
$current_shop_id = to_int($GLOBALS['LA']['shop_id']);

$param = array();

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

   $external_propertys = array();

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

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

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

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

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


   // Обработка добавления объявления
   if (isset($_POST['add_advertisement']))
   {
      $shop = new shop();

      $param = array();

      $param['shops_id'] = $current_shop_id;
      $param['groups_id'] = $GLOBALS['shop_item_path']['group'];
      $param['name'] = to_str($_POST['advertisement_title']);
      $param['description'] = '';
      $param['shop_items_catalog_date_time'] = date('Y-m-d H:i:s');
      
      $param['text'] = to_str($_POST['advertisement_text']);
      
      if (class_exists('typograph'))
      {
         $typograph = new typograph();
         
         $param['text'] = $typograph->ProcessTypographic($param['text'], true);         
      }
      
      $param['currency_id'] = 1;
      $param['price'] = to_float($_POST['advertisement_price']);
      $param['is_active'] = to_int($GLOBALS['LA']['shop_item_is_active']);
      $param['order'] = 0;
      $param['indexation'] =1;
      $param['seo_title'] = $param['name'];
      $param['seo_description'] = $param['name'];
      $param['seo_keywords'] = $param['name'];
      $param['shop_sallers_id'] = 0;

      $param['path_source_big_image'] =  to_str($_FILES['advertisement_file']['tmp_name']);
      //$param['path_source_small_image'] = $param['path_source_big_image'];
      $param['original_file_name_big_image'] = to_str($_FILES['advertisement_file']['name']);
      //$param['path_target_big_image']  = $item_big_image;
      //$param['path_target_small_image'] = $item_small_image;
      $param['original_file_name_small_image'] = $param['original_file_name_big_image'];
      $param['use_big_image'] = true;
      $param['max_width_big_image'] =  to_int($GLOBALS['LA']['max_width_big_image']);
      $param['max_height_big_image'] =  to_int($GLOBALS['LA']['max_height_big_image']);
      $param['max_width_small_image'] = to_int($GLOBALS['LA']['max_width_small_image']);
      $param['max_height_small_image'] = to_int($GLOBALS['LA']['max_height_small_image']);

      $param['used_watermark_big_image'] = false;
      $param['used_watermark_small_image'] = false;
      $param['isset_big_image'] = false;

      $add_advertisement_id = $shop->InsertItem($param);

      if ($add_advertisement_id)
      {
         /*
         $param = array();

         $item_dir_path = CMS_FOLDER . UPLOADDIR . 'shop_' . $current_shop_id . '/item_catalog_' . $add_advertisement_id ;

         // Не существует директории для объявления
         if (!is_dir($item_dir_path))
         {
         mkdir($item_dir_path);
         }

         $kernel = & singleton('kernel');

         $ext = $kernel->GetExtension(to_str($_FILES['advertisement_file']['name']));

         if ($ext != '')
         {
         $ext = '.' . $ext;
         }

         $item_big_image = $item_dir_path . '/shop_items_catalog_image' . $add_advertisement_id . $ext;
         $item_small_image = $item_dir_path . '/small_shop_items_catalog_image' . $add_advertisement_id . $ext;

         $param_load_files = array();
         $param_load_files['path_source_big_image'] =  to_str($_FILES['advertisement_file']['tmp_name']);
         $param_load_files['path_source_small_image'] = '';
         $param_load_files['original_file_name_big_image'] = to_str($_FILES['advertisement_file']['name']);
         $param_load_files['path_target_big_image']  = $item_big_image;
         $param_load_files['path_target_small_image'] = $item_small_image;
         $param_load_files['original_file_name_small_image'] = $param_load_files['original_file_name_big_image'];
         $param_load_files['use_big_image'] = true;
         $param_load_files['max_width_big_image'] =  to_int($GLOBALS['LA']['max_width_big_image']);
         $param_load_files['max_height_big_image'] =  to_int($GLOBALS['LA']['max_height_big_image']);
         $param_load_files['max_width_small_image'] = to_int($GLOBALS['LA']['max_width_small_image']);
         $param_load_files['max_height_small_image'] = to_int($GLOBALS['LA']['max_height_small_image']);

         $param_load_files['used_watermark_big_image'] = false;
         $param_load_files['used_watermark_small_image'] = false;
         $param_load_files['isset_big_image'] = false;

         $result = $kernel->AdminLoadFiles($param_load_files);

         if ($result['big_image'])
         {
         $param['image'] = basename($item_big_image);
         }

         if ($result['small_image'])
         {
         $param['image_small'] = basename($item_small_image);
         }

         // Создано малое и/или большое изображение
         if ($result['big_image'] || $result['small_image'])
         {
         $param['item_id'] = $add_advertisement_id;
         $shop->InsertItem($param);
         }
         */

         // Добавляем Дату и время добавления объявления
         $param = array();
         $param['shop_items_catalog_item_id'] = $add_advertisement_id;
         $param['shop_list_of_properties_id'] = 61;
         $param['shop_properties_items_value'] =  date('d.m.Y H:i:s');

         $shop->InsertPropertiesItem($param);

         // Добавляем ФИО
         $param = array();
         $param['shop_items_catalog_item_id'] = $add_advertisement_id;
         $param['shop_list_of_properties_id'] = 4;
         $param['shop_properties_items_value'] =  to_str($_POST['advertisement_fio']);

         $shop->InsertPropertiesItem($param);

         // Добавляем Телефон
         $param = array();
         $param['shop_items_catalog_item_id'] = $add_advertisement_id;
         $param['shop_list_of_properties_id'] = 5;
         $param['shop_properties_items_value'] =  to_str($_POST['advertisement_phone']);

         $shop->InsertPropertiesItem($param);

         // Добавляем E-mail
         $param = array();
         $param['shop_items_catalog_item_id'] = $add_advertisement_id;
         $param['shop_list_of_properties_id'] = 6;
         $param['shop_properties_items_value'] =  to_str($_POST['advertisement_email']);

         $shop->InsertPropertiesItem($param);

         // Получаем список дополнительных свойств раздела объявлений
         $group_propertys_result = $shop->GetPropertiesOfGroup($GLOBALS['shop_item_path']['group']);

         $count_group_propertys = count($group_propertys_result);

         // Для группы существуют доп. свойства
         if ($count_group_propertys)
         {
            // В цикле получаем подробную информацию о дополнительных свойствах группы
            for ($i = 0; $i < $count_group_propertys; $i++)
            {
               if (isset($_POST['shop_item_property' . $group_propertys_result[$i]])
               || isset($_FILES['shop_item_property' . $group_propertys_result[$i]]))
               {
                  if (isset($_POST['shop_item_property' . $group_propertys_result[$i]]))
                  {
                     $item_property = $shop->GetPropretyOfItems($group_propertys_result[$i]);

                     // Доп. свойство - нефлажок и нефайл
                     if ($item_property['shop_list_of_properties_type'] != 7 && $item_property['shop_list_of_properties_type'] != 2)
                     {
                        $property_value = to_str($_POST['shop_item_property' . $group_propertys_result[$i]]);
                     }
                     // Доп. свойство - флажок
                     elseif ($item_property['shop_list_of_properties_type'] == 7)
                     {
                        $property_value = 1;
                     }
                     // Доп. свойство - список
                     elseif ($item_property['shop_list_of_properties_type'] == 2)
                     {
                        $property_value = to_int($_POST['shop_item_property' . $group_propertys_result[$i]]);
                     }

                     $shop_properties_items_value_small = '';
                     $shop_properties_items_file = '';
                     $shop_properties_items_file_small = '';

                  }
                  else // Доп. свойство - файл
                  {
                     $item_dir_path = CMS_FOLDER . UPLOADDIR . 'shop_' . $current_shop_id . '/item_catalog_' . $add_advertisement_id;
                     
                     $kernel = & singleton('kernel');

                     $ext = $kernel->GetExtension($_FILES['shop_item_property' . $group_propertys_result[$i]]['name']);

                     if ($ext != '')
                     {
                        $ext = '.' . $ext;
                     }

                     $property_big_file = $item_dir_path . '/shop_property_file_' . $add_advertisement_id . '_' . $group_propertys_result[$i] . $ext;

                     $property_small_file = $item_dir_path . '/small_shop_property_file_' . $add_advertisement_id . '_' . $group_propertys_result[$i] . $ext;

                     $param_load_files = array();
                     $param_load_files['path_source_big_image'] =  $_FILES['shop_item_property' . $group_propertys_result[$i]]['tmp_name'];
                     $param_load_files['path_source_small_image'] = '';
                     $param_load_files['original_file_name_big_image'] = to_str($_FILES['shop_item_property' . $group_propertys_result[$i]]['name']);
                     $param_load_files['path_target_big_image']  = $property_big_file;
                     $param_load_files['path_target_small_image'] = $property_small_file;
                     $param_load_files['original_file_name_small_image'] = $param_load_files['original_file_name_big_image'];
                     $param_load_files['use_big_image'] = true;
                     $param_load_files['max_width_big_image'] =  to_int($GLOBALS['LA']['max_width_big_image']);
                     $param_load_files['max_height_big_image'] =  to_int($GLOBALS['LA']['max_height_big_image']);
                     $param_load_files['max_width_small_image'] = to_int($GLOBALS['LA']['max_width_small_image']);
                     $param_load_files['max_height_small_image'] = to_int($GLOBALS['LA']['max_height_small_image']);

                     $param_load_files['used_watermark_big_image'] = false;
                     $param_load_files['used_watermark_small_image'] = false;
                     $param_load_files['isset_big_image'] = false;

                     $result = $kernel->AdminLoadFiles($param_load_files);

                     if ($result['big_image'])
                     {
                        $shop_properties_items_file = basename($property_big_file);
                        $property_value = $param_load_files['original_file_name_big_image'];

                     }
                     else
                     {
                        $property_value = '';
                        $shop_properties_items_file = '';
                     }

                     if ($result['small_image'])
                     {
                        $shop_properties_items_value_small = $param_load_files['original_file_name_small_image'];
                        $shop_properties_items_file_small = basename($property_small_file);
                     }
                     else
                     {
                        $shop_properties_items_value_small = '';
                        $shop_properties_items_file_small = '';
                     }
                  }

                  $param = array();

                  $param['shop_items_catalog_item_id'] = $add_advertisement_id;
                  $param['shop_list_of_properties_id'] = $group_propertys_result[$i];
                  $param['shop_properties_items_value'] =  $property_value;
                  $param['shop_properties_items_value_small'] = $shop_properties_items_value_small;
                  $param['shop_properties_items_file'] = $shop_properties_items_file;
                  $param['shop_properties_items_file_small'] = $shop_properties_items_file_small;

                  $shop->InsertPropertiesItem($param);
               }
            }
         }

      }
   }

   /* Вывод списка */

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

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

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

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

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

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

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

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

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

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

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

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

         $external_propertys['price_from'] = $price_from;

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

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

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

         $external_propertys['price_to'] = $price_to;

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

      /* Число элементов на странице */
      $on_page = to_int($_GET['on_page']);
      if ($on_page > 0 && $on_page < 150)
      {
         $param['items_on_page'] = $on_page;
         $external_propertys['on_page'] = $on_page;

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

      // Определяем номер страницы.
      if ($on_page)
      {
         $items_on_page = $on_page;
      }
      if (ereg("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 1)
      {
         /* Страница умножается на кол-во элементов, выводимых на страницу */
         $items_begin = ($regs[1] - 1) * $items_on_page;
      }
      else
      {
         $items_begin = 0;
      }

      $param['items_begin'] = $items_begin;

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

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

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

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

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

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

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

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

         $count_condition = 0;
         $property_xml = '';

         $count_properties = mysql_num_rows($resource_properties);

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

            $element['value'] = 0;

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

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

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

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

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

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

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

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

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

         }

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

         /* Добавляем в общий список условий */
         $param['select'][] = $element;
      }
      if (!empty($property_xml))
      {
         $external_propertys['property_xml'] = $property_xml;
      }

      // Формируем html-код формы добавления объявления
      ob_start();

      // Идентификатор текущей группы
      $current_group_id = $GLOBALS['shop_item_path']['group'];

      $shop = & singleton('shop');

      ?>
      <div id="FormAddAdvertisement" style="display: none">
      <form method="POST" action="./" enctype="multipart/form-data">
      <table>
         <tr>
            <td>
            Заголовок<br />
            <input type="text" name="advertisement_title" size="70"  />
            </td>
         </tr>
         <tr>
            <td>
            Цена<br />
            <input type="text" name="advertisement_price" size="70"  />
            </td>
         </tr>
         <tr>
            <td>
            Текст объявления<br />
            <textarea name="advertisement_text" rows="5" cols="53"></textarea>
            </td>
         </tr>
         
         <tr>
            <td>
            Фото<br />
            <input type="file" name="advertisement_file" size="59" />
            </td>
         </tr>
         
         <tr>
            <td>
            ФИО<br />
            <input type="text" name="advertisement_fio" size="70"  />
            </td>
         </tr>
         
         <tr>
            <td>
            Тел.<br />
            <input type="text" name="advertisement_phone" size="70"  />
            </td>
         </tr>
         
         <tr>
            <td>
            E-mail<br />
            <input type="text" name="advertisement_email" size="70"  />
            </td>
         </tr>
      <?
      // Получаем список дополнительных свойств группы магазина
      $group_propertys_result = $shop->GetPropertiesOfGroup($current_group_id);

      $count_group_propertys = count($group_propertys_result);

      // Для группы существуют доп. свойства
      if ($count_group_propertys)
      {
         // В цикле получаем подробную информацию о дополнительных свойствах группы
         for ($i = 0; $i < $count_group_propertys; $i++)
         {
            $item_property = $shop->GetPropretyOfItems($group_propertys_result[$i]);

            if ($item_property)
            {
               if ($item_property['shop_list_of_properties_id'] !=61 && $item_property['shop_list_of_properties_id'] != 4
               && $item_property['shop_list_of_properties_id'] != 5
               && $item_property['shop_list_of_properties_id'] != 6 &&
               ($item_property['shop_list_of_properties_type'] != 2 || $item_property['shop_list_of_properties_type'] == 2 && class_exists('lists')))
               {
               ?>
               <tr>
               <td>
               
               <?

               switch ($item_property['shop_list_of_properties_type'])
               {
                  case 0: // Строка
                  case 3: // Большое текстовое поле
                  case 4: // Визуальный редактор
                  case 5: // Дата
                  case 6: // Дата-время
                  {
                        echo $item_property['shop_list_of_properties_name'];   
                        ?>
                        <br />
                        <input type="text" name="shop_item_property<?=$item_property['shop_list_of_properties_id']?>" size="70" />
                        <?
                        break;
                  }

                  case 1: // Файл
                  {
                     echo $item_property['shop_list_of_properties_name'];      
                        ?>
                        <br />
                        <input type="file" name="shop_item_property<?=$item_property['shop_list_of_properties_id']?>" size="59" />
                        <?                     
                        break;
                  }
                  case 2: // Список
                  {
                     if (class_exists('lists'))
                     {
                        $list = new lists();

                        $list_result = $list->SelectListsItems($item_property['lists_id']);

                        if ($list_result)
                        {
                           echo $item_property['shop_list_of_properties_name'];   
                              ?>
                              <br />
                              <select name="shop_item_property<?=$item_property['shop_list_of_properties_id']?>">
                              <?
                              while ($list_row = mysql_fetch_assoc($list_result))
                              {
                                 ?>
                                 <option value="<?=$list_row['lists_items_id']?>"><?=$list_row['lists_items_value']?></option>
                                 <?   
                              }
                              ?>
                              </select>
                              <?
                        }
                     }

                     break;
                  }
                  case 7: // Флажок
                  {
                        ?>
                        <input type="checkbox" name="shop_item_property<?=$item_property['shop_list_of_properties_id']?>" />
                        <?
                        echo $item_property['shop_list_of_properties_name'];   
                        break;
                  }
                  default:
                     {
                        echo $item_property['shop_list_of_properties_name'];   
                        ?>
                        <br />
                        <input type="text" name="shop_item_property<?=$item_property['shop_list_of_properties_id']?>" size="70" />
                        <?
                        break;
                     }
               }
               ?>
               </td>
               </tr>
               <?
               }
            }
         }
      }

      ?>
      <tr>
      <td><input type="submit" name="add_advertisement" value="Отправить" /></td>
      </tr>   
      </table>
      </form>
      </div>
      <?      
      $form_add_advertisement = ob_get_contents();

      ob_get_clean();

      $external_propertys['ФормаДобавленияОбъявления'] = $form_add_advertisement;

// Begin * Сортировка по типу объявления
      $shop = & singleton('shop');
      $param = array();
      $external_propertys = array();

      $param['current_group_id'] = $GLOBALS['shop_item_path']['group']; // Текущая группа

      //$param['xml_show_group_type'] = 'none';
      $param['items_on_page'] = 20;

      // Ограничение по доп. свойству
      $element['type'] = 1; // 0 - основное св-во, 1 - дополнительное
      $element['property_id'] = 212; // идентификатор доп. св-ва
      $element['prefix'] = ' AND '; // префикс
      $element['if'] = '!='; // Условие
      $element['value'] = "''";  //
      $element['sufix'] = '';
      $param['select'][] = $element;

      // Сортируем как число
      $param['items_field_order'] = ' CONVERT(shop_properties_items_table.shop_properties_items_value, UNSIGNED)';

      $param['items_order'] = 'DESC';
// End * Сортировка по типу объявления

      $GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
   }
   else
   {
      /* Вывод конкретного элемент */
      $GLOBALS['shops']->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
               
            $Advertisement = new Advertisement();
            $banner_group = 14;
            $Advertisement->ShowBannerGroup($banner_group);
               
   }
}
?>
#
Re: Вопрос по фильтрам - реализация
CCron, сообщите адрес страницы с данной проблемой, а также данные доступа к разделу администрирования на адрес службы тех. поддержки.
Авторизация