mapsobj.blade.php 25.3 KB
@extends('layout.site', ['title' => 'Объекты на карте RentTorg'])

@section('filter')
    @include('part.filter.mapsobj')
@endsection

@section('custom_js')
    @include('js.filter_value')
    <script>
        function setGeneralMap() {

            if (document.querySelector('#general-map')) {

                ymaps.ready(init); // Дождёмся загрузки API и готовности DOM;

                function init() {

                    const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id;
                        center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования;
                        zoom: 10,
                        controls: [] // Скрываем элементы управления на карте;
                    });

                    // Создаём макет содержимого.
                    const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
                        '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
                    );

                    let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива);
                        // preset: 'islands#yellowIcon'
                    });

                    let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте);
                        @if (!empty($input))
                            @if ($houses->count())
                                @foreach ($houses as $house)
                                    [{{ $house->coord_x }}, {{$house->coord_y}}],
                                @endforeach
                            @endif
                       @else
                       @if ($areas->count())
                            @foreach ($areas as $area)
                                [{{ $area->coord_x }}, {{$area->coord_y}}],
                            @endforeach
                        @endif
                       @endif
                       // [55.867783219108354, 37.392867499999916],
                       // [55.728043075486504, 37.73937949999994],
                       // [55.72624100423305, 37.476078499999964],
                       // [55.80751105044832, 37.449622999999974],
                       // [55.601783098948836, 37.36700499999998],
                       // [55.86086502152225, 37.540348999999964],
                       // [55.784961528728715, 37.56188599999996],
                       // [55.63910010399773, 37.319407999999996],
                       // [55.55819256767507, 37.55711549999994],
                       // [55.79829252928473, 37.52063549999999],
                    ];

                    for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию;
                        collection.add(new ymaps.Placemark(collectionCoords[i]));
                        collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent';
                    }

                    myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту;

                    collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета;
                    collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки;
                    collection.options.set('iconImageSize', [52, 67]); // Размеры метки;
                    collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
                    collection.options.set('iconContentOffset', [0, 17]);
                    collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);

                    const pageMapBar = document.querySelector('.js_page_map_bar');
                    const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn');
                    const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list');
                    const pageMapBarCards = pageMapBar.querySelectorAll('.card-news');

                    const showCard = (i) => {

                        pageMapBarCards.forEach((card, k) => {

                            card.classList.remove('active');

                            if (i == k) {
                                card.classList.add('active');
                            }

                        });

                    };

                    const hidecard = () => {

                        pageMapBarCards.forEach(card => {
                            card.classList.remove('active');
                        });

                    }

                    let pageMapBarItems;

                    pageMapBarBtn.addEventListener('click', () => {
                        pageMapBar.classList.toggle('active');
                    });

                    pageMapBarList.addEventListener('click', (e) => {

                        if (e.target.closest('.page-map-bar__item')) {

                            pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');

                            pageMapBarItems.forEach((item, i) => {

                                if (e.target == item && e.target.classList.contains('active')) {

                                    item.classList.remove('active');

                                    hidecard();

                                } else if (e.target == item) {

                                    pageMapBarItems.forEach(item => {
                                        item.classList.remove('active');
                                    });

                                    item.classList.add('active');

                                    let offsetCoords = collection.get(i).geometry.getCoordinates();

                                    offsetCoords = [
                                        offsetCoords[0] - 0.0025,
                                        offsetCoords[1]
                                    ];

                                    myMap.setZoom(16);
                                    // myMap.setCenter(collection.get(i).geometry.getCoordinates());
                                    myMap.setCenter(offsetCoords);

                                    showCard(i);

                                }

                            });
                        }

                    });

                    collection.events.add('click', function (e) {

                        for (let i = 0, l = collection.getLength(); i < l; i++) {

                            if (e.get('target') == collection.get(i)) {

                                pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');

                                pageMapBarItems.forEach((item) => {
                                    pageMapBar.classList.add('active');
                                    item.classList.remove('active');
                                });

                                pageMapBarItems[i].classList.add('active');

                                showCard(i);

                            }

                        }

                    });

                }

            }

        }

        setGeneralMap();
    </script>
@endsection

@section('content')
    <section class="page-map">
        <div class="page-map__wrap">
            <h2 class="visually-hidden">Карта</h2>
            <div class="page-map__map" id="general-map"></div>
            <div class="container">
                <div class="page-map__inner">
                    <div class="page-map-bar js_page_map_bar active">
                        <div class="page-map-bar__top">Все объекты
                            <button class="page-map-bar__close js_page_map_bar_btn" type="button">
                                <svg width="20" height="20">
                                    <use xlink:href="images/sprite.svg#popup-close"></use>
                                </svg>
                            </button>
                        </div>

                         @if (!empty($input))
                            <ul class="page-map-bar__list js_page_map_bar_list">
                                @if ($houses->count())
                                    @foreach ($houses as $house)
                                        <li class="page-map-bar__item">{{ $house->title }}</li>
                                @endforeach
                            @endif
                            </ul>
                            @if ($houses->count())
                                @foreach ($houses as $house)
                                    <div class="card-news">
                                        <div class="card-news__top">
                                            <img src="/storage/app/public/<?=$house->foto_main;//=asset(Storage::url($house->foto_main)) ?>" alt="Превью по {{$house->title}}" loading="lazy">

                                            <div class="card-news__date"><span>{{ $house->title }}</span><span></span></div>
                                        </div>
                                        <div class="card-news__cnt">
                                            <p class="card-news__descr">{{ $house->description_house }}</p>
                                            <a class="card-news__link" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее
                                                <svg width="17" height="12">
                                                    <use xlink:href="{{ asset('images/sprite.svg#card-news-link-arrow') }}"></use>
                                                </svg>
                                            </a>
                                        </div>
                                    </div>
                                @endforeach
                            @endif
                         @else
                            <ul class="page-map-bar__list js_page_map_bar_list">
                           @if ($areas->count())
                              @foreach ($areas as $area)
                                    <li class="page-map-bar__item">{{ $area->name_area }}</li>
                              @endforeach
                           @endif
                            <!--<li class="page-map-bar__item">ЖК Большое Путилково</li>
                            <li class="page-map-bar__item">ЖК Среда</li>
                            <li class="page-map-bar__item">ЖК Квартал Триумфальный</li>
                            <li class="page-map-bar__item">ЖК Алые Паруса</li>
                            <li class="page-map-bar__item">ЖК Первый Московский</li>
                            <li class="page-map-bar__item">ЖК Ильменский 17</li>
                            <li class="page-map-bar__item">ЖК Царская Площадь</li>
                            <li class="page-map-bar__item">ЖК Переделкино Ближнее</li>
                            <li class="page-map-bar__item">ЖК Этолон Cити</li>
                            <li class="page-map-bar__item">ЖК Триумф Палас</li>-->
                            </ul>
                            @if ($areas->count())
                            @foreach ($areas as $area)
                                <div class="card-news">
                                    <div class="card-news__top"><img src="/storage/app/public/<?=$area->foto_main; //asset(Storage::url($area->foto_main))?>" alt="Превью по {{$area->name_area}}" loading="lazy">
                                        <div class="card-news__date"><span>{{ $area->name_area }}</span><span></span></div>
                                    </div>
                                    <div class="card-news__cnt">
                                        <p class="card-news__descr">{{ $area->description }}</p>
                                        <a class="card-news__link" href="{{ route('complex', ['area' => $area->id]) }}">Подробнее
                                            <svg width="17" height="12">
                                                <use xlink:href="{{ asset('images/sprite.svg#card-news-link-arrow') }}"></use>
                                            </svg>
                                        </a>
                                    </div>
                                </div>
                            @endforeach
                            @endif
                        @endif
                        <!--<div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Большое Путилково</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Среда</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Квартал Триумфальный</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Алые Паруса</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Первый Московский</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Ильменский 17</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Царская Площадь</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Переделкино Ближнее</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Этолон Cити</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>
                        <div class="card-news">
                            <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
                                <div class="card-news__date"><span>ЖК Триумф Палас</span><span></span></div>
                            </div>
                            <div class="card-news__cnt">
                                <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
                                    <svg width="17" height="12">
                                        <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
                                    </svg></a>
                            </div>
                        </div>-->
                    </div>
                </div>
            </div>
        </div>
    </section>
@endsection

@section('form_feedback')
    <!-- Форма обратной связи -->
    @include('form.form_feedback')
@endsection