COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

Добавление товара в заказ


RHCk

Recommended Posts

Приветствую!

 

Есть необходимость в заказ покупателя добавить товар. Заходим в редактирование заказа -> Вкладка 2.Товары, раздел Добавить товар(ы), поле Выберите товар.

Подбор товара - при наборе наименования товара поиск осуществляется с начала наименования.

Вопрос 1 - можно ли сделать подбор по сочетанию символов в любом месте наименования товара и артикула?

Вопрос 2 - можно ли это использовать для поиска товара покупателем?

Вопрос 3 - исключительно интереса ради, все пользуют обычный поиск OC или всё же прикручивают "живой" поиск?

 

С уважением.

 

P.S. Нашёл модуль поиска (для v2.0.X), могу выложить. Возможно кто-то сможет проверить работоспособность и "допилить".

Ссылка на комментарий
Поделиться на других сайтах

Версия движка? У меня в 1.5.6.4 при вводе первых букв названия товара выпадает список в админке. Касаемо поиска в магазине, стоит живой поиск.

Ссылка на комментарий
Поделиться на других сайтах

OC.PRO v2.1.0.1.8

 

У меня на несколько другой сборке версии 1.5.1.1.2 тоже стоит. Интересно решение для OC.PRO.

Просто не совсем понятно, либо все используют сторонние шаблоны уже с живым поиском, либо используют платные модули, либо он просто никому не нужен:)

В приобретении модуля проблемы нет, не понятна невостребованность данного функционала.

Ссылка на комментарий
Поделиться на других сайтах

Модуль полезный, если большое количество товара, пользователю легче найти интересующий товар) Я думаю должны быть уже и бесплатные решения, в платных просто больше фишек.

Ссылка на комментарий
Поделиться на других сайтах

Я сделал две замены:

Замена 1 (в строке 436):
$sql .= " AND pd.name LIKE '" . $this->db->escape($data['filter_name']) . "%'";
$sql .= " AND pd.name LIKE '%" . $this->db->escape($data['filter_name']) . "%'";

Замена 2 (в строке 440):
$sql .= " AND p.model LIKE '" . $this->db->escape($data['filter_model']) . "%'";
$sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_model']) . "%'";

 

Поиск по сочетанию в наименовании работает, по артикулу не работает.

Что-то сделал не так?:)

Ссылка на комментарий
Поделиться на других сайтах

4 часа назад, savage4pro сказал:

так это же только модель, теперь есть возможность поиска товаров по любой части наименования либо артикула там, где собственно и происходит вызов метода

Так вот выше я и хотел сказать, что после произведенных мной двух замен, по наименованию всё отлично ищется, а по артикулу нет.

 

Для общего развития ваше решение полезно (из предыдущего сообщения), но оставлю пока всё как есть. Сделанных изменений достаточно для работы. Ну и есть вероятность того, что это поправят со временем в первоисточнике.

 

Спасибо!

Ссылка на комментарий
Поделиться на других сайтах

не за что )

 

6 минут назад, RHCk сказал:

по наименованию всё отлично ищется, а по артикулу нет

 

по артикулу ищется, например, здесь ("Код товара")

/admin/index.php?route=catalog/product

Ссылка на комментарий
Поделиться на других сайтах

Уговорили:)))

 

Получается, что при очень большой необходимости проще будет здесь admin/index.php?route=sale/order/edit (вкладка Товар) добавить отдельное поле для кода товара, т.е. сделать аналогично тому, что имеется здесь  admin/index.php?route=catalog/product. Или проще не будет?:)

Ссылка на комментарий
Поделиться на других сайтах

  • 3 years later...
В 06.12.2015 at 03:37, savage4pro сказал:

решение касается только шаблона редактирования заказа, поэтому дополнение писать - пустое занятие, по этой же причине и в howto ему делать особо нечего, засорять только

 

шаблон admin/view/template/sale/order_form.tpl

находим


                      <label class="col-sm-2 control-label" for="input-product"><?php echo $entry_product; ?></label>
                      <div class="col-sm-10">
                        <input type="text" name="product" value="" id="input-product" class="form-control" />
                        <input type="hidden" name="product_id" value="" />
                      </div>

и после него добавляем


                      <label class="col-sm-2 control-label" for="input-product-model"></label>
                      <div class="col-sm-10">
                        <input type="text" name="product_model" value="" id="input-product-model" class="form-control" />
                      </div>

 

находим блок


$('#tab-product input[name=\'product\']').autocomplete({
...
});

заменяем его целиком на содержимое спойлера

  Показать содержимое



var product_selection = function(item) {
    $('#tab-product input[name=\'product\']').val(item['name']);
    $('#tab-product input[name=\'product_model\']').val(item['model']);
    $('#tab-product input[name=\'product_id\']').val(item['value']);

    if (item['option'] != '') {
      html  = '<fieldset>';
            html += '  <legend><?php echo $entry_option; ?></legend>';

      for (i = 0; i < item['option'].length; i++) {
        option = item['option'][i];

        if (option['type'] == 'select') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10">';
          html += '    <select name="option[' + option['product_option_id'] + ']" id="input-option' + option['product_option_id'] + '" class="form-control">';
          html += '      <option value=""><?php echo $text_select; ?></option>';

          for (j = 0; j < option['product_option_value'].length; j++) {
            option_value = option['product_option_value'][j];

            html += '<option value="' + option_value['product_option_value_id'] + '">' + option_value['name'];

            if (option_value['price']) {
              html += ' (' + option_value['price_prefix'] + option_value['price'] + ')';
            }

            html += '</option>';
          }

          html += '    </select>';
          html += '  </div>';
          html += '</div>';
        }

        if (option['type'] == 'radio') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10">';
          html += '    <select name="option[' + option['product_option_id'] + ']" id="input-option' + option['product_option_id'] + '" class="form-control">';
          html += '      <option value=""><?php echo $text_select; ?></option>';

          for (j = 0; j < option['product_option_value'].length; j++) {
            option_value = option['product_option_value'][j];

            html += '<option value="' + option_value['product_option_value_id'] + '">' + option_value['name'];

            if (option_value['price']) {
              html += ' (' + option_value['price_prefix'] + option_value['price'] + ')';
            }

            html += '</option>';
          }

          html += '    </select>';
          html += '  </div>';
          html += '</div>';
        }

        if (option['type'] == 'checkbox') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10">';
          html += '    <div id="input-option' + option['product_option_id'] + '">';

          for (j = 0; j < option['product_option_value'].length; j++) {
            option_value = option['product_option_value'][j];

            html += '<div class="checkbox">';

            html += '  <label><input type="checkbox" name="option[' + option['product_option_id'] + '][]" value="' + option_value['product_option_value_id'] + '" /> ' + option_value['name'];

            if (option_value['price']) {
              html += ' (' + option_value['price_prefix'] + option_value['price'] + ')';
            }

            html += '  </label>';
            html += '</div>';
          }

          html += '    </div>';
          html += '  </div>';
          html += '</div>';
        }

        if (option['type'] == 'image') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10">';
          html += '    <select name="option[' + option['product_option_id'] + ']" id="input-option' + option['product_option_id'] + '" class="form-control">';
          html += '      <option value=""><?php echo $text_select; ?></option>';

          for (j = 0; j < option['product_option_value'].length; j++) {
            option_value = option['product_option_value'][j];

            html += '<option value="' + option_value['product_option_value_id'] + '">' + option_value['name'];

            if (option_value['price']) {
              html += ' (' + option_value['price_prefix'] + option_value['price'] + ')';
            }

            html += '</option>';
          }

          html += '    </select>';
          html += '  </div>';
          html += '</div>';
        }

        if (option['type'] == 'text') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10"><input type="text" name="option[' + option['product_option_id'] + ']" value="' + option['value'] + '" id="input-option' + option['product_option_id'] + '" class="form-control" /></div>';
          html += '</div>';
        }

        if (option['type'] == 'textarea') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10"><textarea name="option[' + option['product_option_id'] + ']" rows="5" id="input-option' + option['product_option_id'] + '" class="form-control">' + option['value'] + '</textarea></div>';
          html += '</div>';
        }

        if (option['type'] == 'file') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label">' + option['name'] + '</label>';
          html += '  <div class="col-sm-10">';
          html += '    <button type="button" id="button-upload' + option['product_option_id'] + '" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-default"><i class="fa fa-upload"></i> <?php echo $button_upload; ?></button>';
          html += '    <input type="hidden" name="option[' + option['product_option_id'] + ']" value="' + option['value'] + '" id="input-option' + option['product_option_id'] + '" />';
          html += '  </div>';
          html += '</div>';
        }

        if (option['type'] == 'date') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-3"><div class="input-group date"><input type="text" name="option[' + option['product_option_id'] + ']" value="' + option['value'] + '" placeholder="' + option['name'] + '" data-date-format="YYYY-MM-DD" id="input-option' + option['product_option_id'] + '" class="form-control" /><span class="input-group-btn"><button type="button" class="btn btn-default"><i class="fa fa-calendar"></i></button></span></div></div>';
          html += '</div>';
        }

        if (option['type'] == 'datetime') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-3"><div class="input-group datetime"><input type="text" name="option[' + option['product_option_id'] + ']" value="' + option['value'] + '" placeholder="' + option['name'] + '" data-date-format="YYYY-MM-DD HH:mm" id="input-option' + option['product_option_id'] + '" class="form-control" /><span class="input-group-btn"><button type="button" class="btn btn-default"><i class="fa fa-calendar"></i></button></span></div></div>';
          html += '</div>';
        }

        if (option['type'] == 'time') {
          html += '<div class="form-group' + (option['required'] ? ' required' : '') + '">';
          html += '  <label class="col-sm-2 control-label" for="input-option' + option['product_option_id'] + '">' + option['name'] + '</label>';
          html += '  <div class="col-sm-3"><div class="input-group time"><input type="text" name="option[' + option['product_option_id'] + ']" value="' + option['value'] + '" placeholder="' + option['name'] + '" data-date-format="HH:mm" id="input-option' + option['product_option_id'] + '" class="form-control" /><span class="input-group-btn"><button type="button" class="btn btn-default"><i class="fa fa-calendar"></i></button></span></div></div>';
          html += '</div>';
        }
      }

      html += '</fieldset>';

      $('#option').html(html);

      $('.date').datetimepicker({
        pickTime: false
      });

      $('.datetime').datetimepicker({
        pickDate: true,
        pickTime: true
      });

      $('.time').datetimepicker({
        pickDate: false
      });
    } else {
      $('#option').html('');
    }
}

$('#tab-product input[name=\'product\']').autocomplete({
  'source': function(request, response) {
    $.ajax({
      url: 'index.php?route=catalog/product/autocomplete&token=<?php echo $token; ?>&filter_name=' +  encodeURIComponent(request),
      dataType: 'json',
      success: function(json) {
        response($.map(json, function(item) {
          return {
            label: item['name'],
            value: item['product_id'],
            name: item['name'],
            model: item['model'],
            option: item['option'],
            price: item['price']
          }
        }));
      }
    });
  },
  'select': function(item) {
    product_selection(item);
  }
});

$('#tab-product input[name=\'product_model\']').autocomplete({
  'source': function(request, response) {
    $.ajax({
      url: 'index.php?route=catalog/product/autocomplete&token=<?php echo $token; ?>&filter_model=' +  encodeURIComponent(request),
      dataType: 'json',
      success: function(json) {
        response($.map(json, function(item) {
          return {
            label: item['model'],
            value: item['product_id'],
            name: item['name'],
            model: item['model'],
            option: item['option'],
            price: item['price']
          }
        }));
      }
    });
  },
  'select': function(item) {
    product_selection(item);
  }
});

 

 

в итоге в блоке "Выберите товар" будет 2 поля, первое - так и остается поиском по имени, второе - по артикулу

После данных изменений вылазит ошибка при добавлении товара "Product can not be bought from the store you have choosen!" 

Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу