Kredov long

[Помогите] Вложенные группы атрибутов

Тема в разделе "OpenCart", создана пользователем FitzgeraldFox, 6 сен 2016.

  1. FitzgeraldFox

    FitzgeraldFox

    Регистрация:
    8 сен 2015
    Сообщения:
    2
    Симпатии:
    0
    Добрый день! Подскажите, есть ли модуль, позволяющий создавать вложенные группы атрибутов? Дело в том, что для разных категорий могут быть группы атрибутов, имеющие одинаковое название, но разный набор атрибутов. Например, атрибуты в группе "Технические характеристики" для категории "Планшеты" отличаются от атрибутов в группе "Технические характеристики" для категории "Процессоры", а название у этих двух групп одинаковое! Как можно группировать группы атрибутов, чтобы было понятно, что эта группа атрибутов "Технические характеристики" относится к категории "Планшеты", а вот эта - к категории "Процессоры"?
    Я установил модуль "Attributic - Добавление атрибутов по шаблону в один клик".
    С помощью этого модуля можно создавать шаблоны атрибутов, которые можно добавлять в товар (массовое добавление всех атрибутов, прикреплённых к данному шаблону). Но дело в том, что атрибуты, добавляемые в шаблоны, находятся в определённой группе атрибутов. Если будет много категорий, с товарами которых будут ассоциироваться группы атрибутов с одинаковыми названиями, но разными атрибутами, то как мы узнаем, относится ли данная группа атрибутов к нужной нам категории, ведь название одно и то же, и только по набору атрибутов в группе можно судить, ассоциируется ли данная группа атрибутов с товарами из данной категории?
    Название группы атрибутов выводится как заголовок таблицы характеристик товара. Поэтому мы не можем просто написать в названии группы атрибутов "Планшеты - Основные характеристики" (так и выведется на странице конкретного планшета, а нужно просто "Основные характеристики").
    Может, надо править код вывода таблицы характеристик на странице?
     
  2. ajs

    ajs

    Регистрация:
    21 мар 2014
    Сообщения:
    15
    Симпатии:
    10
    я бы сделал так.... конЭшна с помощью кода добавил бы в Атрибуты еще одно поле (В АДМИНКЕ) допустим "КАТЕГОРИИ" или "ОПИСАНИЕ" или как-то там еще...
    потом при выборе атрибута товара в админке, я бы показывал не только название в автозаполнении, а склеивал бы его с с этим полем типа -> ТХ(процы) или ТХ(Планшеты)
    Можно еще проще -> формировать назвать название из Атрибута и его группы. Смысл тот-же . только доп поле не потребуется...
    Ну в общем направление ясно.
    А на морде сайта все по старому. Название только атрибута в чистом виде.
    Вот какая-то такая идея...
     
  3. FitzgeraldFox

    FitzgeraldFox

    Регистрация:
    8 сен 2015
    Сообщения:
    2
    Симпатии:
    0
    Спасибо, что навели на мысль! Я так и сделал:
    1. Добавил колонку "category" в Базе Данных в таблице attribute_group.
    2. Добавил колонку "Категория товаров группы атрибутов" в таблицу групп атрибутов
    3. Поправил в нескольких местах контроллер attribute_group, сделал запросы к БД к таблицам oc_category_description и oc_attribute_group и сформировал вёрстку select с выбором категорий. Также сделал так, что при нажатии кнопки "изменить" на группе атрибутов выбирался нужный option (существующее значение категории в БД для выбранной группы атрибутов). Затем вывел этот select в шаблоне.
    Я не знаю, правильно ли я сделал, что закомментировал след. строки в контроллере attribute_group:
    PHP:
    if (isset($this->request->post['category'])) {
                
            } elseif (!empty(
    $attribute_group_info)) {           
                
    $this->data['category'] = $attribute_group_info['category'];
            } else {
                
    $this->data['category'] = '';
            }
    И вместо них выше написал весь мой код запросов к БД, перебора данных, полученных из БД и формирования вёрстки:
    PHP:
    $oc_cat_desc_names $this->db->query('SELECT name FROM oc_category_description GROUP BY category_id');
            
    $attr_group_rows $this->db->query('SELECT attribute_group_id, category FROM oc_attribute_group');
            
            foreach(
    $oc_cat_desc_names as $key=>$row){
                if(
    $key == 'rows'){
                    foreach(
    $row as $val){               
                        
    $categories[] = $val;
                    }
                }
            }
            
    $this->data['category'] = "<select name='category' size='1'>";
            
    $flag 0;
          foreach(
    $categories as $cat_val) {         
              
    $this->data['category'] .= "<option value='".$cat_val['name']."'";
              foreach(
    $attr_group_rows as $attr_group_rows_key=>$attr_group_rows_val) {
                  foreach(
    $attr_group_rows_val as $attr_group_row){
                          if(
    $attr_group_row['attribute_group_id'] == $this->request->get['attribute_group_id']) {
                              if(
    $cat_val['name'] == $attr_group_row['category']){
                                  
    $this->data['category'] .= "selected";
                                  
    $flag 1;
                              }                         
                          }
                          if(
    $flag == 1) break;
                      }
                      if(
    $flag == 1) break;                     
              }
              
    $this->data['category'] .= ">".$cat_val['name'];
              
    $this->data['category'] .= "</option>";
            }
          
    $this->data['category'] .= "</select>";
    Сначала я пытался вставить этот код вот сюда:
    PHP:
    if (isset($this->request->post['category'])) {
    //сюда            
    }
    И вроде бы получилось, но потом увидел, что в админке появляется только название категории, а select нет.
    Т.е. отрабатывал след. блок кода:
    PHP:
    } elseif (!empty($attribute_group_info)) {           
                
    $this->data['category'] = $attribute_group_info['category'];
            }
    А мне нужно было всегда выводить select в админке при редактировании группы атрибутов.

    4. Немного изменил модель attribute_group и attribute