Фильтр товаров по производителю и меткам

#
Фильтр товаров по производителю и меткам
Добрый день!

Подскажите пожалуйста, выводятся товары на странице https://template17.2231747.ru/shop/11/

Если фильтровать только по производителю или только по метке работает правильно, если одновременно выбрать производителя и метку, то фильтрует только по метке.

Код ТДС:
<?php
// function debug_to_console($data) {
//     $output = $data;
//     if (is_array($output))
//         $output = implode(',', $output);

//     echo "<script>console.log(JSON.parse('Debug Objects: " . $output . "' ));</script>";
// }
function debug_to_console($data, $context = 'Debug in Console') {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info(\'' . $context . ':\');';
    $output .= 'console.log(' . json_encode($data) . ');';
    $output  = sprintf('<script>%s</script>', $output);

    echo $output;
}
$Shop_Controller_Show = Core_Page::instance()->object;

$oShop = Core_Entity::factory('Shop', Core_Array::get(Core_Page::instance()->libParams, 'shopId'));

// print '<pre>'; print_r($Shop_Controller_Show->group); print '</pre>';

$xslName = $Shop_Controller_Show->item
   ? Core_Array::get(Core_Page::instance()->libParams, 'shopItemXsl')
   : Core_Array::get(Core_Page::instance()->libParams, 'shopXsl');

$Shop_Controller_Show->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('ТекущаяГруппа')->value(
         intval(is_array($Shop_Controller_Show->group)
            ? Core_Array::first($Shop_Controller_Show->group)
            : $Shop_Controller_Show->group
         )
      )
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_add_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
);

$Shop_Controller_Show->tags(TRUE);
$Shop_Controller_Tag_Show = new Shop_Controller_Tag_Show($oShop);

if ($Shop_Controller_Show->item == 0)
{
   $Shop_Controller_Show->itemsForbiddenTags(array('text'));

    // tag from shoptag
    if (Core_Array::getPost('shoptag'))
    {
        
        $iTagId = intval(Core_Array::getPost('shoptag'));
        if ($iTagId > 0) {
            $oTag = Core_Entity::factory('Tag')->getById($iTagId);
            $Shop_Controller_Show->tag($oTag->path);
            /*
            $oalltags = $Shop_Controller_Tag_Show->queryBuilder()->execute()->asObject()->result();
            // print '<pre>'; print_r($oalltags); print '</pre>';
            foreach ($oalltags as $t) {
                if ($t->id == $iTagId) {
                    $Shop_Controller_Show->tag($t->path);
                    break;
                }
            }
            */
        }
        /////////////////////////////
        if (Core_Array::getPost('producer_id'))
    {
        // Producer filtering logic
        $iProducerId = intval(Core_Array::getPost('producer_id'));
        
        $Shop_Controller_Show->producer($iProducerId);
        $Shop_Controller_Show->limit(30);
    }

    // Rest of the tag filtering logic
    $oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
    // List of producers and adding them as child entities to the 'producers' XML entity
    $oShop_Producers = $oShop->Shop_Producers;
    debug_to_console($oShop->Shop_Producers);
    $oShop_Producers->queryBuilder()
        ->select('shop_producers.*')
        ->distinct()
        ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
        ->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
        ->where('shop_items.deleted', '=', 0);
    $aShop_Producers = $oShop_Producers->findAll();
        
    
    foreach ($aShop_Producers as $oShop_Producer)
    {
        // Add each producer as a child entity to the 'producers' XML entity
        $oProducersXmlEntity->addEntity(
            $oShop_Producer->clearEntities()
        );
    }
    ////////////////////////////////////
        

        $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('currentshoptagid')->value($iTagId)
      );
    }

   // Producers
   if (Core_Array::getPost('producer_id'))
   {
      $iProducerId = intval(Core_Array::getPost('producer_id'));
      $Shop_Controller_Show->producer($iProducerId);
      $Shop_Controller_Show->limit(30);
   }
   
   if (Core_Array::getGet('filter') || Core_Array::getGet('sorting'))
   {
      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('filter')->value(1)
      );

      // Sorting
      $sorting = intval(Core_Array::getGet('sorting'));

      ($sorting == 1 || $sorting == 2)
         && $Shop_Controller_Show->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');

      $sorting == 3 && $Shop_Controller_Show->orderBy('shop_items.name', 'ASC');

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('sorting')->value($sorting)
      );

      // Prices
      $Shop_Controller_Show->setFilterPricesConditions($_GET);

      // Additional properties
      $Shop_Controller_Show->setFilterPropertiesConditions($_GET);
   }
   
   /* Производители */
    $oShop = $Shop_Controller_Show->getEntity();
    
    // XML-сущность, к которй будут добавляться производители
    $oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
    
    // Добавляем XML-сущность контроллеру показа
    $Shop_Controller_Show->addEntity($oProducersXmlEntity);
    
    // Список производителей
    $oShop_Producers = $oShop->Shop_Producers;
    
    $oShop_Producers->queryBuilder()
       ->select('shop_producers.*')
       ->distinct()
       ->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
       ->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
       ->where('shop_items.deleted', '=', 0);
    
    $aShop_Producers = $oShop_Producers->findAll();
    foreach ($aShop_Producers as $oShop_Producer)
    {
        
       // Добавляем производителя потомком XML-сущности
       $oProducersXmlEntity->addEntity(
          $oShop_Producer->clearEntities()
       );
    }
    
      // Метки
      if (Core::moduleIsActive('shop') && Core::moduleIsActive('tag'))
      {
            /*
            $Shop_Controller_Tag_Show = new Shop_Controller_Tag_Show($oShop);
            $Shop_Controller_Tag_Show
            ->xsl(Core_Entity::factory('Xsl')
                ->getByName('ОблакоТеговНовыйСайт3'))
                ->show();    
            */
            
           // XML-сущность, к которой будут добавляться метки
            $oShopTagsXmlEntity = Core::factory('Core_Xml_Entity')->name('shoptags');
    
            // Добавляем XML-сущность контроллеру показа
            $Shop_Controller_Show->addEntity($oShopTagsXmlEntity);
    
            // Преобразуем ассоциативный массив тегов в XML-сущности    
          $alltags = $Shop_Controller_Tag_Show->queryBuilder()->execute()->asAssoc()->result();
            foreach ($alltags as $tag1) {
                // echo '<pre>'; print_r($tag1); echo '</pre>';
                $oShopOneTagXmlEntity = Core::factory('Core_Xml_Entity')->name('shoptag');
                $oShopTagsXmlEntity->addEntity($oShopOneTagXmlEntity);
                foreach ($tag1 as $name => $value) {
                    $oShopOneTagXmlEntity->addEntity(Core::factory('Core_Xml_Entity')
                           ->name($name)
                           ->value($value)
                     );
                }
            }    
            
      } else {
        
      }
}
else
{
   $Shop_Controller_Show
      ->associatedItems(TRUE)
      ->modifications(TRUE)
      ->comments(TRUE)
      ->tabs(TRUE)
      ;

   if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
   {
      $oShop = $Shop_Controller_Show->getEntity();

      $Shop_Controller_Show->cache(FALSE);

      $oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
         Core_Array::get($_SERVER, 'REMOTE_ADDR')
      );

      $oXmlCommentTag = Core::factory('Core_Xml_Entity')
         ->name('document');

      $siteuser_id = 0;
      if (Core::moduleIsActive('siteuser'))
      {
         $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();

         if ($oSiteuser)
         {
            $siteuser_id = $oSiteuser->id;
         }
      }

      $oComment = Core_Entity::factory('Comment');

      $allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
      $oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
      $oComment->active = $oShop->comment_active;
      $oComment->author = Core_Str::stripTags(Core_Array::getPost('name'));
      $oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
      $oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
      $oComment->grade = intval(Core_Array::getPost('grade', 0));
      $oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
      $oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
      $oComment->siteuser_id = $siteuser_id;

      $oShop_Item = Core_Entity::factory('Shop_Item', $Shop_Controller_Show->item);

      $oXmlCommentTag
         ->addEntity($oComment)
         ->addEntity($oShop_Item);

      if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
      {
         if ($oShop->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
         {
            // Antispam
            if (Core::moduleIsActive('antispam'))
            {
               $Antispam_Controller = new Antispam_Controller();
               $bAntispamAnswer = $Antispam_Controller
                  ->addText($oComment->author, 'author')
                  ->addText($oComment->email, 'email')
                  ->addText($oComment->phone, 'phone')
                  ->addText($oComment->subject, 'subject')
                  ->addText($oComment->text, 'text')
                  ->execute();

               // Check e-mail
               if ($bAntispamAnswer)
               {
                  $bAntispamAnswer = Antispam_Domain_Controller::checkEmail($oComment->email);
               }
            }
            else
            {
               $bAntispamAnswer = TRUE;
            }

            if ($bAntispamAnswer)
            {
               $oComment->save();

               $oComment
                  ->dateFormat($oShop->format_date)
                  ->dateTimeFormat($oShop->format_datetime);

               $oShop_Item->add($oComment)->clearCache();

               $oXmlCommentTag->addEntity($oShop);

               // Отправка письма администратору
               $sText = Xsl_Processor::instance()
                  ->xml($oXmlCommentTag->getXml())
                  ->xsl(
                     Core_Entity::factory('Xsl')
                        ->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl'))
                  )
                  ->process();

               $aFrom = array_map('trim', explode(',', EMAIL_TO));

               Core_Mail::instance()
                  ->to(EMAIL_TO)
                  ->from($aFrom[0])
                  ->header('Reply-To', Core_Valid::email($oComment->email)
                     ? $oComment->email
                     : $aFrom[0]
                  )
                  ->subject(Core::_('Shop.comment_mail_subject'))
                  ->message(trim($sText))
                  ->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
                     ? 'text/plain'
                     : 'text/html'
                  )
                  ->send();
            }
            else
            {
               $oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
                  ->name('error_antispam')->value(1)
               );

               $oComment->text = Core_Str::br2nl($oComment->text);
               $Shop_Controller_Show->addEntity($oComment);
            }
         }
         else
         {
            $oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
               ->name('error_captcha')->value(1)
            );

            $oComment->text = Core_Str::br2nl($oComment->text);
            $Shop_Controller_Show->addEntity($oComment);
         }
      }
      else
      {
         $oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
            ->name('error_time')->value(1)
         );

         $oComment->text = Core_Str::br2nl($oComment->text);
         $Shop_Controller_Show->addEntity($oComment);
      }

      // Результат добавления комментария
      $xsl_result = Xsl_Processor::instance()
         ->xml($oXmlCommentTag->getXml())
         ->xsl(Core_Entity::factory('Xsl')->getByName(
            Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
         )
         ->process();

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('message')->value($xsl_result)
      );
   }
}

// В корне выводим из всех групп
/*if ($Shop_Controller_Show->group == 0 || !is_null($Shop_Controller_Show->tag))
{
   $Shop_Controller_Show->group(FALSE)->forbidSelectModifications();
}*/

class Hostcms_Shop_Item_Observer
{
   static public function onBeforeGetXml($object)
   {
      $object->addXmlTag('modifications_count', $object->Modifications->getCount());
   }

   static public function onBeforeSelectModifications($object, $args)
   {
      $args[0]
         ->queryBuilder()
         ->clearOrderBy()
         ->orderBy('shop_items.sorting', 'ASC')
         ->orderBy('shop_items.name', 'ASC');
   }
}

if ($Shop_Controller_Show->item)
{
   $oShop_Item_Sets = Core_Entity::factory('Shop_Item_Set');
   $oShop_Item_Sets
      ->queryBuilder()
      ->where('shop_item_sets.shop_item_set_id', '=', $Shop_Controller_Show->item)
      ->limit(3);

   $aShop_Item_Sets = $oShop_Item_Sets->findAll(FALSE);

   if (count($aShop_Item_Sets))
   {
      $oXmlParentSets = Core::factory('Core_Xml_Entity')
         ->name('parent_sets');

      foreach ($aShop_Item_Sets as $oShop_Item_Set)
      {
         $oShop_Item = $oShop_Item_Set->Shop_Item;

         $newShopItem = clone $oShop_Item;
         $newShopItem->id = $oShop_Item->id;

         $oXmlParentSets->addEntity($newShopItem);
      }

      $Shop_Controller_Show->addEntity($oXmlParentSets);
   }

   $Shop_Controller_Show->warehousesItems(TRUE);

   Core_Event::attach('shop_item.onBeforeSelectModifications', array('Hostcms_Shop_Item_Observer', 'onBeforeSelectModifications'));
}
else
{
   Core_Event::attach('shop_item.onBeforeGetXml', array('Hostcms_Shop_Item_Observer', 'onBeforeGetXml'));
}

$Shop_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName($xslName)
   )
//    ->itemProperties(TRUE)
   ->show();
Авторизация