Исправление карты yandex
This commit is contained in:
parent
e6944c9b6b
commit
1d06acf2e0
|
@ -1,22 +1,10 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
namespace app\assets;
|
||||
|
||||
use yii;
|
||||
use yii\web\AssetBundle;
|
||||
use yii\web\View;
|
||||
|
||||
/**
|
||||
* Main application asset bundle.
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class AppAsset extends AssetBundle
|
||||
{
|
||||
public $basePath = '@webroot';
|
||||
|
@ -37,7 +25,7 @@ class AppAsset extends AssetBundle
|
|||
'js/bootstrap/bootstrap.min.js',
|
||||
'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js',
|
||||
'https://unpkg.com/cookielib/src/cookie.min.js',
|
||||
'https://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU',
|
||||
'https://api-maps.yandex.ru/2.1/?apikey=ff21ed7c-2d34-4f91-8d7f-2144ec3e4397&lang=ru_RU',
|
||||
'js/moment.min.js',
|
||||
'js/menu.js',
|
||||
'js/main.js',
|
||||
|
@ -45,7 +33,6 @@ class AppAsset extends AssetBundle
|
|||
'js/search.js',
|
||||
'js/notification.js',
|
||||
'js/reinitialization.js',
|
||||
'https://api-maps.yandex.ru/2.1/?apikey=0c4ba9aa-c448-4bd0-9c8c-6181f21ede90&lang=ru_RU',
|
||||
'js/yandex/metrika.js',
|
||||
'js/yandex/geolocation.js',
|
||||
'https://www.googletagmanager.com/gtag/js?id=G-6XYKBJJWR4',
|
||||
|
|
|
@ -286,6 +286,8 @@ class ProductController extends Controller
|
|||
$return['alert'] = "Товар удалён: $catn";
|
||||
$return['location'] = '/';
|
||||
} else {
|
||||
// Не удалось удалить
|
||||
|
||||
// Запись кода ответа
|
||||
yii::$app->response->statusCode = 500;
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace app\controllers;
|
||||
|
||||
use yii;
|
||||
use yii\web\Controller;
|
||||
use yii\web\Response;
|
||||
|
||||
use app\models\Terminal;
|
||||
|
||||
class TerminalController extends Controller
|
||||
{
|
||||
public function actionRead(): ?array
|
||||
{
|
||||
// Инициализация входных параметров
|
||||
$amount = (int) yii::$app->request->post('amount') ?? yii::$app->request->get('amount');
|
||||
|
||||
if ($amount < 501) {
|
||||
// Пройдена проверка
|
||||
|
||||
if (yii::$app->request->isPost) {
|
||||
// POST-запрос
|
||||
|
||||
// Запись формата ответа
|
||||
yii::$app->response->format = Response::FORMAT_JSON;
|
||||
|
||||
return [
|
||||
'terminals' => Terminal::read($amount),
|
||||
'_csrf' => yii::$app->request->getCsrfToken()
|
||||
];
|
||||
}
|
||||
} else {
|
||||
// Не пройдена проверка
|
||||
|
||||
// Запись кода ответа
|
||||
yii::$app->response->statusCode = 500;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -1,34 +1,36 @@
|
|||
<link href="/css/pages/partners.css" rel="stylesheet">
|
||||
<script src="https://api-maps.yandex.ru/2.1/?apikey=ff21ed7c-2d34-4f91-8d7f-2144ec3e4397&lang=ru_RU" type="text/javascript"></script>
|
||||
|
||||
<div id="page_partners" class="container mb-auto py-3">
|
||||
<article class="py-3 rounded">
|
||||
<div class="rounded overflow-hidden">
|
||||
<!-- @deprecated -->
|
||||
<!-- <iframe width="100%" height="400" src="https://maps.google.com/maps?width=800&height=300&hl=ru&q=%D0%A5%D0%B0%D0%B1%D0%B0%D1%80%D0%BE%D0%B2%D1%81%D0%BA%20%D0%9F%D1%80%D0%BE%D0%BC%D1%8B%D1%88%D0%BB%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F%203+(SkillParts)&ie=UTF8&t=&z=13&iwloc=B&output=embed" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe> -->
|
||||
|
||||
<div class="wrapper">
|
||||
<div id="cityShop" class="cityShop">
|
||||
<label for="cities" class="label">Выбор города</label>
|
||||
<input type="text" id="suggest" value="Поиск города">
|
||||
<div class="row">
|
||||
<div class="pr-0 col-3 terminals">
|
||||
<label for="cities" class="w-100 py-2 position-relative text-center text-white"><b>Выбор города</b></label>
|
||||
<div name="cities" id="cities">
|
||||
<!-- <ul id="shops" class="shops"></ul> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="map"></div>
|
||||
</div>
|
||||
|
||||
<div class="p-4">
|
||||
<div id="map" class="pl-0 col"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <pre>
|
||||
<?php
|
||||
// var_dump($terminals);
|
||||
?>
|
||||
</pre> -->
|
||||
</article>
|
||||
</div>
|
||||
|
||||
<script src="/js/yandex/ymap.js" defer></script>
|
||||
<script src="/js/yandex/map.js" defer></script>
|
||||
<script src="/js/yandex/provider.js" defer></script>
|
||||
|
||||
<script>
|
||||
if (document.readyState === "complete") {
|
||||
// Документ загружен
|
||||
|
||||
// Инициализация карты
|
||||
ymaps.ready(partners_yandex_map_init);
|
||||
} else {
|
||||
// Документ не загружен
|
||||
|
||||
// Обработчик события загрузки документа
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Инициализация карты
|
||||
ymaps.ready(partners_yandex_map_init);
|
||||
}, false);
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -1,64 +1,32 @@
|
|||
.wrapper {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
/* Выбор города */
|
||||
.label {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
|
||||
max-width: 240px;
|
||||
width: 100%;
|
||||
padding: 4px 0;
|
||||
|
||||
color: azure;
|
||||
#page_partners>article label {
|
||||
background-color: #123EAB;
|
||||
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
/* Блок городов */
|
||||
.cityShop {
|
||||
width: 240px;
|
||||
#page_partners>article .terminals {
|
||||
height: 400px;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
overflow-y: scroll;
|
||||
|
||||
scrollbar-width: none;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.cityShop::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
.cityShop::-webkit-scrollbar-thumb {
|
||||
background-color: #123EAB;
|
||||
border: 20px solid transparent;
|
||||
}
|
||||
|
||||
|
||||
.goto {
|
||||
#page_partners>article .goto {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
|
||||
margin-left: 25px;
|
||||
margin-top: 12px;
|
||||
margin-bottom: 5px;
|
||||
color: black;
|
||||
|
||||
max-width: 190px;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.goto:hover {
|
||||
#page_partners>article .goto:hover {
|
||||
font-weight: bold;
|
||||
border-bottom: 2px solid #123EAB;
|
||||
}
|
||||
|
||||
/* Карта */
|
||||
#map {
|
||||
max-width: 850px;
|
||||
width: 100%;
|
||||
#page_partners>article #map {
|
||||
height: 400px;
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
function partners_yandex_map_init() {
|
||||
// Функция ymaps.ready() будет вызвана, когда
|
||||
// загрузятся все компоненты API, а также когда будет готово DOM-дерево.
|
||||
let myMap;
|
||||
let placemarkCollections = {};
|
||||
let placemarkList = {};
|
||||
|
||||
// Создаем карту
|
||||
myMap = new ymaps.Map("map", {
|
||||
center: [48.486518, 135.115512],
|
||||
zoom: 15,
|
||||
controls: [
|
||||
'zoomControl'
|
||||
],
|
||||
zoomMargin: [20]
|
||||
});
|
||||
|
||||
|
||||
let terminals = partners_terminals_read();
|
||||
|
||||
for (let i = 0; i < shopList.length; i++) {
|
||||
|
||||
// Добавляем название города в список
|
||||
$('div#cities').append('<a href="#" id="goto" class="goto" data-goto= ' + i + ' title=' + shopList[i].cityName + '>' + shopList[i].cityName + '</a>')
|
||||
|
||||
// Создаём коллекцию меток для города
|
||||
let cityCollection = new ymaps.GeoObjectCollection();
|
||||
|
||||
for (let c = 0; c < shopList[i].shops.length; c++) {
|
||||
let shopInfo = shopList[i].shops[c];
|
||||
|
||||
let 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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function partners_terminals_read(amount = 300) {
|
||||
let terminals;
|
||||
|
||||
$.ajax({
|
||||
url: '/terminals/read',
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
'_csrf': yii.getCsrfToken(),
|
||||
amount
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
|
||||
if (data !== undefined) {
|
||||
// Получены данные с сервера
|
||||
|
||||
// Список терминалов
|
||||
if (data.terminals !== undefined) {
|
||||
|
||||
terminals = data.terminals;
|
||||
}
|
||||
}
|
||||
|
||||
return yandex_map_response(data, status, xhr);
|
||||
},
|
||||
error: yandex_map_response_error
|
||||
});
|
||||
|
||||
return terminals;
|
||||
}
|
||||
|
||||
// Переключение города
|
||||
$('div#cities').on('click', 'a#goto', function () {
|
||||
let 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 (let c = 0; c < shopList[cityId].shops.length; c++) {
|
||||
// $('#shops').append('<li value="' + c + '">' + shopList[cityId].shops[c].name + '</li>');
|
||||
// }
|
||||
});
|
||||
|
||||
|
||||
function yandex_map_response(data, status, xhr) {
|
||||
// Обработка ответов
|
||||
|
||||
main_response(data, status, xhr);
|
||||
};
|
||||
|
||||
function yandex_map_response_success(data, status, xhr) {
|
||||
// Обработка ответов от удавшихся запросов
|
||||
|
||||
yandex_map_response(data, status, xhr);
|
||||
};
|
||||
|
||||
function yandex_map_response_error(data, status, xhr) {
|
||||
// Обработка ответов от неудавшихся запросов
|
||||
|
||||
// Инициализация
|
||||
data = data.responseJSON;
|
||||
|
||||
yandex_map_response(data, status, xhr);
|
||||
};
|
|
@ -1,96 +0,0 @@
|
|||
// Список городов и филиалов в них
|
||||
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'},
|
||||
]
|
||||
},
|
||||
];
|
|
@ -1,77 +0,0 @@
|
|||
// Функция 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('<a href="#" id="goto" class="goto" data-goto= ' + i + ' title=' + shopList[i].cityName + '>' + shopList[i].cityName + '</a>')
|
||||
|
||||
// Создаём коллекцию меток для города
|
||||
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('<li value="' + c + '">' + shopList[cityId].shops[c].name + '</li>');
|
||||
// }
|
||||
|
||||
});
|
||||
|
Reference in New Issue