Commit 357df98e451691610e9a6b3ebbe628f7a35aa5aa
1 parent
b18fdfbaf2
Exists in
master
Баг с каталогами
Showing 6 changed files with 107 additions and 162 deletions Side-by-side Diff
database/migrations/2023_03_01_072712_create_areas_table.php
... | ... | @@ -19,8 +19,8 @@ return new class extends Migration |
19 | 19 | //$table->string('slug', 255)->unique()->nullable(); |
20 | 20 | $table->text('description')->nullable(); |
21 | 21 | $table->string('map_coord')->default(''); |
22 | - $table->integer('coord_x')->default(0); | |
23 | - $table->integer('coord_y')->default(0); | |
22 | + $table->float('coord_x')->default(0); | |
23 | + $table->float('coord_y')->default(0); | |
24 | 24 | $table->string('foto_main', 255)->nullable(); |
25 | 25 | $table->timestamps(); |
26 | 26 | }); |
public/js/main.js
... | ... | @@ -29,7 +29,7 @@ class App { |
29 | 29 | this.sendForm('.js_popup_sending_form_', '[data-popup="success"]'); |
30 | 30 | //this.sendOffer(); //отправка предложения по e-mail; |
31 | 31 | |
32 | - //this.setGeneralMap(); // карта на странице карт; | |
32 | + this.setGeneralMap(); // карта на странице карт; | |
33 | 33 | this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК'; |
34 | 34 | this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение'; |
35 | 35 | this.setCatalogSorts(); // сортировка на странице 'каталог'; |
... | ... | @@ -1206,7 +1206,7 @@ class App { |
1206 | 1206 | |
1207 | 1207 | // карта на странице карт; |
1208 | 1208 | setGeneralMap() { |
1209 | -/* | |
1209 | + | |
1210 | 1210 | if (document.querySelector('#general-map')) { |
1211 | 1211 | |
1212 | 1212 | ymaps.ready(init); // Дождёмся загрузки API и готовности DOM; |
... | ... | @@ -1358,7 +1358,7 @@ class App { |
1358 | 1358 | } |
1359 | 1359 | |
1360 | 1360 | }; |
1361 | -*/ | |
1361 | + | |
1362 | 1362 | |
1363 | 1363 | // аккордеон в футере |
1364 | 1364 | setFooterSpoilers() { |
resources/views/catalogs/elemhouse.blade -copy.php
... | ... | @@ -0,0 +1,52 @@ |
1 | + <div class="swiper-slide"> | |
2 | + <div class="card"> | |
3 | + <div class="card__top"> | |
4 | + @if (empty($house->foto_main)) | |
5 | + | |
6 | + @else | |
7 | + <img src="{{ asset(Storage::url($house->foto_main)) }}" alt="{{ $house->title }}" loading="lazy"/> | |
8 | + @endif; | |
9 | + | |
10 | + <h3 class="card__title">{{$house->typearea->name_type }}</h3> | |
11 | + <div class="card__labels"> | |
12 | + <span class="card__label card__label-favorites js_card_favorites <?=\App\Classes\RusDate::selected_item($house->id);?>" data-val="{{$house->id}}" id="card_favorite{{$house->id}}" name="card_favorite{{$house->id}}"> | |
13 | + <svg width="18" height="18"> | |
14 | + <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use> | |
15 | + </svg> | |
16 | + <svg width="18" height="18"> | |
17 | + <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use> | |
18 | + </svg> | |
19 | + </span> | |
20 | + <a class="card__label card__label-messenger" href="#"> | |
21 | + <svg width="25" height="25"> | |
22 | + <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use> | |
23 | + </svg></a></div> | |
24 | + </div> | |
25 | + <div class="card__cnt"> | |
26 | + <div class="card__info"> | |
27 | + <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address> | |
28 | + <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address> | |
29 | + <address class="card__line">{{$house->address }}</address> | |
30 | + <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div> | |
31 | + <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div> | |
32 | + </div> | |
33 | + <? switch ($house->format_house) { | |
34 | + case 'Аренда': | |
35 | + $comment = "<span>в месяц</span>"; | |
36 | + break; | |
37 | + case 'Продажа': | |
38 | + $comment = ""; | |
39 | + break; | |
40 | + case 'Бизнес': | |
41 | + $comment= "<span>в месяц</span>"; | |
42 | + break; | |
43 | + case 'Арендованные': | |
44 | + $comment = "<span>в месяц</span>"; | |
45 | + break; | |
46 | + } | |
47 | + ?> | |
48 | + <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?> | |
49 | + </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a> | |
50 | + </div> | |
51 | + </div> | |
52 | + </div> |
resources/views/catalogs/house_mini.blade - copy.php
... | ... | @@ -0,0 +1,48 @@ |
1 | +<div class="card"> | |
2 | + <div class="card__top"> | |
3 | + @if (empty($house->foto_main)) | |
4 | + | |
5 | + @else | |
6 | + <img src="{{ asset(Storage::url($house->foto_main)) }}" alt="{{ $house->title }}" loading="lazy"/> | |
7 | + @endif; | |
8 | + | |
9 | + <h3 class="card__title">{{$house->typearea->name_type }}</h3> | |
10 | + <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites <?=\App\Classes\RusDate::selected_item($house->id);?>" data-val="{{$house->id}}" id="card_favorite{{$house->id}}" name="card_favorite{{$house->id}}"> | |
11 | + <svg width="18" height="18"> | |
12 | + <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use> | |
13 | + </svg> | |
14 | + <svg width="18" height="18"> | |
15 | + <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use> | |
16 | + </svg></span><a class="card__label card__label-messenger" href="#"> | |
17 | + <svg width="25" height="25"> | |
18 | + <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use> | |
19 | + </svg></a></div> | |
20 | + </div> | |
21 | + <div class="card__cnt"> | |
22 | + <div class="card__info"> | |
23 | + <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address> | |
24 | + <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address> | |
25 | + <address class="card__line">{{$house->address }}</address> | |
26 | + <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div> | |
27 | + <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div> | |
28 | + </div> | |
29 | + <? switch ($house->format_house) { | |
30 | + case 'Аренда': | |
31 | + $comment = "<span>в месяц</span>"; | |
32 | + break; | |
33 | + case 'Продажа': | |
34 | + $comment = ""; | |
35 | + break; | |
36 | + case 'Бизнес': | |
37 | + $comment= "<span>в месяц</span>"; | |
38 | + break; | |
39 | + case 'Арендованные': | |
40 | + $comment = "<span>в месяц</span>"; | |
41 | + break; | |
42 | + } | |
43 | + ?> | |
44 | + <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?> | |
45 | + </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a> | |
46 | + </div> | |
47 | + </div> | |
48 | + |
resources/views/house/post.blade.php
... | ... | @@ -113,7 +113,7 @@ |
113 | 113 | </div> |
114 | 114 | </div> |
115 | 115 | |
116 | - <!---------------------------!> | |
116 | + <!---------------------------> | |
117 | 117 | <div class="offer-side-popup" data-popup="offer-side-popup"> |
118 | 118 | <div class="offer-side-popup__wrap"> |
119 | 119 | <button class="offer-side-popup__close js_popup_close" type="button"> |
... | ... | @@ -144,7 +144,7 @@ |
144 | 144 | </button> |
145 | 145 | </div> |
146 | 146 | </div> |
147 | - <!---------------------------!> | |
147 | + <!---------------------------> | |
148 | 148 | <div class="offer__lines"> |
149 | 149 | <div class="offer__line"><span>Аренда в год за м2</span><span>{{ $house->rent_in_year }} ₽</span></div> |
150 | 150 | <div class="offer__line"><span>Аренда в месяц</span><span>{{ $house->rent_in_month }} ₽</span></div> |
resources/views/mapsobj.blade.php
... | ... | @@ -6,161 +6,6 @@ |
6 | 6 | |
7 | 7 | @section('custom_js') |
8 | 8 | @include('js.filter_value') |
9 | - <script> | |
10 | - setGeneralMap() { | |
11 | - | |
12 | - if (document.querySelector('#general-map')) { | |
13 | - | |
14 | - ymaps.ready(init); // Дождёмся загрузки API и готовности DOM; | |
15 | - | |
16 | - function init() { | |
17 | - | |
18 | - const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id; | |
19 | - center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования; | |
20 | - zoom: 10, | |
21 | - controls: [] // Скрываем элементы управления на карте; | |
22 | - }); | |
23 | - | |
24 | - // Создаём макет содержимого. | |
25 | - const MyIconContentLayout = ymaps.templateLayoutFactory.createClass( | |
26 | - '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>' | |
27 | - ); | |
28 | - | |
29 | - let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива); | |
30 | - // preset: 'islands#yellowIcon' | |
31 | - }); | |
32 | - | |
33 | - let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте); | |
34 | - [55.867783219108354, 37.392867499999916], | |
35 | - [55.728043075486504, 37.73937949999994], | |
36 | - [55.72624100423305, 37.476078499999964], | |
37 | - [55.80751105044832, 37.449622999999974], | |
38 | - [55.601783098948836, 37.36700499999998], | |
39 | - [55.86086502152225, 37.540348999999964], | |
40 | - [55.784961528728715, 37.56188599999996], | |
41 | - [55.63910010399773, 37.319407999999996], | |
42 | - [55.55819256767507, 37.55711549999994], | |
43 | - [55.79829252928473, 37.52063549999999], | |
44 | - ]; | |
45 | - | |
46 | - for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию; | |
47 | - collection.add(new ymaps.Placemark(collectionCoords[i])); | |
48 | - collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent'; | |
49 | - } | |
50 | - | |
51 | - myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту; | |
52 | - | |
53 | - collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета; | |
54 | - collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки; | |
55 | - collection.options.set('iconImageSize', [52, 67]); // Размеры метки; | |
56 | - collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); | |
57 | - collection.options.set('iconContentOffset', [0, 17]); | |
58 | - collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); | |
59 | - | |
60 | - const pageMapBar = document.querySelector('.js_page_map_bar'); | |
61 | - const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn'); | |
62 | - const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list'); | |
63 | - const pageMapBarCards = pageMapBar.querySelectorAll('.card-news'); | |
64 | - | |
65 | - const showCard = (i) => { | |
66 | - | |
67 | - pageMapBarCards.forEach((card, k) => { | |
68 | - | |
69 | - card.classList.remove('active'); | |
70 | - | |
71 | - if (i == k) { | |
72 | - card.classList.add('active'); | |
73 | - } | |
74 | - | |
75 | - }); | |
76 | - | |
77 | - }; | |
78 | - | |
79 | - const hidecard = () => { | |
80 | - | |
81 | - pageMapBarCards.forEach(card => { | |
82 | - card.classList.remove('active'); | |
83 | - }); | |
84 | - | |
85 | - } | |
86 | - | |
87 | - let pageMapBarItems; | |
88 | - | |
89 | - pageMapBarBtn.addEventListener('click', () => { | |
90 | - pageMapBar.classList.toggle('active'); | |
91 | - }); | |
92 | - | |
93 | - pageMapBarList.addEventListener('click', (e) => { | |
94 | - | |
95 | - if (e.target.closest('.page-map-bar__item')) { | |
96 | - | |
97 | - pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); | |
98 | - | |
99 | - pageMapBarItems.forEach((item, i) => { | |
100 | - | |
101 | - if (e.target == item && e.target.classList.contains('active')) { | |
102 | - | |
103 | - item.classList.remove('active'); | |
104 | - | |
105 | - hidecard(); | |
106 | - | |
107 | - } else if (e.target == item) { | |
108 | - | |
109 | - pageMapBarItems.forEach(item => { | |
110 | - item.classList.remove('active'); | |
111 | - }); | |
112 | - | |
113 | - item.classList.add('active'); | |
114 | - | |
115 | - let offsetCoords = collection.get(i).geometry.getCoordinates(); | |
116 | - | |
117 | - offsetCoords = [ | |
118 | - offsetCoords[0] - 0.0025, | |
119 | - offsetCoords[1] | |
120 | - ]; | |
121 | - | |
122 | - myMap.setZoom(16); | |
123 | - // myMap.setCenter(collection.get(i).geometry.getCoordinates()); | |
124 | - myMap.setCenter(offsetCoords); | |
125 | - | |
126 | - showCard(i); | |
127 | - | |
128 | - } | |
129 | - | |
130 | - }); | |
131 | - } | |
132 | - | |
133 | - }); | |
134 | - | |
135 | - collection.events.add('click', function (e) { | |
136 | - | |
137 | - for (let i = 0, l = collection.getLength(); i < l; i++) { | |
138 | - | |
139 | - if (e.get('target') == collection.get(i)) { | |
140 | - | |
141 | - pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); | |
142 | - | |
143 | - pageMapBarItems.forEach((item) => { | |
144 | - pageMapBar.classList.add('active'); | |
145 | - item.classList.remove('active'); | |
146 | - }); | |
147 | - | |
148 | - pageMapBarItems[i].classList.add('active'); | |
149 | - | |
150 | - showCard(i); | |
151 | - | |
152 | - } | |
153 | - | |
154 | - } | |
155 | - | |
156 | - }); | |
157 | - | |
158 | - } | |
159 | - | |
160 | - } | |
161 | - | |
162 | - }; | |
163 | - </script> | |
164 | 9 | @endsection |
165 | 10 | |
166 | 11 | @section('content') |