From e6944c9b6b29e528545534536331a3d917f14be4 Mon Sep 17 00:00:00 2001 From: Leonid Date: Tue, 12 Oct 2021 14:34:31 +1000 Subject: [PATCH] yandex maps --- .../system/controllers/PartnersController.php | 5 +- mirzaev/skillparts/system/models/Document.php | 10 ++ .../system/views/partners/index.php | 25 ++++- .../system/web/css/pages/partners.css | 64 +++++++++++++ .../system/web/js/yandex/provider.js | 96 +++++++++++++++++++ .../skillparts/system/web/js/yandex/ymap.js | 77 +++++++++++++++ 6 files changed, 275 insertions(+), 2 deletions(-) create mode 100644 mirzaev/skillparts/system/web/js/yandex/provider.js create mode 100644 mirzaev/skillparts/system/web/js/yandex/ymap.js diff --git a/mirzaev/skillparts/system/controllers/PartnersController.php b/mirzaev/skillparts/system/controllers/PartnersController.php index 2fc30ec..3601332 100644 --- a/mirzaev/skillparts/system/controllers/PartnersController.php +++ b/mirzaev/skillparts/system/controllers/PartnersController.php @@ -6,10 +6,13 @@ namespace app\controllers; use yii\web\Controller; +use app\models\Terminal; + class PartnersController extends Controller { public function actionIndex() { - return $this->render('/partners/index'); + $terminals = Terminal::read(500); + return $this->render('/partners/index', compact('terminals')); } } diff --git a/mirzaev/skillparts/system/models/Document.php b/mirzaev/skillparts/system/models/Document.php index 2c26835..7c3a3f5 100644 --- a/mirzaev/skillparts/system/models/Document.php +++ b/mirzaev/skillparts/system/models/Document.php @@ -142,12 +142,22 @@ abstract class Document extends ActiveRecord /** * Чтение всех записей + * + * @deprecated */ public static function readAll(): array { return static::find()->all(); } + /** + * Чтение записей по максимальному ограничению + */ + public static function read(int $limit = 100): array + { + return static::find()->limit($limit)->all(); + } + /** * Чтение количества записей */ diff --git a/mirzaev/skillparts/system/views/partners/index.php b/mirzaev/skillparts/system/views/partners/index.php index 827a008..b24d0c6 100644 --- a/mirzaev/skillparts/system/views/partners/index.php +++ b/mirzaev/skillparts/system/views/partners/index.php @@ -1,11 +1,34 @@ +
- + + + +
+
+ + +
+ +
+
+ +
+
+
+
+ + + diff --git a/mirzaev/skillparts/system/web/css/pages/partners.css b/mirzaev/skillparts/system/web/css/pages/partners.css index e69de29..e4a1e2e 100644 --- a/mirzaev/skillparts/system/web/css/pages/partners.css +++ b/mirzaev/skillparts/system/web/css/pages/partners.css @@ -0,0 +1,64 @@ +.wrapper { + display: flex; + justify-content: space-between; +} + +/* Выбор города */ +.label { + text-align: center; + font-weight: bold; + + max-width: 240px; + width: 100%; + padding: 4px 0; + + color: azure; + background-color: #123EAB; + + position: fixed; +} + +/* Блок городов */ +.cityShop { + width: 240px; + height: 400px; + + background-color: #fff; + + overflow-y: scroll; + +} + +.cityShop::-webkit-scrollbar { + width: 5px; + } + + .cityShop::-webkit-scrollbar-thumb { + background-color: #123EAB; + border: 20px solid transparent; + } + + +.goto { + display: block; + text-decoration: none; + + margin-left: 25px; + margin-top: 12px; + margin-bottom: 5px; + color: black; + + max-width: 190px; +} + +.goto:hover { + font-weight: bold; + border-bottom: 2px solid #123EAB; +} + +/* Карта */ +#map { + max-width: 850px; + width: 100%; + height: 400px; +} \ No newline at end of file diff --git a/mirzaev/skillparts/system/web/js/yandex/provider.js b/mirzaev/skillparts/system/web/js/yandex/provider.js new file mode 100644 index 0000000..d78b4c6 --- /dev/null +++ b/mirzaev/skillparts/system/web/js/yandex/provider.js @@ -0,0 +1,96 @@ + // Список городов и филиалов в них + var shopList = [ + { + 'cityName': 'Архангельск', + 'shops': [ + {'coordinates': [64.539304, 40.518735], 'name': 'Рязанский проспект, 6Ас21'}, + ] + }, + { + 'cityName': 'Владивосток', + 'shops': [ + {'coordinates': [43.134019, 131.928379], 'name': 'Рязанский проспект, 6Ас21'}, + ] + }, + { + 'cityName': 'Екатеринбург', + 'shops': [ + {'coordinates': [56.838002, 60.597295], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Калининград', + 'shops': [ + {'coordinates': [55.916229, 37.854467], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Краснодар', + 'shops': [ + {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'}, + ] + }, + { + 'cityName': 'Красноярск', + 'shops': [ + {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, + {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} + ] + }, + { + 'cityName': 'Комосомольск-на-Амуре', + 'shops': [ + {'coordinates': [50.54986, 137.007867], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Москва', + 'shops': [ + {'coordinates': [55.72532368326033, 37.748675112058876], 'name': 'Рязанский проспект, 6Ас21'}, + ] + }, + { + 'cityName': 'Мурманск', + 'shops': [ + {'coordinates': [68.96956299999999, 33.07454], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Находка', + 'shops': [ + {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Новосибирск', + 'shops': [ + {'coordinates': [55.028739, 82.90692799999999], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Омск', + 'shops': [ + {'coordinates': [54.989342, 73.368212], 'name': 'Будапештская улица, 36к2'}, + ] + }, + { + 'cityName': 'Санкт-Петербург', + 'shops': [ + {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, + {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} + ] + }, + { + 'cityName': 'Сочи', + 'shops': [ + {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, + {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} + ] + }, + { + 'cityName': 'Хабаровск', + 'shops': [ + {'coordinates': [48.486518, 135.115512], 'name': 'Промышленная, 3'}, + ] + }, + ]; \ No newline at end of file diff --git a/mirzaev/skillparts/system/web/js/yandex/ymap.js b/mirzaev/skillparts/system/web/js/yandex/ymap.js new file mode 100644 index 0000000..aaacac6 --- /dev/null +++ b/mirzaev/skillparts/system/web/js/yandex/ymap.js @@ -0,0 +1,77 @@ +// Функция ymaps.ready() будет вызвана, когда + // загрузятся все компоненты API, а также когда будет готово DOM-дерево. + var myMap; + var placemarkCollections = {}; + var placemarkList = {}; + + + + ymaps.ready(init); + + function init() { + + // Создаем карту + myMap = new ymaps.Map("map", { + center: [48.486518, 135.115512], + zoom: 15, + controls: [ + 'zoomControl' + ], + zoomMargin: [20] + }); + + // var suggestView1 = new ymaps.SuggestView('suggest', { results: 3}); + + for (var i = 0; i < shopList.length; i++) { + + // Добавляем название города в список + $('div#cities').append('' + shopList[i].cityName + '') + + // Создаём коллекцию меток для города + var cityCollection = new ymaps.GeoObjectCollection(); + + for (var c = 0; c < shopList[i].shops.length; c++) { + var shopInfo = shopList[i].shops[c]; + + var shopPlacemark = new ymaps.Placemark( + shopInfo.coordinates, + { + hintContent: shopInfo.name, + balloonContent: shopInfo.name, + }, + ); + + if (!placemarkList[i]) placemarkList[i] = {}; + placemarkList[i][c] = shopPlacemark; + + // Добавляем метку в коллекцию + cityCollection.add(shopPlacemark); + + } + + placemarkCollections[i] = cityCollection; + + // Добавляем коллекцию на карту + myMap.geoObjects.add(cityCollection); + + } + + } + + // Переключение города + $('div#cities').on('click', 'a#goto', function () { + var cityId = $(this).attr('data-goto'); + + // Масштабируем и выравниваем карту так, чтобы были видны метки для выбранного города + myMap.setBounds(placemarkCollections[cityId].getBounds(), {checkZoomRange:true}).then(function(){ + if(myMap.getZoom() > 15) myMap.setZoom(15); // Если значение zoom превышает 15, то устанавливаем 15. + }); + + // Добавление списка филиалов определенного города + // $('#shops').html(''); + // for (var c = 0; c < shopList[cityId].shops.length; c++) { + // $('#shops').append('
  • ' + shopList[cityId].shops[c].name + '
  • '); + // } + + }); +