Как вытащить определенную группу фильтра со значением по id

Тема в разделе "Общие вопросы", создана пользователем Sanik, 25 апр 2018.

  1. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Здравствуйте. Опенкарт 2.3.0.2.2
    Вопрос в следущем, использую стандартный фильтр, набор групп с фильтрами (значениями). В карточке товара сейчас выводятся все группы со значениями фильтра пренадлежащими товару в котором находимся посредством вот такого кода:
    Код:
                            <? if(!empty($filtres_arr)): ?>
                                <? foreach ($filtres_arr as $filter_group => $filter_item): ?>
                                    <? if(!empty($filter_item)): ?>
                                        <div class="row">
                                            <div class="param_name col-md-4 col-sm-4 col-xs-6"><?=$filter_group;?></div>
                                            <div class="param_value col-md-8 col-sm-8 col-xs-6"><?=implode(', ', $filter_item);?></div>
                                        </div>
                                    <? endif; ?>
                                <? endforeach; ?>
                            <? endif; ?>
    А мне нужно выводить только некоторые группы и их значения по id
    Как это сделать правильно и как узнать id группы с определенным фильтром?
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    4.210
    Симпатии:
    1.449
    Если фильтр стандартный, то гляньте в контроллер \catalog\controller\extension\module\filter.php
    Там предельно все ясно. Видно как формируется массив и что в нем есть.
     
  3. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Фильтр стандартный
    Код:
                $data['filter_groups'] = array();
    
                $filter_groups = $this->model_catalog_category->getCategoryFilters($category_id);
    
                if ($filter_groups) {
                    foreach ($filter_groups as $filter_group) {
                        $childen_data = array();
    
                        foreach ($filter_group['filter'] as $filter) {
                            $filter_data = array(
                                'filter_category_id' => $category_id,
                                'filter_filter'      => $filter['filter_id']
                            );
    
                            $childen_data[] = array(
                                'filter_id' => $filter['filter_id'],
                                'name'      => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : '')
                            );
                        }
    
                        $data['filter_groups'][] = array(
                            'filter_group_id' => $filter_group['filter_group_id'],
                            'name'            => $filter_group['name'],
                            'filter'          => $childen_data
                        );
                    }
    
                    return $this->load->view('extension/module/filter', $data);
                }
    Мне знаний не хватает, как вывести из массива определенные группы, с атрибутами все проще, но там по другому все. Если вы подскажите - буду очень благодарен.
     
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    4.210
    Симпатии:
    1.449
    самый простой способ.. смотрим по коду
    PHP:
    foreach ($filter_groups as $filter_group) {
    обернуть в условие
    PHP:
    if ($filter_group['filter_group_id'] != 99) {
     
  5. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Побовал вот так
    Код:
                            <? if(!empty($filtres_arr)): ?>
    
                            <? foreach ($filter_groups as $filter_group) { ?>
                            <? if ($filter_group['filter_group_id'] != 2) { ?>
    
                                        <div class="row">
                                            <div class="param_name col-md-4 col-sm-4 col-xs-6"><?=$filter_group;?></div>
                                            <div class="param_value col-md-8 col-sm-8 col-xs-6"><?=implode(', ', $filter_item);?></div>
                                        </div>
                
                            <? } ?>
                            <? } ?>
    
                            <? endif; ?>
    В итоге ошибка
    Код:
    Notice: Undefined variable: filter_groups in D:\OpenServer\domains\test2\catalog\view\theme\default\template\product\product.tpl on line 82Warning: Invalid argument supplied for foreach() in 
     
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    4.210
    Симпатии:
    1.449
    Зачем вы в шаблоне правите.. ну жа ладно...

    Я не знаю что у вас в шаблоне.. но пробуйте посмотреть через var_dump($filter_group);
    Узнаете что у вас в массиве.
     
  7. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Код:
    Notice: Undefined variable: filter_group in 
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    4.210
    Симпатии:
    1.449
    не может быть... вы же массив перебираете,
    PHP:
    <? foreach ($filter_groups as $filter_group) { ?>
    что то и должно быть.
     
  9. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Там в шаблоне вот такая строчка
    Код:
    <? foreach ($filtres_arr as $filter_group => $filter_item): ?>
    Если вывожу var_dump($filter_group); - то ошибка (выше)
    Notice: Undefined variable: filter_group.........on line 79NULL
     
  10. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    И так пробовал
    Код:
    <? echo var_dump($filter_group); ?>
    Тоже самое - ошибка...
     
  11. Ravilr

    Ravilr Специалист

    Сообщения:
    4.210
    Симпатии:
    1.449
    Возможно у вас и не массив. Так сложно точно ответить, что не так.
    Вы откройте шаблон по умолчанию \catalog\view\theme\default\template\extension\module\filter.tpl
    и приглядитесь. Мне кажется вы совсем все запутали.
     
    Sanik нравится это.
  12. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Да, точно, это же все выводится в карточке товара, вот нашел код в контроллере product.php
    Код:
                $filtres_groups = $this->model_catalog_product->getAllFilterGroups();
                $filtres_val = $this->model_catalog_product->getAllFiltersForProdID($product_id);
                $filtres_groups_arr = array();
                foreach ($filtres_groups as $item) {
                    $filtres_groups_arr[$item['filter_group_id']] = $item['name'];
                }
                $filtres_arr = array();
                foreach ($filtres_val as $item) {
                    $filtres_arr[$filtres_groups_arr[$item['filter_group_id']]][] = $item['name'];
                }
                $data['filtres_arr'] = $filtres_arr;
    а вот это вывод в шаблоне
    Код:
                            <? if(!empty($filtres_arr)): ?>
                                <? foreach ($filtres_arr as $filter_group => $filter_item): ?>
                                    <? if(!empty($filter_item)): ?>
                                        <div class="row">
                                            <div class="param_name col-md-4 col-sm-4 col-xs-6"><?=$filter_group;?></div>
                                            <div class="param_value col-md-8 col-sm-8 col-xs-6"><?=implode(', ', $filter_item);?></div>
                                        </div>
                                    <? endif; ?>
                                <? endforeach; ?>
                            <? endif; ?>
     
  13. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Предлагаю 200р. за решение... В лс.
     
    Последнее редактирование: 27 апр 2018
  14. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Вот структура массива, перебрал при помощи <? echo var_dump($filtres_arr); ?>
    Код:
    array(5) {
    ["Материал"]=> array(1) { [0]=> string(38) "Алюминий" }
    ["Вес"]=> array(1) { [0]=> string(12) "227гр" }
    ["Цвет"]=> array(1) { [0]=> string(10) "Белый" }
    }
    или если <? echo print_r($filtres_arr); ?>
    Код:
    Array (
    [Материал] => Array ( [0] => Алюминий )
    [Вес] => Array ( [0] => 227гр )
    [Цвет] => Array ( [0] => Белый )
    )
     
    Последнее редактирование: 27 апр 2018
  15. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    За две строчки кода? Думаю..., человек знающий PHP может это за 5 минут решить.
     
  16. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Я же не в раздел "Услуги" изначально тему писал, если вы не желаете помочь - то зачем писать вообще о деньгах?
     
  17. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Я никого не заставляю мне помагать бесплатно, но здесь на то и раздел "Общие вопросы". Люди меняються знаниями и помагают друг другу своими наработками бесплатно. Вот в атрибутах все получилось и сделал сам, на там нет ключа и другая структура немного, поэтому это меня путает, хотел бы разобраться и пытаюсь разобраться сам, прежде чем писать уже здесь (когда не получается)..
     
  18. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Ну так пересмотрите темы и увидите, что много в чем сам разобрался и в итоге и оставил решения.
     
  19. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    А какие знания Вы отдали взамен? Сами спрашиваете здесь в теме о помощи, а взамен за любую мелочь предлагаете свои услуги за деньги. Зачем к словам докапываться?
     
  20. Sanik

    Sanik Активный пользователь

    Сообщения:
    299
    Симпатии:
    3
    Решил сам. Тему можно закрыть.