InstantMaps 2, центр карты

#1 30 ноября 2015 в 10:49
Добрый день, скажите пожалуйста, как сделать, что бы в каждой категории в InstantMaps 2, был собственный центр карты.

Например при переходе в категорию "Категория1" отображался "Город1", при переходе в "Категория2" отображался "Город2".

А в связи с тем, что сейчас в настройках InstantMaps стоит город по умолчанию "Город1", то, при выборе Категории2 отображается Город1, если использовать настройку "Использовать фильтр по городам", тогда при переходе в Категорию2 человек видит пустую страницу с просьбой выбрать свой город, что я считаю не совсем приятно пользователям.
#2 1 декабря 2015 в 20:31
Присоединяюсь
#3 1 декабря 2015 в 23:16
В общем так. Пивом и руками знакомого программиста было сделано таким образом.

В файле \www\templates\TEMPLATE\content\places_list.tpl.php

Поменять этот код
  1.  
  2. <script>
  3. icms.mapsList.init('map-canvas', {
  4. zoom: <?php echo $options['zoom'] + 1; ?>,
  5. min_zoom: <?php echo $options['min_zoom'] + 1; ?>,
  6. max_zoom: <?php echo $options['max_zoom'] + 1; ?>,
  7. center: [<?php echo nf($center[0], 4); ?>, <?php echo nf($center[1], 4); ?>],
  8. city_addr: <?php echo $city_full && empty($city['lat']) ? "'{$city_full}'" : 'false'; ?>,
  9. city_id: <?php echo $city ? $city['id'] : 'false'; ?>,
  10. map_type: '<?php echo $options['map_type']; ?>',
  11. map_type_select: <?php echo $options['map_type_select'] ? 'true' : 'false'; ?>,
  12. scroll_zoom: <?php echo $options['scroll_zoom'] ? 'true' : 'false'; ?>,
  13. bounds: <?php echo $options['mk_bounds'] ? 'true' : 'false'; ?>,
  14. filter: '<?php echo $map_filter; ?>',
  15. load_url: '<?php echo href_to('places', 'markers'); ?>',
  16. icons_url: '<?php echo cmsConfig::get('upload_host') . '/markers'; ?>',
  17. balloon_url: '<?php echo href_to('places', 'balloon'); ?>',
  18. city_save_url: '<?php echo href_to('places', 'city_save'); ?>',
  19. delay: '<?php echo $options['mk_delay']; ?>'
  20. });
  21. </script>
На этот

  1. <script>
  2. var mapOptions = {
  3. zoom: <?php echo $options['zoom'] + 1; ?>,
  4. min_zoom: <?php echo $options['min_zoom'] + 1; ?>,
  5. max_zoom: <?php echo $options['max_zoom'] + 1; ?>,
  6. center: [<?php echo nf($center[0], 4); ?>, <?php echo nf($center[1], 4); ?>],
  7. city_addr: <?php echo $city_full && empty($city['lat']) ? "'{$city_full}'" : 'false'; ?>,
  8. city_id: <?php echo $city ? $city['id'] : 'false'; ?>,
  9. map_type: '<?php echo $options['map_type']; ?>',
  10. map_type_select: <?php echo $options['map_type_select'] ? 'true' : 'false'; ?>,
  11. scroll_zoom: <?php echo $options['scroll_zoom'] ? 'true' : 'false'; ?>,
  12. bounds: <?php echo $options['mk_bounds'] ? 'true' : 'false'; ?>,
  13. filter: '<?php echo $map_filter; ?>',
  14. load_url: '<?php echo href_to('places', 'markers'); ?>',
  15. icons_url: '<?php echo cmsConfig::get('upload_host') . '/markers'; ?>',
  16. balloon_url: '<?php echo href_to('places', 'balloon'); ?>',
  17. city_save_url: '<?php echo href_to('places', 'city_save'); ?>',
  18. delay: '<?php echo $options['mk_delay']; ?>'
  19. };
  20.  
  21. (function(){
  22. icms.mapsList.onMapReadyOriginal = icms.mapsList.onMapReady;
  23. icms.mapsList.onMapReady = function(){
  24. icms.mapsList.onMapReadyOriginal();
  25. if (typeof(setCoordinate) == 'function') {
  26. setCoordinate();
  27. }
  28. }
  29. })();
  30.  
  31. var sMap = icms.mapsList.init('map-canvas', mapOptions);
  32. </script>

Создать виджет HTML убрать тайтл и добавить такой код:
  1. <script>
  2. function setCoordinate() {
  3. icms.map.setCenter([XX.XXXXX, YY.YYYY]);
  4. }
  5. </script>
где XX.XXXXX, YY.YYYY — нужные координаты центра карты

Виджет расположить на ту страницу, где нужна смена центра карты. Я использовал Создание страницы для привязки виджетовс маской вида places/city1 Таких страниц придется создать для каждой страницы где нужно указать свой центр

На странице настройки компонента по желанию снять галочку "Использовать фильтр по городам", лично мне она не к чему. Если хотите оставить, тогда придется играться с выбором города. Но думаю если у вас своя категория для каждого города, эта галочка вообще ненужна.

Два недостатка:
1. На странице категории сначала грузит центр карты с настройки компонента, а потом сразу же меняет на центр карты указанный в виджете, т.е. присутствует небольшое "мигание", думаю особого дискомфорта не должно вызвать. Конечно же, можно было бы сделать более изящно, но пришлось бы ковырять \www\templates\TEMPLATE\js\maps\list.js и другие скрипты карты, а хотелось всё таки минимум правок.

2. На странице категории видна белая полоска виджета. Поэтому я её убрал в футер. И опять же, в виджет после </script> можно добавить любой текст, например SEO текст или ещё как-то обыграть, что бы "по чем зря" не валялся :)
#4 2 декабря 2015 в 08:16
Класс, спасибо большое. Сейчас буду пробовать
#5 8 декабря 2015 в 14:03


Добрый день, скажите пожалуйста, как сделать, что бы в каждой категории в InstantMaps 2, был собственный центр карты.

Например при переходе в категорию "Категория1" отображался "Город1", при переходе в "Категория2" отображался "Город2".

А в связи с тем, что сейчас в настройках InstantMaps стоит город по умолчанию "Город1", то, при выборе Категории2 отображается Город1, если использовать настройку "Использовать фильтр по городам", тогда при переходе в Категорию2 человек видит пустую страницу с просьбой выбрать свой город, что я считаю не совсем приятно пользователям.

asa

Если еще актуально, то можно использовать хук instantcms.ru/forum/thread22006.html#210416
#6 8 декабря 2015 в 15:04
Максим, спасибо, попробую Ваш хук и если он удобнее оставлю Ваш.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.