h-i

Замена jquery-ui autocomplete на Select2

Recommended Posts

Собственно, сабж. Пытаюсь всевозможно снизить количество загружаемых объёма скриптов, заметил что jquery-ui на стандартном шаблоне используется только для слайдера (который успешно заменил на ion.rangeSlider) и для автокомплита (поправьте, если ошибаюсь). Кто-нибудь уже пытался прикрутить Select2 к полю с автокомплитом? Если нет, то в каком направлении копать? Пытался копаться в файле refresher.functions.js, но не удалось сделать так, чтобы Select2 запрашивал данные (проверял через вкладку Network в отладке хрома). 

 

И ещё мини-вопрос не совсем по теме:

Что отвечает за наполнение

{foreach from=$scripts item=script}	{$script}{/foreach}

?

 

УПД. Кривенько кое-что сделал, потом распишу кому интересно.

Изменено пользователем h-i

Поделиться сообщением


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

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

 

Собственно на самом деле ничего сложного нет:

1. Подключаем собственно select2.

2. Идём в /apps/system/js/refresher.functions.js (естественно этот функционал можно вынести куда-то ещё, чтобы при обновлении не затирался), находим код 

$(document).ready(function(){

и вырезаем всё после включительно.

3. Вместо него вставляем вот это:

function formatList (list) {var markup = '<div class="clearfix">' +'<div class="col-sm-12">' + list.text + '</div>' +'</div>';return markup;}$(document).ready(function(){	$('.geoautocomplete').each(function(){		var _this=$(this);		var _pk=$(this).attr('pk');		var _table=$(this).attr('from');				_this.select2({		  ajax: {			url: '/apps/tlocation/js/ajax.php',			dataType: 'json',			delay: 200,			data: function (params) {			  return {				action: 'get_geolist',				from: _table,				term: params.term			  };			},			processResults: function (data) {				return {					results: $.map(data, function(post) {						return {							id: post[_pk],							text: post.name,						};					})				};			},			cache: true		  },		  escapeMarkup: function (markup) { return markup; },		  minimumInputLength: 1,		  templateResult: formatList		});	});});

Функция formatList отвечает за вывод результатов, я использую Бутстрап3, соответственно класс col* может подойти не всем.

4. Затем идём в /apps/system/lib/system/form/form_generator.php, ищем там

return '<div class="geoautocomplete_block"><select class="geoautocomplete">

и заменяем всю строку на

return '<div class="geoautocomplete_block"><select class="geoautocomplete" name="'.$item_array['name'].'" value="'.$value.'" pk="'.$item_array['primary_key_name'].'" from="'.$item_array['primary_key_table'].'" /></select></div>';

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

Естественно, всё это не без проблем (к примеру, после поиска поля с автокомплитом автоматически не заполняются), но думаю доделать можно, если знать как.

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас