Select2 для выбора доступных полей экспорта

@cs-cart_team Смените, пожалуйста, контрол выбора доступных полей экспорта на Select2. Он гораздо удобнее в использовании, в особенности, когда полей становится очень много. Купив модуль от @ecomlabs Характеристики в отдельных колонках все характеристики магазина (почти 1000 шт.) идут в хаотичном списке без какого-либо нормального поиска.

Вот как сейчас

Вот мы сделали для себя (хотелось бы, чтобы это было в ядре):

4 лайка

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

Будет же поиск и прокрутка.

Подскажите что куда прописать, чтобы так сделать, пожалуйста.

А теперь представьте нового пользователя который не знает поля и какой ему поиск? А прокрутка с модулем особенно ecomlabs не вариант =}

А если человек не знает как называется поле, он кликает в строку и ему весь список показывается. Начинает вводить в строке буквы, список сокращается. Посмотрите как работает этот встроенный в CS-Cart контрол в расширенном поиске товаров по фильтрам. Принцип такой же.

Нужно сделать овверайд шаблона /backend/views/exim/components/selectboxes.tpl. Хуки там не предусмотрены.
Найти строчку
<select id="{$left_id}_right" name="unset_mbox[]" multiple="multiple" class="input-full toll-select">

и заменить ее на

<select id="{$left_id}_right" name="unset_mbox[]" multiple="multiple" class="cm-object-selector toll-select"
	        data-ca-placeholder={__("search")}
            data-ca-enable-images="false"
            data-ca-enable-search="true"
            data-ca-close-on-select="false"
	        data-ca-allow-clear="true"
	        >
2 лайка

@AndreyJ, еще не забудьте стиль добавить

.select2-container .select2-search--inline .select2-search__field {
    padding-right: 0!important;
} 

Чтобы строка поиска не терялась после выбора поля. Непонятно зачем в CS-Cart добавили padding-right: 50px; для этого селектора. Из-за этого не видно буквы, которые вводишь.

1 лайк

Получилось?

Да, все круто работает.
Спасибо!
путь немного другой
\design\backend\templates\views\exim\components\selectboxes.tpl
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

1 лайк

Да, верно! :slight_smile: Ну, вы в любом случае поняли…

В настройках модуля от @ecomlabs можно включить опцию “показывать Группы характеристик рядом с названиями”, поиск в Select2 ищет также по названиям групп, что очень удобно, если нужно выбрать сразу несколько характеристик из группы. У вас эта опция отключена, судя по скриншоту или у характеристик нет групп?

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

Добавить в ядро еще одну нашу модификацию, было бы очень полезно, уважаемые @cs-cart_team! Чтобы не поддерживать ее при обновлениях.

При импорте вы используете обязательное поле Product_code, но для чего у вас сейчас выгружается поле Product_id не совсем понятно! Бывают случаи, когда нужно у товаров массово изменить product_code, но с текущим импортом это сделать невозможно. Мы модифицировали импорт таким образом, что если в файле CSV есть колонка product_id, то импорт проходит по этому полю, таким образом у товара заменяется значение product_code на новое, если колонки product_id нет в импортируемом файле, то товары идентифицируются по полю product_code. Надеюсь написал понятно :slight_smile:

1 лайк

Инструкцию тоже дадите? ))

Вы из украинского рынка или российского?

В общем предыдущее удалил, что еще тут полемика не пошла. Написал в личку.

оверрайдом здесь не обойтись, нужно править файл ядра.
app/functions/fn.exim.php

Найти участок кода
if ($skip_get_primary_object_id) {
$primary_object_id = array();
} else {
$where = array();
foreach ($_alt_keys as $field => $value) {
if (is_array($value)) {
$where[] = db_quote("?p IN (?a)", $field, $value);
} else {
$where[] = db_quote("?p = ?s", $field, $value);
}
}
$where = implode(’ AND ‘, $where);
$primary_object_id = db_get_row(‘SELECT ’ . implode(’, ‘, $pattern[‘key’]) . ’ FROM ?:’ . $pattern[‘table’] . ’ WHERE ?p’, $where);
}

и заменить на

if ($skip_get_primary_object_id) {
            $primary_object_id = array();
        } else {
            //@mod ** Если в прайсе есть колонка product_id, то обновляем по нему, а не по product_code
			if ($_primary_fields['product_id']) {
				$primary_object_id['product_id'] = $_primary_fields['product_id'];
			} else {
	            $where = array();
	            foreach ($_alt_keys as $field => $value) {
	                if (is_array($value)) {
	                    $where[] = db_quote("?p IN (?a)", $field, $value);
	                } else {
	                    $where[] = db_quote("?p = ?s", $field, $value);
	                }	
	            }
	            $where = implode(' AND ', $where);	            
	            $primary_object_id = db_get_row('SELECT ' . implode(', ', $pattern['key']) . ' FROM ?:' . $pattern['table'] . ' WHERE ?p', $where);
	        }
        }
2 лайка