Вывод города по алфавиту - instantcms 2.3.0

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

После правки регионов и городов они не сортируются по алфавиту.

#1 17 января 2016 в 23:21
Добрый вечер друзья. Помогите решить проблему, сегодня правил базу регионов и городов. После сохранения правок, регионы и города не сортируются по алфавиту, вернее добавленные города внизу списка. Нашёл тему где эта проблема решена, но манипуляции приведенные там не помогли. То есть изменив сортировку таблицы cms_geo_cities выбрав name (столбец) по возрастанию не помогло.
Самое главное, что в профилях пользователей с сортировкой все путём. Сортировка не работает при выборе региона и города при регистрации, при поиске и везде где используется виджет выбора страна-регион-город. Спасибо заранее за помощь.
#2 17 января 2016 в 23:50
Андрей, поищите по форуму еще, если не ошибаюсь где-то было еще одно решение (не то которое вы привели по ссылке)
вот тут поднималась похожая проблема. Попробуйте спросить у Dmitry'я вариант решения (я его не сохранял, но смысл был в сортировке на стороне клиента).
#3 18 января 2016 в 15:32
Присоединяюсь к вопросу. Тоже интересно как на стороне клиента сделать сортировку регионов и городов по алфавиту.
#4 18 января 2016 в 21:22
Благодаря Val проблема решена, выкладываю его решение. В файле .../templates/ваш_шаблон/js/geo.js после строки 39 добавить
  1. child_list.html(
  2. child_list.find('option').sort(function(a, b){
  3. return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
  4. })
  5. );
Полный файл
  1. var icms = icms || {};
  2.  
  3. icms.geo = (function ($) {
  4.  
  5. //====================================================================//
  6.  
  7. this.changeParent = function(list, child_list_id) {
  8.  
  9. var geo_window = $('#geo_window');
  10. var geo_form = $('form', geo_window);
  11.  
  12. var id = $(list).val();
  13.  
  14. var child_list = $('select[name='+child_list_id+']', geo_form);
  15.  
  16. if (id == 0) {
  17. child_list.parent('.list').hide();
  18. if (child_list_id=='regions'){
  19. $('select[name=cities]', geo_form).parent('.list').hide();
  20. }
  21. $('.buttons', geo_window).hide();
  22. return false;
  23. }
  24.  
  25. var url = geo_form.data( 'items-url' );
  26.  
  27. $.post(url, {type: child_list_id, parent_id: id}, function(result){
  28.  
  29. if (result.error) { return false; }
  30.  
  31. child_list.html('');
  32.  
  33. for(var item_id in result.items){
  34.  
  35. var item_name = result.items[item_id];
  36.  
  37. child_list.append( '<option value="'+ item_id +'">' + item_name +'</option>' );
  38.  
  39. }
  40.  
  41. child_list.html(
  42. child_list.find('option').sort(function(a, b){
  43. return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
  44. })
  45. );
  46.  
  47. child_list.parent('.list').show();
  48.  
  49. if (child_list_id != 'cities'){
  50. icms.geo.changeParent(child_list, 'cities');
  51. }
  52.  
  53. }, 'json');
  54.  
  55. }
  56.  
  57. //====================================================================//
  58.  
  59. this.changeCity = function(list){
  60.  
  61. var geo_window = $('#geo_window');
  62. var geo_form = $('form', geo_window);
  63.  
  64. var id = $(list).val();
  65.  
  66. if (id > 0) {
  67. $('.buttons', geo_window).show();
  68. } else {
  69. $('.buttons', geo_window).hide();
  70. }
  71.  
  72. }
  73.  
  74. //====================================================================//
  75.  
  76. this.selectCity = function(target_id){
  77.  
  78. var list = $('#geo_window form select[name=cities]');
  79.  
  80. var id = list.val();
  81. var name = $('option:selected', list).html();
  82.  
  83. if (!id){ return false; }
  84.  
  85. var widget = $('#geo-widget-'+target_id);
  86.  
  87. $('.city-id', widget).val(id);
  88. $('.city-name', widget).html(name).show();
  89.  
  90. icms.modal.close();
  91.  
  92. }
  93.  
  94. //====================================================================//
  95.  
  96. return this;
  97.  
  98. }).call(icms.geo || {},jQuery);
  99.  
Данные с сервера приходят не по алфавиту, а уже на стороне клиента в цикле мы их сортируем и показываем. Немного нагружаем проц. клиента, но города по алфавиту. (пояснение Val)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.