Интернет - магазин

#
Re: Интернет - магазин
нашел еще лучше... но есть опять ошибки теперь под рубрики не выводятся:
function SetGroups($mas_groups, $set)
{
        $mas_groups = to_array($mas_groups);
        foreach ($mas_groups as $key=>$value)
        {

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

        }
        return $set;
}

/* Вывод списка */
if(!$GLOBALS['shop_item_path']['item'])
{
$mas_group = $GLOBALS['shop']->GetGroupsTree($GLOBALS['shop_item_path']['group'],
$current_shop_id, $mas_group);
$set = array();
$set = SetGroups($mas_group, $set);
$elements = array();

$in = $GLOBALS['shop_item_path']['group'];

foreach ($set as $key => $value)
{
        $in .= ','.$value;
}

$elements['type']=0;
$elements['prefix'] = ' and (';
$elements['name'] = 'shop_items_catalog_table.shop_groups_id';
$elements['if'] = ' IN ('.$in.') ';
$elements['value'] = '';
$elements['sufix']=')';
$param['select'][]=$elements;
$param['current_group_id']=false;

$GLOBALS['shop']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
и пишет ЗАМЕЧАНИЕ: Undefined variable: mas_groups в файле /home/ibitcom/public_html/lib/lib_6/lib_6.php (строка 95)
#
Re: Интернет - магазин
wildthing, приведите полный код файла lib_6.php
#
Re: Интернет - магазин
<?
function SetGroups($mas_groups, $set)
{
   $mas_groups = to_array($mas_groups);
   foreach ($mas_groups as $key=>$value)
   {

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

   }
   return $set;
}

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

$param = array();

$shop = & singleton('shop');

if ($GLOBALS['shop_item_path'] != false)
{
   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 = $shop->GetShop($current_shop_id);
         if ($shop_row)
         {
            $param['shop_comment_active'] = to_int($shop_row['shop_comment_active']);
         }
         else
         {
            $param['shop_comment_active'] = false;
         }
         $external_propertys['comment_is_active'] = $param['shop_comment_active'];

         $shop->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(!$GLOBALS['shop_item_path']['item'])
{
   $mas_group = array();
$mas_group = $GLOBALS['shop']->GetGroupsTree($GLOBALS['shop_item_path']['group'], $current_shop_id, $mas_group);
      $set = array();
      $set = SetGroups($mas_group, $set);
  
      $elements = array();

      $in = $GLOBALS['shop_item_path']['group'];
      
      foreach ($set as $key => $value)
      {
         $in .= ','.$value;
      }


$elements['type']=0;
      $elements['prefix'] = ' and (';
      $elements['name'] = 'shop_items_catalog_table.shop_groups_id';
      $elements['if'] = ' IN ('.$in.') ';
      $elements['value'] = '';
      $elements['sufix']=')';
      $param['select'][]=$elements;
      $param['current_group_id']=false;

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

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

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

      /* Ограничиваем по производителю */
if (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;
if(isset($_GET['action']))
{
if(to_str($_GET['action']) == 'all')
{
$param['current_group_id']=false;
$external_propertys['producer_all'] = 1;
}
}
if(isset($_GET['apply_filter']))
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
   $external_propertys['producer_id'] = to_int($_GET['producer_id']);
}

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

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

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

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

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


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

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



      $shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
   }
   else
   {
      /* Вывод конкретного элемент */
      $shop->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
   }
}
?>
Вот уже почти идеальный код... осталось сделать так чтобы при выборе категории выводились подкатегории и товаров не 10 штук а все с этой категории и ее подрубрик. Сможите подправить?
#
Re: Интернет - магазин
и еще нюанс раньше при заходе в категорию у меня выводились только те производители что отмечены в этой категории а после манипуляций сейчас выводит весь список не зависимо от категории...
#
Re: Интернет - магазин
wildthing писал(а):
чтобы при выборе категории выводились подкатегории
- нужно через массив $external_propertys метода ShowShop в XML передавать идентификатор текущей группы(до того, как вы присвоете ему значение false). И в XSL-шаблоне для списка товаров показывать ссылки на те группы, у которых идентификатор родительской группы равен значению соответствующего параметра, переданному через $external_propertys.wildthing писал(а):
не 10 штук а все с этой категории и ее подрубрик
- если в XML-е есть все необходимые товары, но выводятся только 10, то проблема в XSL-шаблоне для списка товаров. Обновите его с демо-сайта.
wildthing писал(а):
сейчас выводит весь список не зависимо от категории
- это потому, что в метод ShowShop в качестве текущей группы передано false.
#
Re: Интернет - магазин
Уже пробовал....
- нужно через массив $external_propertys метода ShowShop в XML передавать идентификатор текущей группы(до того, как вы присвоете ему значение false). И в XSL-шаблоне для списка товаров показывать ссылки на те группы, у которых идентификатор родительской группы равен значению соответствующего параметра, переданному через $external_propertys.wildthing писал(а):


Дописываем в динамической странице после
$param['current_group_id']=false;

$external_propertys['ТекущаяГруппа'] = $GLOBALS['shop_item_path']['group'];

и затем в XSLшаблоне  вставил следующее:

<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->

<xsl:variable name="parent_group_id"><xsl:choose>
<xsl:when test="ТекущаяГруппа/node()"><xsl:value-of select="ТекущаяГруппа"/></xsl:when>
<xsl:otherwise><xsl:value-of select="@current_group_id"/></xsl:otherwise>
</xsl:choose></xsl:variable>

после таких манипуляций... единственное что изменилось так это то что в категорию я уже захожу но подгрупп не вижу... и в них перейти не могу... второе поправил
#
Re: Интернет - магазин
Передайте в ShowShop $param['xml_show_group_type']='all';
#
Re: Интернет - магазин
Спасибо... работает... все кроме фильтра производителей))) выводит всех производителей... в любой категории
#
Re: Интернет - магазин
В общем одно зацепилось за другое помимо фильтра производителей не работает листинг... страниц... (кидает на главную страницу).
#
Re: Интернет - магазин
листинг решил а с фильтром трабл. Все время передает полній список производителей
Авторизация