Фильт товаров

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #1 siteapp » 23.04.2018, 08:39

Добрый день, кто может подсказать, при фильтрации товаров, фильтр не сужается.
Пример:
Изображение
Имеем фильтр, выбрали 2 бренда, выбрали 1 свойство. Но если я выберу ещё свойства, которые нету в товарах, то пишет Товары не найдены.
Изображение

Сам фильтр:

Код: Выделить всё

  {* Фильтр по свойствам *}
{if $features}
   <form method=get enctype="multipart/form-data">
      <table id="features">
         {foreach $features as $f}
         <tr>
            <td class="feature_name">
               {$f->name}:
            </td>
            <td>
               <select class="feature_values" size="1" name="{$f->id}" >
                  <option value="">Выбрать</option>
                  {foreach $f->options as $o}
                  <option value="{$o->translit}" {if $fil[$f->id] == $o->translit}selected{/if}>{$o->value}</option>
                  {/foreach}
               </select>
            </td>
         </tr>
         {/foreach}
      </table>
   <input type="submit" value="Показать">
   </form>
{/if}
{literal}
<script>
function clicker(that) {
var pick = that.options[that.selectedIndex].value;
location.href = pick;
}
 
function clickerb() {
var pick = getElementsByName("feature[]").options[getElementsByName("feature[]").selectedIndex].value;
}
</script>
{/literal}{* @END Фильтр по свойствам *}



ProductsView.php этот кусок играет роль какую?

Код: Выделить всё

// Свойства товаров
        if(!empty($category)) {
            $features = array();
            foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature) {
                $features[$feature->id] = $feature;
                $this->features_urls[] = $feature->url;
                if($val = $this->request->get($feature->id)) {
                  {
   $filter['features'][$feature->id] = $val;   
   $fil[$feature->id] = $val;
}
                }
            }
           
            $options_filter['visible'] = 1;
           
            $features_ids = array_keys($features);
            if(!empty($features_ids)) {
                $options_filter['feature_id'] = $features_ids;
            }
            $options_filter['category_id'] = $category->children;{
          // if(isset($filter['features']))
          // $options_filter['features'] = $filter['features'];
            }
            if(!empty($brand)) {
                $options_filter['brand_id'] = $brand->id;
            } elseif(isset($filter['brand_id'])) {
                $options_filter['brand_id'] = $filter['brand_id'];
            }
           
            $options = $this->features->get_options($options_filter);
           
            foreach($options as $option) {
                if(isset($features[$option->feature_id])) {
                    $features[$option->feature_id]->options[] = $option;
                }
            }
           
            foreach($features as $i=>$feature) {
                if(empty($feature->options)) {
                    unset($features[$i]);
                }
            }
            $this->design->assign('features', $features);
            $this->design->assign('fil', $fil);
        }
       
        // Постраничная навигация
        $items_per_page = $this->settings->products_num;
        // Текущая страница в постраничном выводе
        $current_page = $this->request->get('page', 'integer');
        // Если не задана, то равна 1
        $current_page = max(1, $current_page);
        $this->design->assign('current_page_num', $current_page);
        // Вычисляем количество страниц
        $products_count = $this->products->count_products($filter);
       
        // Показать все страницы сразу
        if($this->request->get('page') == 'all') {
            $items_per_page = $products_count;
        }
       
        $pages_num = ceil($products_count/$items_per_page);
        $this->design->assign('total_pages_num', $pages_num);
        $this->design->assign('total_products_num', $products_count);
       
        $filter['page'] = $current_page;
        $filter['limit'] = $items_per_page;

        if ($this->request->get('page') != 'all' && $current_page > 1 && $current_page > $pages_num) {
            return false;
        }
        //lastModify
        $last_modify = array();
        $brand_id_filter = '';
        $category_id_filter = '';
        if(!empty($filter['brand_id'])) {
            $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
            if(!empty($brand)){
                $last_modify[] = $brand->last_modify;
            }
        }
        if(!empty($filter['category_id'])) {
            $category_id_filter = $this->db->placehold('INNER JOIN __products_categories pc ON pc.product_id = p.id AND pc.category_id in(?@)', (array)$filter['category_id']);
            $last_modify[] = $category->last_modify;
        }
        $this->db->query("SELECT p.last_modify
         FROM __products p
         $category_id_filter
         WHERE 1 $brand_id_filter
         GROUP BY p.id");
        $res = $this->db->results('last_modify');
        if (!empty($res)) {
            $last_modify = array_merge($last_modify, $res);
        }
        if ($this->page) {
            $last_modify[] = $this->page->last_modify;
        }
        $this->setHeaderLastModify(max($last_modify));
        //lastModify END
:eh:

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 216
Сообщения: 1627
Зарегистрирован: 12.11.2015
С нами: 8 лет 4 месяца
Сайт Skype

Сообщение #2 OkayCMS » 23.04.2018, 12:25

Вроде как не должны быть доступны свойства, которые выдадут вам нет товаров. Вы на демоокай можете этот баг воспроизвести?

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #3 siteapp » 23.04.2018, 13:08

OkayCMS писал(а):f
Что то генерирует не так как я понял
ссылка для примера
site.ru/brand-amtel_antares?336=14&337=&326=&324=&338=&339=&401=

Добавлено спустя 30 минут 44 секунды:
OkayCMS писал(а):Вроде как не должны быть доступны свойства, которые выдадут вам нет товаров. Вы на демоокай можете этот баг воспроизвести?
вот такое собирается shiny?Радиус=14&Ширина=205mm&Высота=&Тип=&Сезон=&Индекс+скорости=&Индекс+нагрузки=

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 216
Сообщения: 1627
Зарегистрирован: 12.11.2015
С нами: 8 лет 4 месяца
Сайт Skype

Сообщение #4 OkayCMS » 24.04.2018, 05:33

siteapp писал(а):
OkayCMS писал(а):f
Что то генерирует не так как я понял
ссылка для примера
site.ru/brand-amtel_antares?336=14&337=&326=&324=&338=&339=&401=


OkayCMS писал(а):Вроде как не должны быть доступны свойства, которые выдадут вам нет товаров. Вы на демоокай можете этот баг воспроизвести?
вот такое собирается shiny?Радиус=14&Ширина=205mm&Высота=&Тип=&Сезон=&Индекс+скорости=&Индекс+нагрузки=
Эмм. У нас вообще урлы через слеш строится, а не через &

siteapp M
siteapp M
Возраст: 32
Репутация: 7
Сообщения: 118
Зарегистрирован: 12.01.2016
С нами: 8 лет 2 месяца

Сообщение #5 siteapp » 25.04.2018, 09:18

OkayCMS писал(а):
siteapp писал(а):Что то генерирует не так как я понял
ссылка для примера
site.ru/brand-amtel_antares?336=14&337=&326=&324=&338=&339=&401=



вот такое собирается shiny?Радиус=14&Ширина=205mm&Высота=&Тип=&Сезон=&Индекс+скорости=&Индекс+нагрузки=
Эмм. У нас вообще урлы через слеш строится, а не через &
Я пытаюсь переделать фильтр, чтоб при выборе в фильтре, было выбрать пару свойств, а потом нажать подобрать

сделал такой урл как был /catalog/shiny/radius-14/tip-asimmetrichnye_napravlennye
:eh:

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 216
Сообщения: 1627
Зарегистрирован: 12.11.2015
С нами: 8 лет 4 месяца
Сайт Skype

Сообщение #6 OkayCMS » 27.04.2018, 13:35

В таком случае вы часто будете попадать на страницу "Товаров не найдено"


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 27 гостей