Главная категория товара (автозаполнение) Opencart/OcStore 3.x

Тема в разделе "Общие вопросы", создана пользователем Иван Николаев, 25 ноя 2022.

  1. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Всем привет!

    Решил переделать категорию товара из select в input в стиле автозаполнения, получилось, но он выводит информацию в виде id категории почему-то. Хочу сделать чтобы отображал в виде имя категории

    Код:
    <div class="form-group">
        <label class="col-sm-2 control-label" for="input-main_category_id">
            <span data-toggle="tooltip" title="{{ help_main_category }}">{{ entry_main_category }}</span>
        </label>
        <div class="col-sm-10">
                <input type="text" name="main_category" value="{{ main_category_id }}" placeholder="{{ entry_main_category_id }}" id="input-main_category_id" class="form-control"/>
                <input type="hidden" name="main_category_id" value="{{ main_category_id }}"/>
        </div>
    </div>
    
    Код:
      // Main category
      $('input[name=\'main_category\']').autocomplete({
          'source': function(request, response) {
              $.ajax({
                  url: 'index.php?route=catalog/category/autocomplete&user_token={{ user_token }}&filter_name=' + encodeURIComponent(request),
                  dataType: 'json',
                  success: function(json) {
                      response($.map(json, function(item) {
                          return {
                              label: item['name'],
                              value: item['category_id']
                          }
                      }));
                  }
              });
          },
          'select': function(item) {
              $('input[name=\'main_category\']').val(item['label']);
              $('input[name=\'main_category_id\']').val(item['value']);
          }
      });
     
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Вы два раза выводите {{ main_category_id }} и в hidden поле и в поле с названием
     
    Иван Николаев нравится это.
  3. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Только теперь он не сохраняет информацию в главной категории. Теперь там пустое поле
     
  4. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Где там? Кто сохраняет? У вас код перед глазами, у других нет))
     
  5. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    По-умолчанию В "Главной категории" отображаются категории в виде списка и когда сохраняешь значение, то оно отображается.
    Как реализовал автозаполнение, то после сохранение, значение в "Главной категории" пустые.
     
  6. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Я добавляю "Категория 1" в "Главную категорию"
    636e75756c (1).jpg

    После сохранения товара "Категория 1" появляется в "Категории", а в "Главной категории" исчезает
    636e75756c.jpg

    Правильно, чтобы "Категория 1" была везде.
     
  7. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Пришлите код вьюхи, который был.
     
  8. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Вот ту часть Html в twig, которую переделывали
     
  9. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Код:
                  <div class="form-group">
                    <label class="col-sm-2 control-label" for="input-category"><span data-toggle="tooltip" title="{{ help_category }}">{{ entry_category }}</span></label>
                    <div class="col-sm-10">
                      <input type="text" name="category" value="" placeholder="{{ entry_category }}" id="input-category" class="form-control"/>
                      <div id="product-category" class="well well-sm" style="height: 150px; overflow: auto;"> {% for product_category in product_categories %}
                          <div id="product-category{{ product_category.category_id }}"><i class="fa fa-minus-circle"></i> {{ product_category.name }}
                            <input type="hidden" name="product_category[]" value="{{ product_category.category_id }}"/>
                          </div>
                        {% endfor %}</div>
                    </div>
                  </div>
                  <div class="form-group">
                <label class="col-sm-2 control-label" for="select-main_category_id"><span data-toggle="tooltip" title="{{ help_main_category }}">{{ entry_main_category }}</span></label>
                <div class="col-sm-10">
                <input type="text" name="main_category" value="{{ main_category }}" placeholder="{{ entry_main_category_id }}" id="input-main_category_id" class="form-control"/>
                <input type="hidden" name="main_category_id" value="{{ main_category_id }}"/>   
                </div>
                </div>
     
  10. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    А где часть с main_category, которая была раньше? Это, насколько понял, текуший вариант.
     
  11. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Я его закомментировал )
    Код:
    <!--           
                <select name="main_category_id" class="form-control">
                    <option value="0" selected="selected">{{ text_none }}</option>
                    {% for category in categories %}
                      {% if category.category_id == main_category_id %}
                        <option value="{{ category.category_id }}" selected="selected">{{ category.name }}</option>
                        {% else %}
                        <option value="{{ category.category_id }}">{{ category.name }}</option>
                      {% endif %}
                    {% endfor %}
                </select>
    -->
     
  12. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Ну так проблема в другом. В селекте название категории выводится через перебор селекта. А по умолчанию нет такого поля main_category. Существует только поле main_category_id, поэтому название пустое. Ну это наиболее вероятный вариант, так как вы код не любите демонстрировать и остаётся только палкой в воде ковырять.
     
  13. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Контроллер
    Код:
            // Categories
            $this->load->model('catalog/category');
           
            $data['categories'] = $this->model_catalog_category->getAllCategories();
           
            if (isset($this->request->post['main_category_id'])) {
                $data['main_category_id'] = $this->request->post['main_category_id'];
                    } elseif (isset($product_info)) {
                $data['main_category_id'] = $this->model_catalog_product->getProductMainCategoryId($this->request->get['product_id']);
                    } else {
                $data['main_category_id'] = 0;
            }          
    
            if (isset($this->request->post['product_category'])) {
                $categories = $this->request->post['product_category'];
            } elseif (isset($this->request->get['product_id'])) {
                $categories = $this->model_catalog_product->getProductCategories($this->request->get['product_id']);
            } else {
                $categories = array();
            }
    
            $data['product_categories'] = array();
    
            foreach ($categories as $category_id) {
                $category_info = $this->model_catalog_category->getCategory($category_id);
    
                if ($category_info) {
                    $data['product_categories'][] = array(
                        'category_id' => $category_info['category_id'],
                        'name'        => ($category_info['path']) ? $category_info['path'] . ' &gt; ' . $category_info['name'] : $category_info['name']
                    );
                }
            }
    Модель
    Код:
            if (isset($data['main_category_id']) && $data['main_category_id'] > 0) {
                $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['main_category_id'] . "'");
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1");
                    } elseif (isset($data['product_category'][0])) {
                $this->db->query("UPDATE " . DB_PREFIX . "product_to_category SET main_category = 1 WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['product_category'][0] . "'");
            }
    
     
  14. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Ну так добавьте получение названия категории и сохраняйте в $data['main_category']
     
    Иван Николаев нравится это.