Commit 694201330f9d1eaf2089ff2d570ba2e139c484ba

Authored by Андрей Ларионов
1 parent 357df98e45
Exists in master

Добавление координат в карточку офиса и работа с картой

Showing 10 changed files with 1716 additions and 1523 deletions Inline Diff

app/Http/Controllers/MainController.php
1 <?php 1 <?php
2 2
3 namespace App\Http\Controllers; 3 namespace App\Http\Controllers;
4 4
5 use App\Http\Requests\EmailRequest; 5 use App\Http\Requests\EmailRequest;
6 use App\Http\Requests\FooterFeedbackRequest; 6 use App\Http\Requests\FooterFeedbackRequest;
7 use App\Models\Area; 7 use App\Models\Area;
8 use App\Models\Contact; 8 use App\Models\Contact;
9 use App\Models\format_area; 9 use App\Models\format_area;
10 use App\Models\House; 10 use App\Models\House;
11 use App\Models\ModelMailFeedback; 11 use App\Models\ModelMailFeedback;
12 use App\Models\News; 12 use App\Models\News;
13 use App\Models\Partners; 13 use App\Models\Partners;
14 use App\Models\type_area; 14 use App\Models\type_area;
15 use Illuminate\Database\Eloquent\Model; 15 use Illuminate\Database\Eloquent\Model;
16 use Illuminate\Http\Request; 16 use Illuminate\Http\Request;
17 use App\Classes\RusDate; 17 use App\Classes\RusDate;
18 use Illuminate\Support\Facades\Mail; 18 use Illuminate\Support\Facades\Mail;
19 use PhpParser\Node\Stmt\Switch_; 19 use PhpParser\Node\Stmt\Switch_;
20 use Illuminate\Support\Facades\Response; 20 use Illuminate\Support\Facades\Response;
21 21
22 class MainController extends Controller 22 class MainController extends Controller
23 { 23 {
24 /* 24 /*
25 * Главная страница проекта 25 * Главная страница проекта
26 */ 26 */
27 public function index() { 27 public function index() {
28 $houses = House::with('areas')->orderByDesc('created_at')->limit(8)->get(); 28 $houses = House::with('areas')->orderByDesc('created_at')->limit(8)->get();
29 $news = News::query()->orderByDesc('created_at')->limit(8)->get(); 29 $news = News::query()->orderByDesc('created_at')->limit(8)->get();
30 $partners = Partners::query()->limit(18)->get(); 30 $partners = Partners::query()->limit(18)->get();
31 return view('index', compact('houses', 'news', 'partners')); 31 return view('index', compact('houses', 'news', 'partners'));
32 } 32 }
33 33
34 /* 34 /*
35 * Фильтр ajax в каталоге 35 * Фильтр ajax в каталоге
36 */ 36 */
37 public function catalog_ajax_filter(Request $request) { 37 public function catalog_ajax_filter(Request $request) {
38 $Res = Array(); 38 $Res = Array();
39 if (!empty($request->area)) { 39 if (!empty($request->area)) {
40 $area_table = Area::where('id', '=', $request->area)->get(); 40 $area_table = Area::where('id', '=', $request->area)->get();
41 $Res[] = $area_table[0]->name_area; 41 $Res[] = $area_table[0]->name_area;
42 } else { 42 } else {
43 $Res[] = "Все объекты"; 43 $Res[] = "Все объекты";
44 } 44 }
45 45
46 if (!empty($request->type_area)) { 46 if (!empty($request->type_area)) {
47 $type_area_table = type_area::where('id', '=', $request->type_area)->get(); 47 $type_area_table = type_area::where('id', '=', $request->type_area)->get();
48 $Res[] = $type_area_table[0]->name_type; 48 $Res[] = $type_area_table[0]->name_type;
49 } else { 49 } else {
50 $Res[] = "Тип недвижимости"; 50 $Res[] = "Тип недвижимости";
51 } 51 }
52 52
53 if (!empty($request->format_area)) { 53 if (!empty($request->format_area)) {
54 $format_area_table = format_area::where('id', '=', $request->format_area)->get(); 54 $format_area_table = format_area::where('id', '=', $request->format_area)->get();
55 $Res[] = $format_area_table[0]->name_format; 55 $Res[] = $format_area_table[0]->name_format;
56 } else { 56 } else {
57 $Res[] = "Формат недвижимости"; 57 $Res[] = "Формат недвижимости";
58 } 58 }
59 59
60 return json_encode($Res); 60 return json_encode($Res);
61 } 61 }
62 62
63 /* 63 /*
64 * Страница ЖК 64 * Страница ЖК
65 */ 65 */
66 public function Complex(Area $area, Request $request) { 66 public function Complex(Area $area, Request $request) {
67 //////////раздел аренда 67 //////////раздел аренда
68 $house_arenda = House::with('areas')-> 68 $house_arenda = House::with('areas')->
69 where('area_id', '=', $area->id)-> 69 where('area_id', '=', $area->id)->
70 where('format_house', '=', 'Аренда'); 70 where('format_house', '=', 'Аренда');
71 71
72 if ($request->view == 'arenda') { 72 if ($request->view == 'arenda') {
73 switch ($request->sort_price) { 73 switch ($request->sort_price) {
74 case 1: $house_arenda = $house_arenda->orderBy('price');break; 74 case 1: $house_arenda = $house_arenda->orderBy('price');break;
75 case 2: $house_arenda = $house_arenda->orderByDesc('price');break; 75 case 2: $house_arenda = $house_arenda->orderByDesc('price');break;
76 } 76 }
77 switch ($request->sort_new) { 77 switch ($request->sort_new) {
78 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break; 78 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break;
79 case 2: $house_arenda = $house_arenda->orderBy('created_at');break; 79 case 2: $house_arenda = $house_arenda->orderBy('created_at');break;
80 } 80 }
81 switch ($request->sort_area) { 81 switch ($request->sort_area) {
82 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break; 82 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break;
83 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break; 83 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break;
84 } 84 }
85 } else { 85 } else {
86 $house_arenda = $house_arenda->orderBy('price')-> 86 $house_arenda = $house_arenda->orderBy('price')->
87 orderByDesc('created_at')-> 87 orderByDesc('created_at')->
88 orderByDesc('area')->get(); 88 orderByDesc('area')->get();
89 } 89 }
90 90
91 ////////раздел продажа 91 ////////раздел продажа
92 $house_prodaja = House::with('areas')-> 92 $house_prodaja = House::with('areas')->
93 where('area_id', '=', $area->id)-> 93 where('area_id', '=', $area->id)->
94 where('format_house', '=', 'Продажа'); 94 where('format_house', '=', 'Продажа');
95 95
96 if ($request->view == 'prodaja') { 96 if ($request->view == 'prodaja') {
97 switch ($request->sort_price) { 97 switch ($request->sort_price) {
98 case 1: $house_prodaja = $house_prodaja->orderBy('price');break; 98 case 1: $house_prodaja = $house_prodaja->orderBy('price');break;
99 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break; 99 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break;
100 } 100 }
101 switch ($request->sort_new) { 101 switch ($request->sort_new) {
102 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break; 102 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break;
103 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break; 103 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break;
104 } 104 }
105 switch ($request->sort_area) { 105 switch ($request->sort_area) {
106 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break; 106 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break;
107 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break; 107 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break;
108 } 108 }
109 } else { 109 } else {
110 $house_prodaja = $house_prodaja->orderBy('price')-> 110 $house_prodaja = $house_prodaja->orderBy('price')->
111 orderByDesc('created_at')-> 111 orderByDesc('created_at')->
112 orderByDesc('area')->get(); 112 orderByDesc('area')->get();
113 } 113 }
114 114
115 //////////////// Раздел бизнеса 115 //////////////// Раздел бизнеса
116 $house_bissnes = House::with('areas')-> 116 $house_bissnes = House::with('areas')->
117 where('area_id', '=', $area->id)-> 117 where('area_id', '=', $area->id)->
118 where('format_house', '=', 'Бизнес'); 118 where('format_house', '=', 'Бизнес');
119 //orderByDesc('created_at')->get(); 119 //orderByDesc('created_at')->get();
120 120
121 if ($request->view == 'bissnes') { 121 if ($request->view == 'bissnes') {
122 switch ($request->sort_price) { 122 switch ($request->sort_price) {
123 case 1: $house_bissnes = $house_bissnes->orderBy('price');break; 123 case 1: $house_bissnes = $house_bissnes->orderBy('price');break;
124 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break; 124 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break;
125 } 125 }
126 switch ($request->sort_new) { 126 switch ($request->sort_new) {
127 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break; 127 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break;
128 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break; 128 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break;
129 } 129 }
130 switch ($request->sort_area) { 130 switch ($request->sort_area) {
131 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break; 131 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break;
132 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break; 132 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break;
133 } 133 }
134 } else { 134 } else {
135 $house_bissnes = $house_bissnes->orderBy('price')-> 135 $house_bissnes = $house_bissnes->orderBy('price')->
136 orderByDesc('created_at')-> 136 orderByDesc('created_at')->
137 orderByDesc('area')->get(); 137 orderByDesc('area')->get();
138 } 138 }
139 139
140 //////////раздел арендованные 140 //////////раздел арендованные
141 $house_arendovannie = House::with('areas')-> 141 $house_arendovannie = House::with('areas')->
142 where('area_id', '=', $area->id)-> 142 where('area_id', '=', $area->id)->
143 where('format_house', '=', 'Арендованные'); 143 where('format_house', '=', 'Арендованные');
144 //orderByDesc('created_at')->get(); 144 //orderByDesc('created_at')->get();
145 145
146 if ($request->view == 'arendovannie') { 146 if ($request->view == 'arendovannie') {
147 switch ($request->sort_price) { 147 switch ($request->sort_price) {
148 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break; 148 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break;
149 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break; 149 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break;
150 } 150 }
151 switch ($request->sort_new) { 151 switch ($request->sort_new) {
152 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break; 152 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break;
153 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break; 153 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break;
154 } 154 }
155 switch ($request->sort_area) { 155 switch ($request->sort_area) {
156 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break; 156 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break;
157 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break; 157 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break;
158 } 158 }
159 } else { 159 } else {
160 $house_arendovannie = $house_arendovannie->orderBy('price')-> 160 $house_arendovannie = $house_arendovannie->orderBy('price')->
161 orderByDesc('created_at')-> 161 orderByDesc('created_at')->
162 orderByDesc('area')->get(); 162 orderByDesc('area')->get();
163 } 163 }
164 164
165 if ($request->ajax()) { 165 if ($request->ajax()) {
166 switch($request->view) { 166 switch($request->view) {
167 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break; 167 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break;
168 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break; 168 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break;
169 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break; 169 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break;
170 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break; 170 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break;
171 } 171 }
172 } 172 }
173 173
174 return view('complex', compact('area', 174 return view('complex', compact('area',
175 'house_arenda', 175 'house_arenda',
176 'house_prodaja', 176 'house_prodaja',
177 'house_bissnes', 177 'house_bissnes',
178 'house_arendovannie')); 178 'house_arendovannie'));
179 179
180 } 180 }
181 181
182 /* 182 /*
183 * О компании 183 * О компании
184 */ 184 */
185 public function About(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application 185 public function About(): \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Contracts\Foundation\Application
186 { 186 {
187 $news = News::query()->orderByDesc('created_at')->limit(8)->get(); 187 $news = News::query()->orderByDesc('created_at')->limit(8)->get();
188 $partners = Partners::query()->limit(18)->get(); 188 $partners = Partners::query()->limit(18)->get();
189 return view('about', compact('news', 'partners')); 189 return view('about', compact('news', 'partners'));
190 } 190 }
191 191
192 /* 192 /*
193 * Форма обратной связи внизу сайта 193 * Форма обратной связи внизу сайта
194 */ 194 */
195 public function main_form(FooterFeedbackRequest $request) { 195 public function main_form(FooterFeedbackRequest $request) {
196 $RentTorg = Contact::query()->limit(1)->get(); 196 $RentTorg = Contact::query()->limit(1)->get();
197 $MailBD = new ModelMailFeedback(); 197 $MailBD = new ModelMailFeedback();
198 $MailBD->to = 'Администрации сайта'; 198 $MailBD->to = 'Администрации сайта';
199 $MailBD->from = $request->TelephoneUser; 199 $MailBD->from = $request->TelephoneUser;
200 $MailBD->subject = "Пользователь <".$request->NameUser.">"; 200 $MailBD->subject = "Пользователь <".$request->NameUser.">";
201 $MailBD->form = 'Форма в футере'; 201 $MailBD->form = 'Форма в футере';
202 $MailBD->text = "От пользователя: ".$request->NameUser.". Заявка на лучшие предложения. Сообщение: ".$request->TextUser; 202 $MailBD->text = "От пользователя: ".$request->NameUser.". Заявка на лучшие предложения. Сообщение: ".$request->TextUser;
203 $MailBD->save(); 203 $MailBD->save();
204 204
205 //return true; 205 //return true;
206 /* 206 /*
207 Mail::send('emails.feedback', ['user' => $user], 207 Mail::send('emails.feedback', ['user' => $user],
208 function ($message) use ($user) { 208 function ($message) use ($user) {
209 $message->from('sender@gmail.com', 'Sender'); 209 $message->from('sender@gmail.com', 'Sender');
210 $message->to($user->email, $user->name)->subject('Test message'); 210 $message->to($user->email, $user->name)->subject('Test message');
211 }); 211 });
212 */ 212 */
213 } 213 }
214 214
215 /* 215 /*
216 * Форма обратной связе в хедере 216 * Форма обратной связе в хедере
217 */ 217 */
218 public function header_form(FooterFeedbackRequest $request) { 218 public function header_form(FooterFeedbackRequest $request) {
219 $RentTorg = Contact::query()->limit(1)->get(); 219 $RentTorg = Contact::query()->limit(1)->get();
220 $MailBD = new ModelMailFeedback(); 220 $MailBD = new ModelMailFeedback();
221 $MailBD->to = 'Администрации сайта'; 221 $MailBD->to = 'Администрации сайта';
222 $MailBD->from = $request->TelephoneUser; 222 $MailBD->from = $request->TelephoneUser;
223 $MailBD->subject = "Пользователь <".$request->NameUser.">"; 223 $MailBD->subject = "Пользователь <".$request->NameUser.">";
224 $MailBD->form = 'Форма в заголовке сайта'; 224 $MailBD->form = 'Форма в заголовке сайта';
225 $MailBD->text = "От пользователя: ".$request->NameUser." Сообщение: Заказываю обратный звонок"; 225 $MailBD->text = "От пользователя: ".$request->NameUser." Сообщение: Заказываю обратный звонок";
226 $MailBD->save(); 226 $MailBD->save();
227 } 227 }
228 228
229 public function rec_view_form(FooterFeedbackRequest $request) { 229 public function rec_view_form(FooterFeedbackRequest $request) {
230 $RentTorg = Contact::query()->limit(1)->get(); 230 $RentTorg = Contact::query()->limit(1)->get();
231 $MailBD = new ModelMailFeedback(); 231 $MailBD = new ModelMailFeedback();
232 $MailBD->to = 'Администрации сайта'; 232 $MailBD->to = 'Администрации сайта';
233 $MailBD->from = $request->TelephoneUser; 233 $MailBD->from = $request->TelephoneUser;
234 $MailBD->subject = "Пользователь <".$request->NameUser.">"; 234 $MailBD->subject = "Пользователь <".$request->NameUser.">";
235 $MailBD->form = 'Форма записи на просмотр'; 235 $MailBD->form = 'Форма записи на просмотр';
236 $MailBD->text = "От пользователя: ".$request->NameUser." Сообщение: Заказываю просмотр офиса"; 236 $MailBD->text = "От пользователя: ".$request->NameUser." Сообщение: Заказываю просмотр офиса";
237 $MailBD->save(); 237 $MailBD->save();
238 } 238 }
239 239
240 /* 240 /*
241 * Форма обратной связи на странице "Контакты" 241 * Форма обратной связи на странице "Контакты"
242 */ 242 */
243 public function page_contact_form(FooterFeedbackRequest $request) { 243 public function page_contact_form(FooterFeedbackRequest $request) {
244 $RentTorg = Contact::query()->limit(1)->get(); 244 $RentTorg = Contact::query()->limit(1)->get();
245 $MailBD = new ModelMailFeedback(); 245 $MailBD = new ModelMailFeedback();
246 $MailBD->to = 'Администрации сайта'; 246 $MailBD->to = 'Администрации сайта';
247 $MailBD->from = $request->TelephoneUser; 247 $MailBD->from = $request->TelephoneUser;
248 $MailBD->subject = "Пользователь <".$request->NameUser."> Компания <".$request->NameCompany.">"; 248 $MailBD->subject = "Пользователь <".$request->NameUser."> Компания <".$request->NameCompany.">";
249 $MailBD->form = 'Форма на странице "Контакты"'; 249 $MailBD->form = 'Форма на странице "Контакты"';
250 $MailBD->text = "От пользователя: ".$request->NameUser."Телефон: ".$request->TelephoneUser." Почта: <".$request->EmailUser."> Сообщение:".$request->TextUser; 250 $MailBD->text = "От пользователя: ".$request->NameUser."Телефон: ".$request->TelephoneUser." Почта: <".$request->EmailUser."> Сообщение:".$request->TextUser;
251 $MailBD->save(); 251 $MailBD->save();
252 } 252 }
253 /* 253 /*
254 * Форма обратной связи по емайлу 254 * Форма обратной связи по емайлу
255 */ 255 */
256 public function email_form(EmailRequest $request) { 256 public function email_form(EmailRequest $request) {
257 $RentTorg = Contact::query()->limit(1)->get(); 257 $RentTorg = Contact::query()->limit(1)->get();
258 $MailBD = new ModelMailFeedback(); 258 $MailBD = new ModelMailFeedback();
259 $MailBD->to = 'Администрации сайта'; 259 $MailBD->to = 'Администрации сайта';
260 $MailBD->from = $request->EmailUser; 260 $MailBD->from = $request->EmailUser;
261 $MailBD->subject = "Пользователь <".$request->EmailUser.">"; 261 $MailBD->subject = "Пользователь <".$request->EmailUser.">";
262 $MailBD->form = 'Форма обратной связи по Email'; 262 $MailBD->form = 'Форма обратной связи по Email';
263 $MailBD->text = "От почты: ".$request->EmailUser." Сообщение: Отправить на данную почту предложения RentTorg"; 263 $MailBD->text = "От почты: ".$request->EmailUser." Сообщение: Отправить на данную почту предложения RentTorg";
264 $MailBD->save(); 264 $MailBD->save();
265 //dd('Email form'); 265 //dd('Email form');
266 return redirect()->route('index'); 266 return redirect()->route('index');
267 } 267 }
268 268
269 /* 269 /*
270 * Избранное 270 * Избранное
271 */ 271 */
272 public function Favorite(Request $request) { 272 public function Favorite(Request $request) {
273 if (empty($_COOKIE['favorite_house'])) { 273 if (empty($_COOKIE['favorite_house'])) {
274 $Arr = Array(); 274 $Arr = Array();
275 } else { 275 } else {
276 $Arr = json_decode($_COOKIE['favorite_house'], true); 276 $Arr = json_decode($_COOKIE['favorite_house'], true);
277 } 277 }
278 if (!empty($Arr) && is_array($Arr)) { 278 if (!empty($Arr) && is_array($Arr)) {
279 $houses = House::with('areas')->whereIn('id', $Arr); 279 $houses = House::with('areas')->whereIn('id', $Arr);
280 280
281 if (isset($request->sort_price)) { 281 if (isset($request->sort_price)) {
282 switch ($request->sort_price) { 282 switch ($request->sort_price) {
283 case 1: $houses = $houses->orderBy('price');break; 283 case 1: $houses = $houses->orderBy('price');break;
284 case 2: $houses = $houses->orderByDesc('price');break; 284 case 2: $houses = $houses->orderByDesc('price');break;
285 } 285 }
286 switch ($request->sort_new) { 286 switch ($request->sort_new) {
287 case 1: $houses = $houses->orderByDesc('created_at');break; 287 case 1: $houses = $houses->orderByDesc('created_at');break;
288 case 2: $houses = $houses->orderBy('created_at');break; 288 case 2: $houses = $houses->orderBy('created_at');break;
289 } 289 }
290 switch ($request->sort_area) { 290 switch ($request->sort_area) {
291 case 1: $houses = $houses->orderByDesc('area');break; 291 case 1: $houses = $houses->orderByDesc('area');break;
292 case 2: $houses = $houses->orderBy('area');break; 292 case 2: $houses = $houses->orderBy('area');break;
293 } 293 }
294 294
295 } else { 295 } else {
296 $houses = $houses->orderBy('price')-> 296 $houses = $houses->orderBy('price')->
297 orderByDesc('created_at')-> 297 orderByDesc('created_at')->
298 orderByDesc('area'); 298 orderByDesc('area');
299 } 299 }
300 300
301 $houses = $houses->paginate(4); 301 $houses = $houses->paginate(4);
302 302
303 if ($request->ajax()) { 303 if ($request->ajax()) {
304 return view('ajax.complex.favorite', compact('houses')); 304 return view('ajax.complex.favorite', compact('houses'));
305 } 305 }
306 306
307 return view('favorite_data', compact('houses')); 307 return view('favorite_data', compact('houses'));
308 } else { 308 } else {
309 return view('favorite', compact('Arr')); 309 return view('favorite', compact('Arr'));
310 } 310 }
311 311
312 312
313 } 313 }
314 314
315 /* 315 /*
316 * Категории каталога Аренда/Продажа/Бизнес 316 * Категории каталога Аренда/Продажа/Бизнес
317 */ 317 */
318 public function Category($cat, Request $request) { 318 public function Category($cat, Request $request) {
319 switch ($cat) { 319 switch ($cat) {
320 case 'arenda': 320 case 'arenda':
321 $title = "Аренда торговых помещениий"; 321 $title = "Аренда торговых помещениий";
322 $format_house = 'Аренда'; 322 $format_house = 'Аренда';
323 break; 323 break;
324 case 'sale': 324 case 'sale':
325 $title = "Продажа торговых помещений"; 325 $title = "Продажа торговых помещений";
326 $format_house = 'Продажа'; 326 $format_house = 'Продажа';
327 break; 327 break;
328 case 'bussiness': 328 case 'bussiness':
329 $title = "Арендый бизнес"; 329 $title = "Арендый бизнес";
330 $format_house = 'Бизнес'; 330 $format_house = 'Бизнес';
331 break; 331 break;
332 default: 332 default:
333 $title = "Аренда торговых помещениий"; 333 $title = "Аренда торговых помещениий";
334 $format_house = 'Аренда'; 334 $format_house = 'Аренда';
335 break; 335 break;
336 } 336 }
337 337
338 $houses = House::with('areas')-> 338 $houses = House::with('areas')->
339 where('format_house', '=', $format_house); 339 where('format_house', '=', $format_house);
340 //->appends(request()->query()); 340 //->appends(request()->query());
341 341
342 if (!empty($request->area)) { 342 if (!empty($request->area)) {
343 $houses = $houses->where('area_id', '=', $request->area); 343 $houses = $houses->where('area_id', '=', $request->area);
344 } 344 }
345 // условия поиска по типу недвижимости 345 // условия поиска по типу недвижимости
346 if (!empty($request->type_area)) { 346 if (!empty($request->type_area)) {
347 $houses = $houses->where('type_area_id', '=', $request->type_area); 347 $houses = $houses->where('type_area_id', '=', $request->type_area);
348 } 348 }
349 // условия поиска по формату недвижимости 349 // условия поиска по формату недвижимости
350 if (!empty($request->format_area)) { 350 if (!empty($request->format_area)) {
351 $houses = $houses->where('format_area_id', '=', $request->format_area); 351 $houses = $houses->where('format_area_id', '=', $request->format_area);
352 } 352 }
353 // условия поиска по площади - минимальная площадь 353 // условия поиска по площади - минимальная площадь
354 if (!empty($request->area_m2_min)) { 354 if (!empty($request->area_m2_min)) {
355 $houses = $houses->where('area', '>', $request->area_m2_min); 355 $houses = $houses->where('area', '>', $request->area_m2_min);
356 } 356 }
357 // условия поиска по площади - максимальная площадь 357 // условия поиска по площади - максимальная площадь
358 if (!empty($request->area_m2_max)) { 358 if (!empty($request->area_m2_max)) {
359 $houses = $houses->where('area', '<', $request->area_m2_max); 359 $houses = $houses->where('area', '<', $request->area_m2_max);
360 } 360 }
361 // условия поиска по цене - минимальная цена 361 // условия поиска по цене - минимальная цена
362 if (!empty($request->price_min)) { 362 if (!empty($request->price_min)) {
363 $houses = $houses->where('price', '>', $request->price_min); 363 $houses = $houses->where('price', '>', $request->price_min);
364 } 364 }
365 // условия поиска по цене - максимальная цена 365 // условия поиска по цене - максимальная цена
366 if (!empty($request->price_max)) { 366 if (!empty($request->price_max)) {
367 $houses = $houses->where('price', '<', $request->price_max); 367 $houses = $houses->where('price', '<', $request->price_max);
368 } 368 }
369 // условия поиска по адресу 369 // условия поиска по адресу
370 if (!empty($request->address)) { 370 if (!empty($request->address)) {
371 $houses = $houses->where('address', 'LIKE', "%".$request->address."%"); 371 $houses = $houses->where('address', 'LIKE', "%".$request->address."%");
372 } 372 }
373 373
374 if (isset($request->sort_price)) { 374 if (isset($request->sort_price)) {
375 switch ($request->sort_price) { 375 switch ($request->sort_price) {
376 case 1: $houses = $houses->orderBy('price');break; 376 case 1: $houses = $houses->orderBy('price');break;
377 case 2: $houses = $houses->orderByDesc('price');break; 377 case 2: $houses = $houses->orderByDesc('price');break;
378 } 378 }
379 switch ($request->sort_new) { 379 switch ($request->sort_new) {
380 case 1: $houses = $houses->orderByDesc('created_at');break; 380 case 1: $houses = $houses->orderByDesc('created_at');break;
381 case 2: $houses = $houses->orderBy('created_at');break; 381 case 2: $houses = $houses->orderBy('created_at');break;
382 } 382 }
383 switch ($request->sort_area) { 383 switch ($request->sort_area) {
384 case 1: $houses = $houses->orderByDesc('area');break; 384 case 1: $houses = $houses->orderByDesc('area');break;
385 case 2: $houses = $houses->orderBy('area');break; 385 case 2: $houses = $houses->orderBy('area');break;
386 } 386 }
387 387
388 } else { 388 } else {
389 $houses = $houses->orderBy('price')-> 389 $houses = $houses->orderBy('price')->
390 orderByDesc('created_at')-> 390 orderByDesc('created_at')->
391 orderByDesc('area'); 391 orderByDesc('area');
392 } 392 }
393 393
394 $houses = $houses->paginate(4); 394 $houses = $houses->paginate(4);
395 395
396 if ($request->ajax()) { 396 if ($request->ajax()) {
397 return view('ajax.complex.category', compact('houses')); 397 return view('ajax.complex.category', compact('houses'));
398 } 398 }
399 399
400 return view('category_catalog', compact('title', 'cat', 'houses')); 400 return view('category_catalog', compact('title', 'cat', 'houses'));
401 } 401 }
402 402
403 403
404 /* 404 /*
405 * Каталог 405 * Каталог
406 */ 406 */
407 public function Catalog(Request $request) { 407 public function Catalog(Request $request) {
408 408
409 //////////раздел аренда///////////////////////////////////////////////////////////////// 409 //////////раздел аренда/////////////////////////////////////////////////////////////////
410 $house_arenda = House::with('areas')-> 410 $house_arenda = House::with('areas')->
411 where('format_house', '=', 'Аренда'); 411 where('format_house', '=', 'Аренда');
412 // условия поиска по объектам комплексов 412 // условия поиска по объектам комплексов
413 if (!empty($request->area)) { 413 if (!empty($request->area)) {
414 $house_arenda = $house_arenda->where('area_id', '=', $request->area); 414 $house_arenda = $house_arenda->where('area_id', '=', $request->area);
415 } 415 }
416 // условия поиска по типу недвижимости 416 // условия поиска по типу недвижимости
417 if (!empty($request->type_area)) { 417 if (!empty($request->type_area)) {
418 $house_arenda = $house_arenda->where('type_area_id', '=', $request->type_area); 418 $house_arenda = $house_arenda->where('type_area_id', '=', $request->type_area);
419 } 419 }
420 // условия поиска по формату недвижимости 420 // условия поиска по формату недвижимости
421 if (!empty($request->format_area)) { 421 if (!empty($request->format_area)) {
422 $house_arenda = $house_arenda->where('format_area_id', '=', $request->format_area); 422 $house_arenda = $house_arenda->where('format_area_id', '=', $request->format_area);
423 } 423 }
424 // условия поиска по площади - минимальная площадь 424 // условия поиска по площади - минимальная площадь
425 if (!empty($request->area_m2_min)) { 425 if (!empty($request->area_m2_min)) {
426 $house_arenda = $house_arenda->where('area', '>', $request->area_m2_min); 426 $house_arenda = $house_arenda->where('area', '>', $request->area_m2_min);
427 } 427 }
428 // условия поиска по площади - максимальная площадь 428 // условия поиска по площади - максимальная площадь
429 if (!empty($request->area_m2_max)) { 429 if (!empty($request->area_m2_max)) {
430 $house_arenda = $house_arenda->where('area', '<', $request->area_m2_max); 430 $house_arenda = $house_arenda->where('area', '<', $request->area_m2_max);
431 } 431 }
432 // условия поиска по цене - минимальная цена 432 // условия поиска по цене - минимальная цена
433 if (!empty($request->price_min)) { 433 if (!empty($request->price_min)) {
434 $house_arenda = $house_arenda->where('price', '>', $request->price_min); 434 $house_arenda = $house_arenda->where('price', '>', $request->price_min);
435 } 435 }
436 // условия поиска по цене - максимальная цена 436 // условия поиска по цене - максимальная цена
437 if (!empty($request->price_max)) { 437 if (!empty($request->price_max)) {
438 $house_arenda = $house_arenda->where('price', '<', $request->price_max); 438 $house_arenda = $house_arenda->where('price', '<', $request->price_max);
439 } 439 }
440 // условия поиска по адресу 440 // условия поиска по адресу
441 if (!empty($request->address)) { 441 if (!empty($request->address)) {
442 $house_arenda = $house_arenda->where('address', 'LIKE', "%".$request->address."%"); 442 $house_arenda = $house_arenda->where('address', 'LIKE', "%".$request->address."%");
443 } 443 }
444 444
445 if ($request->view == 'arenda') { 445 if ($request->view == 'arenda') {
446 switch ($request->sort_price) { 446 switch ($request->sort_price) {
447 case 1: $house_arenda = $house_arenda->orderBy('price');break; 447 case 1: $house_arenda = $house_arenda->orderBy('price');break;
448 case 2: $house_arenda = $house_arenda->orderByDesc('price');break; 448 case 2: $house_arenda = $house_arenda->orderByDesc('price');break;
449 } 449 }
450 switch ($request->sort_new) { 450 switch ($request->sort_new) {
451 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break; 451 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break;
452 case 2: $house_arenda = $house_arenda->orderBy('created_at');break; 452 case 2: $house_arenda = $house_arenda->orderBy('created_at');break;
453 } 453 }
454 switch ($request->sort_area) { 454 switch ($request->sort_area) {
455 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break; 455 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break;
456 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break; 456 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break;
457 } 457 }
458 } else { 458 } else {
459 $house_arenda = $house_arenda->orderBy('price')-> 459 $house_arenda = $house_arenda->orderBy('price')->
460 orderByDesc('created_at')-> 460 orderByDesc('created_at')->
461 orderByDesc('area')->get(); 461 orderByDesc('area')->get();
462 } 462 }
463 463
464 ////////раздел продажа////////////////////////////////////////////////////////////////// 464 ////////раздел продажа//////////////////////////////////////////////////////////////////
465 $house_prodaja = House::with('areas')-> 465 $house_prodaja = House::with('areas')->
466 where('format_house', '=', 'Продажа'); 466 where('format_house', '=', 'Продажа');
467 467
468 // условия поиска по объектам комплексов 468 // условия поиска по объектам комплексов
469 if (!empty($request->area)) { 469 if (!empty($request->area)) {
470 $house_prodaja = $house_prodaja->where('area_id', '=', $request->area); 470 $house_prodaja = $house_prodaja->where('area_id', '=', $request->area);
471 } 471 }
472 // условия поиска по типу недвижимости 472 // условия поиска по типу недвижимости
473 if (!empty($request->type_area)) { 473 if (!empty($request->type_area)) {
474 $house_prodaja = $house_prodaja->where('type_area_id', '=', $request->type_area); 474 $house_prodaja = $house_prodaja->where('type_area_id', '=', $request->type_area);
475 } 475 }
476 // условия поиска по формату недвижимости 476 // условия поиска по формату недвижимости
477 if (!empty($request->format_area)) { 477 if (!empty($request->format_area)) {
478 $house_prodaja = $house_prodaja->where('format_area_id', '=', $request->format_area); 478 $house_prodaja = $house_prodaja->where('format_area_id', '=', $request->format_area);
479 } 479 }
480 // условия поиска по площади - минимальная площадь 480 // условия поиска по площади - минимальная площадь
481 if (!empty($request->area_m2_min)) { 481 if (!empty($request->area_m2_min)) {
482 $house_prodaja = $house_prodaja->where('area', '>', $request->area_m2_min); 482 $house_prodaja = $house_prodaja->where('area', '>', $request->area_m2_min);
483 } 483 }
484 // условия поиска по площади - максимальная площадь 484 // условия поиска по площади - максимальная площадь
485 if (!empty($request->area_m2_max)) { 485 if (!empty($request->area_m2_max)) {
486 $house_prodaja = $house_prodaja->where('area', '<', $request->area_m2_max); 486 $house_prodaja = $house_prodaja->where('area', '<', $request->area_m2_max);
487 } 487 }
488 // условия поиска по цене - минимальная цена 488 // условия поиска по цене - минимальная цена
489 if (!empty($request->price_min)) { 489 if (!empty($request->price_min)) {
490 $house_prodaja = $house_prodaja->where('price', '>', $request->price_min); 490 $house_prodaja = $house_prodaja->where('price', '>', $request->price_min);
491 } 491 }
492 // условия поиска по цене - максимальная цена 492 // условия поиска по цене - максимальная цена
493 if (!empty($request->price_max)) { 493 if (!empty($request->price_max)) {
494 $house_prodaja = $house_prodaja->where('price', '<', $request->price_max); 494 $house_prodaja = $house_prodaja->where('price', '<', $request->price_max);
495 } 495 }
496 // условия поиска по адресу 496 // условия поиска по адресу
497 if (!empty($request->address)) { 497 if (!empty($request->address)) {
498 $house_prodaja = $house_prodaja->where('address', 'LIKE', "%".$request->address."%"); 498 $house_prodaja = $house_prodaja->where('address', 'LIKE', "%".$request->address."%");
499 } 499 }
500 500
501 if ($request->view == 'prodaja') { 501 if ($request->view == 'prodaja') {
502 switch ($request->sort_price) { 502 switch ($request->sort_price) {
503 case 1: $house_prodaja = $house_prodaja->orderBy('price');break; 503 case 1: $house_prodaja = $house_prodaja->orderBy('price');break;
504 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break; 504 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break;
505 } 505 }
506 switch ($request->sort_new) { 506 switch ($request->sort_new) {
507 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break; 507 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break;
508 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break; 508 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break;
509 } 509 }
510 switch ($request->sort_area) { 510 switch ($request->sort_area) {
511 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break; 511 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break;
512 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break; 512 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break;
513 } 513 }
514 } else { 514 } else {
515 $house_prodaja = $house_prodaja->orderBy('price')-> 515 $house_prodaja = $house_prodaja->orderBy('price')->
516 orderByDesc('created_at')-> 516 orderByDesc('created_at')->
517 orderByDesc('area')->get(); 517 orderByDesc('area')->get();
518 } 518 }
519 519
520 //////////////// Раздел бизнеса///////////////////////////////////////////////////////// 520 //////////////// Раздел бизнеса/////////////////////////////////////////////////////////
521 $house_bissnes = House::with('areas')-> 521 $house_bissnes = House::with('areas')->
522 where('format_house', '=', 'Бизнес'); 522 where('format_house', '=', 'Бизнес');
523 //orderByDesc('created_at')->get(); 523 //orderByDesc('created_at')->get();
524 524
525 // условия поиска по объектам комплексов 525 // условия поиска по объектам комплексов
526 if (!empty($request->area)) { 526 if (!empty($request->area)) {
527 $house_bissnes = $house_bissnes->where('area_id', '=', $request->area); 527 $house_bissnes = $house_bissnes->where('area_id', '=', $request->area);
528 } 528 }
529 // условия поиска по типу недвижимости 529 // условия поиска по типу недвижимости
530 if (!empty($request->type_area)) { 530 if (!empty($request->type_area)) {
531 $house_bissnes = $house_bissnes->where('type_area_id', '=', $request->type_area); 531 $house_bissnes = $house_bissnes->where('type_area_id', '=', $request->type_area);
532 } 532 }
533 // условия поиска по формату недвижимости 533 // условия поиска по формату недвижимости
534 if (!empty($request->format_area)) { 534 if (!empty($request->format_area)) {
535 $house_bissnes = $house_bissnes->where('format_area_id', '=', $request->format_area); 535 $house_bissnes = $house_bissnes->where('format_area_id', '=', $request->format_area);
536 } 536 }
537 // условия поиска по площади - минимальная площадь 537 // условия поиска по площади - минимальная площадь
538 if (!empty($request->area_m2_min)) { 538 if (!empty($request->area_m2_min)) {
539 $house_bissnes = $house_bissnes->where('area', '>', $request->area_m2_min); 539 $house_bissnes = $house_bissnes->where('area', '>', $request->area_m2_min);
540 } 540 }
541 // условия поиска по площади - максимальная площадь 541 // условия поиска по площади - максимальная площадь
542 if (!empty($request->area_m2_max)) { 542 if (!empty($request->area_m2_max)) {
543 $house_bissnes = $house_bissnes->where('area', '<', $request->area_m2_max); 543 $house_bissnes = $house_bissnes->where('area', '<', $request->area_m2_max);
544 } 544 }
545 // условия поиска по цене - минимальная цена 545 // условия поиска по цене - минимальная цена
546 if (!empty($request->price_min)) { 546 if (!empty($request->price_min)) {
547 $house_bissnes = $house_bissnes->where('price', '>', $request->price_min); 547 $house_bissnes = $house_bissnes->where('price', '>', $request->price_min);
548 } 548 }
549 // условия поиска по цене - максимальная цена 549 // условия поиска по цене - максимальная цена
550 if (!empty($request->price_max)) { 550 if (!empty($request->price_max)) {
551 $house_bissnes = $house_bissnes->where('price', '<', $request->price_max); 551 $house_bissnes = $house_bissnes->where('price', '<', $request->price_max);
552 } 552 }
553 // условия поиска по адресу 553 // условия поиска по адресу
554 if (!empty($request->address)) { 554 if (!empty($request->address)) {
555 $house_bissnes = $house_bissnes->where('address', 'LIKE', "%".$request->address."%"); 555 $house_bissnes = $house_bissnes->where('address', 'LIKE', "%".$request->address."%");
556 } 556 }
557 557
558 if ($request->view == 'bissnes') { 558 if ($request->view == 'bissnes') {
559 switch ($request->sort_price) { 559 switch ($request->sort_price) {
560 case 1: $house_bissnes = $house_bissnes->orderBy('price');break; 560 case 1: $house_bissnes = $house_bissnes->orderBy('price');break;
561 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break; 561 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break;
562 } 562 }
563 switch ($request->sort_new) { 563 switch ($request->sort_new) {
564 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break; 564 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break;
565 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break; 565 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break;
566 } 566 }
567 switch ($request->sort_area) { 567 switch ($request->sort_area) {
568 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break; 568 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break;
569 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break; 569 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break;
570 } 570 }
571 } else { 571 } else {
572 $house_bissnes = $house_bissnes->orderBy('price')-> 572 $house_bissnes = $house_bissnes->orderBy('price')->
573 orderByDesc('created_at')-> 573 orderByDesc('created_at')->
574 orderByDesc('area')->get(); 574 orderByDesc('area')->get();
575 } 575 }
576 576
577 //////////раздел арендованные////////////////////////////////////////////////////////// 577 //////////раздел арендованные//////////////////////////////////////////////////////////
578 $house_arendovannie = House::with('areas')-> 578 $house_arendovannie = House::with('areas')->
579 where('format_house', '=', 'Арендованные'); 579 where('format_house', '=', 'Арендованные');
580 //orderByDesc('created_at')->get(); 580 //orderByDesc('created_at')->get();
581 581
582 // условия поиска по объектам комплексов 582 // условия поиска по объектам комплексов
583 if (!empty($request->area)) { 583 if (!empty($request->area)) {
584 $house_arendovannie = $house_arendovannie->where('area_id', '=', $request->area); 584 $house_arendovannie = $house_arendovannie->where('area_id', '=', $request->area);
585 } 585 }
586 // условия поиска по типу недвижимости 586 // условия поиска по типу недвижимости
587 if (!empty($request->type_area)) { 587 if (!empty($request->type_area)) {
588 $house_arendovannie = $house_arendovannie->where('type_area_id', '=', $request->type_area); 588 $house_arendovannie = $house_arendovannie->where('type_area_id', '=', $request->type_area);
589 } 589 }
590 // условия поиска по формату недвижимости 590 // условия поиска по формату недвижимости
591 if (!empty($request->format_area)) { 591 if (!empty($request->format_area)) {
592 $house_arendovannie = $house_arendovannie->where('format_area_id', '=', $request->format_area); 592 $house_arendovannie = $house_arendovannie->where('format_area_id', '=', $request->format_area);
593 } 593 }
594 // условия поиска по площади - минимальная площадь 594 // условия поиска по площади - минимальная площадь
595 if (!empty($request->area_m2_min)) { 595 if (!empty($request->area_m2_min)) {
596 $house_arendovannie = $house_arendovannie->where('area', '>', $request->area_m2_min); 596 $house_arendovannie = $house_arendovannie->where('area', '>', $request->area_m2_min);
597 } 597 }
598 // условия поиска по площади - максимальная площадь 598 // условия поиска по площади - максимальная площадь
599 if (!empty($request->area_m2_max)) { 599 if (!empty($request->area_m2_max)) {
600 $house_arendovannie = $house_arendovannie->where('area', '<', $request->area_m2_max); 600 $house_arendovannie = $house_arendovannie->where('area', '<', $request->area_m2_max);
601 } 601 }
602 // условия поиска по цене - минимальная цена 602 // условия поиска по цене - минимальная цена
603 if (!empty($request->price_min)) { 603 if (!empty($request->price_min)) {
604 $house_arendovannie = $house_arendovannie->where('price', '>', $request->price_min); 604 $house_arendovannie = $house_arendovannie->where('price', '>', $request->price_min);
605 } 605 }
606 // условия поиска по цене - максимальная цена 606 // условия поиска по цене - максимальная цена
607 if (!empty($request->price_max)) { 607 if (!empty($request->price_max)) {
608 $house_arendovannie = $house_arendovannie->where('price', '<', $request->price_max); 608 $house_arendovannie = $house_arendovannie->where('price', '<', $request->price_max);
609 } 609 }
610 // условия поиска по адресу 610 // условия поиска по адресу
611 if (!empty($request->address)) { 611 if (!empty($request->address)) {
612 $house_arendovannie = $house_arendovannie->where('address', 'LIKE', "%".$request->address."%"); 612 $house_arendovannie = $house_arendovannie->where('address', 'LIKE', "%".$request->address."%");
613 } 613 }
614 614
615 if ($request->view == 'arendovannie') { 615 if ($request->view == 'arendovannie') {
616 switch ($request->sort_price) { 616 switch ($request->sort_price) {
617 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break; 617 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break;
618 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break; 618 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break;
619 } 619 }
620 switch ($request->sort_new) { 620 switch ($request->sort_new) {
621 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break; 621 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break;
622 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break; 622 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break;
623 } 623 }
624 switch ($request->sort_area) { 624 switch ($request->sort_area) {
625 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break; 625 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break;
626 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break; 626 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break;
627 } 627 }
628 } else { 628 } else {
629 $house_arendovannie = $house_arendovannie->orderBy('price')-> 629 $house_arendovannie = $house_arendovannie->orderBy('price')->
630 orderByDesc('created_at')-> 630 orderByDesc('created_at')->
631 orderByDesc('area')->get(); 631 orderByDesc('area')->get();
632 } 632 }
633 633
634 if ($request->ajax()) { 634 if ($request->ajax()) {
635 switch($request->view) { 635 switch($request->view) {
636 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break; 636 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break;
637 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break; 637 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break;
638 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break; 638 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break;
639 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break; 639 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break;
640 } 640 }
641 } 641 }
642 if (session('message') == 'Искать') { 642 if (session('message') == 'Искать') {
643 session()->flash('message', 'Сброс'); 643 session()->flash('message', 'Сброс');
644 } else { 644 } else {
645 session()->flash('message', 'Искать'); 645 session()->flash('message', 'Искать');
646 } 646 }
647 647
648 if (empty($request)) { 648 if (empty($request)) {
649 session()->flash('message', 'Искать'); 649 session()->flash('message', 'Искать');
650 } 650 }
651 651
652 return view('catalog', compact( 652 return view('catalog', compact(
653 'house_arenda', 653 'house_arenda',
654 'house_prodaja', 654 'house_prodaja',
655 'house_bissnes', 655 'house_bissnes',
656 'house_arendovannie' 656 'house_arendovannie'
657 )); 657 ));
658 658
659 659
660 } 660 }
661 661
662 /* 662 /*
663 * Новости 663 * Новости
664 */ 664 */
665 public function News() { 665 public function News() {
666 //$news = News::orderByDesc('created_at')->limit(1)->paginate(); 666 //$news = News::orderByDesc('created_at')->limit(1)->paginate();
667 $news_ = News::query()->orderByDesc('created_at')->paginate(4); 667 $news_ = News::query()->orderByDesc('created_at')->paginate(4);
668 return view('news', compact('news_')); 668 return view('news', compact('news_'));
669 } 669 }
670 670
671 /* 671 /*
672 * Контакты 672 * Контакты
673 */ 673 */
674 public function Contact() { 674 public function Contact() {
675 return view('contact'); 675 return view('contact');
676 } 676 }
677 677
678 /* 678 /*
679 * Карта объектов 679 * Карта объектов
680 */ 680 */
681 public function MapsObj(Request $request) { 681 public function MapsObj(Request $request) {
682 //$houses = House::with('areas');
683 //$houses = $houses->orderBy('id')->get();
684 $areas = Area::query()->orderBy('id')->get();
682 685
683 return view('mapsobj'); 686 return view('mapsobj', compact('areas'));
684 } 687 }
685 688
686 /* 689 /*
687 * Посмотр конктретного предложение офиса 690 * Посмотр конктретного предложение офиса
688 */ 691 */
689 public function Offer(House $house) { 692 public function Offer(House $house) {
690 $houses = House::with('areas'); 693 $houses = House::with('areas');
691 $houses = $houses->where('type_area_id', '=', $house->typearea->id); 694 $houses = $houses->where('type_area_id', '=', $house->typearea->id);
692 $houses = $houses->where('format_house', '=', $house->format_house); 695 $houses = $houses->where('format_house', '=', $house->format_house);
693 $houses = $houses->orderByDesc('created_at')->limit(8)->get(); 696 $houses = $houses->orderByDesc('created_at')->limit(8)->get();
694 697
695 return view('house.post', compact('house', 'houses')); 698 return view('house.post', compact('house', 'houses'));
696 } 699 }
697 700
698 /* 701 /*
699 * Просмотр детально конкретной новости 702 * Просмотр детально конкретной новости
700 */ 703 */
701 public function DetailNew(News $news) { 704 public function DetailNew(News $news) {
702 $news_list = News::query()->orderByDesc('created_at')->limit(8)->get(); 705 $news_list = News::query()->orderByDesc('created_at')->limit(8)->get();
703 return view('new.post', compact('news', 'news_list')); 706 return view('new.post', compact('news', 'news_list'));
704 } 707 }
705 } 708 }
706 709
database/migrations/2023_03_01_073202_create_houses_table.php
1 <?php 1 <?php
2 2
3 use Illuminate\Database\Migrations\Migration; 3 use Illuminate\Database\Migrations\Migration;
4 use Illuminate\Database\Schema\Blueprint; 4 use Illuminate\Database\Schema\Blueprint;
5 use Illuminate\Support\Facades\Schema; 5 use Illuminate\Support\Facades\Schema;
6 6
7 return new class extends Migration 7 return new class extends Migration
8 { 8 {
9 /** 9 /**
10 * Run the migrations. 10 * Run the migrations.
11 * 11 *
12 * @return void 12 * @return void
13 */ 13 */
14 public function up() 14 public function up()
15 { 15 {
16 Schema::create('houses', function (Blueprint $table) { 16 Schema::create('houses', function (Blueprint $table) {
17 $table->id(); 17 $table->id();
18 $table->integer('area_id'); 18 $table->integer('area_id');
19 $table->integer('type_area_id'); 19 $table->integer('type_area_id');
20 $table->integer('format_area_id'); 20 $table->integer('format_area_id');
21 $table->string('title', 255)->default(''); 21 $table->string('title', 255)->default('');
22 //$table->string('slug', 255)->default(''); 22 //$table->string('slug', 255)->default('');
23 $table->string('metro', 255)->default(''); 23 $table->string('metro', 255)->default('');
24 $table->string('color_metro', 255)->default(''); 24 $table->string('color_metro', 255)->default('');
25 $table->string('foto_main', 255)->default(''); 25 $table->string('foto_main', 255)->default('');
26 $table->string('address', 255)->default(''); 26 $table->string('address', 255)->default('');
27 $table->string('okrug', 255)->default(''); 27 $table->string('okrug', 255)->default('');
28 $table->string('articul_area', 255)->default(''); 28 $table->string('articul_area', 255)->default('');
29 $table->integer('area')->default(0); 29 $table->integer('area')->default(0);
30 $table->string('format_house', 50)->default('Аренда'); 30 $table->string('format_house', 50)->default('Аренда');
31 $table->integer('floor')->default(1); 31 $table->integer('floor')->default(1);
32 $table->integer('floor_bild')->default(1); 32 $table->integer('floor_bild')->default(1);
33 $table->string('renter')->default(''); 33 $table->string('renter')->default('');
34 $table->boolean('unloading_area')->default('1'); 34 $table->boolean('unloading_area')->default('1');
35 $table->string('electric_power')->default(''); 35 $table->string('electric_power')->default('');
36 $table->boolean('travel_card')->default('1'); 36 $table->boolean('travel_card')->default('1');
37 $table->boolean('passing_place')->default('1'); 37 $table->boolean('passing_place')->default('1');
38 $table->boolean('separate_input')->default('1'); 38 $table->boolean('separate_input')->default('1');
39 $table->boolean('shop_windows')->default('1'); 39 $table->boolean('shop_windows')->default('1');
40 $table->boolean('place_advertising')->default('1'); 40 $table->boolean('place_advertising')->default('1');
41 $table->integer('windows')->default('1'); 41 $table->integer('windows')->default('1');
42 $table->boolean('hood')->default('1'); 42 $table->boolean('hood')->default('1');
43 $table->boolean('central_heating')->default('1'); 43 $table->boolean('central_heating')->default('1');
44 $table->string('opening_hours')->default(''); 44 $table->string('opening_hours')->default('');
45 $table->boolean('finishing')->default('1'); 45 $table->boolean('finishing')->default('1');
46 $table->integer('parking')->default(15); 46 $table->integer('parking')->default(15);
47 $table->integer('price')->default(0); 47 $table->integer('price')->default(0);
48 $table->integer('price_m2')->default(0); 48 $table->integer('price_m2')->default(0);
49 $table->integer('rent_in_year')->default(0); 49 $table->integer('rent_in_year')->default(0);
50 $table->integer('rent_in_month')->default(0); 50 $table->integer('rent_in_month')->default(0);
51 $table->string('scheme_deal', 255)->default('Прямая аренда'); 51 $table->string('scheme_deal', 255)->default('Прямая аренда');
52 $table->string('present', 255)->default(''); 52 $table->string('present', 255)->default('');
53 $table->string('object_plan', 255)->default(''); 53 $table->string('object_plan', 255)->default('');
54 $table->string('floor_plan', 255)->default(''); 54 $table->string('floor_plan', 255)->default('');
55 $table->string('description_metro', 255); 55 $table->string('description_metro', 255);
56 $table->text('description_house')->nullable(true); 56 $table->text('description_house')->nullable(true);
57 $table->string('map_coord', 255)->default(''); 57 $table->string('map_coord', 255)->default('');
58 $table->boolean('best')->default('0'); 58 $table->boolean('best')->default('0');
59 $table->string('description_2')->default(''); 59 $table->string('description_2', 255)->default('');
60 $table->string('sos_obj')->default('Рабочая'); 60 $table->string('sos_obj', 255)->default('Рабочая');
61 $table->string('type_plan')->default('Открытая'); 61 $table->string('type_plan', 255)->default('Открытая');
62 62 $table->string('coord_x', 50)->default('0');
63 $table->string('coord_y', 50)->default('0');
63 $table->timestamps(); 64 $table->timestamps();
64 }); 65 });
65 } 66 }
66 67
67 /** 68 /**
68 * Reverse the migrations. 69 * Reverse the migrations.
69 * 70 *
70 * @return void 71 * @return void
71 */ 72 */
72 public function down() 73 public function down()
73 { 74 {
74 Schema::dropIfExists('houses'); 75 Schema::dropIfExists('houses');
75 } 76 }
76 }; 77 };
77 78
public/js/main.js
1 // управляющий класс App с методом init(), в котором собраны все используемые методы с комментариями о том, что конкретно делает каждый метод File was deleted
2
3 class App {
4
5 constructor() {
6 this.patternPhone = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/; // рег. выражение для поля 'телефон';
7 this.patternEmail = /^[a-zA-Z0-9._%+-\.]+@[a-z0-9.-]+\.[a-z]{2,}$/i; // рег. выражение для поля 'электронная почта';
8 }
9
10 init() {
11
12 console.log('init');
13
14 this.stickyHeader(); // липкий хедер;
15 this.controlBurgerMenu(); // бургер-меню;
16 this.smoothScroll(); // плавный скролл к якорю (smooth scroll);
17 this.scrollUp(); // кнопка наверх;
18 this.addToFavorites(); // добавить в избранное (звёздочка);
19 this.initTypicalSlider(); // типовые слайдеры;
20 this.initPartnerslSlider(); // слайдер с партнёрами;
21 this.controlFilters(); // фильтры на главном экране;
22 this.controlPopups(); // открытие/закрытие поп-апов;
23 this.controlContactUsPopup(); // открытие/закрытие поп-апа 'обратный звонок';
24
25 this.sendForm('.js_popup_feedback_form', '[data-popup="success"]'); // отправка формы в поп-апе обратной связи;
26 this.sendForm('.js_popup_viewing_form', '[data-popup="success"]'); // отправка формы в поп-апе 'записаться на просмотр';
27 this.sendForm('.js_footer_feedback_form', '[data-popup="success"]'); // отправка формы в футере;
28 this.sendForm('.js_contacts_form', '.js_contacts_success'); // отправка формы на странице контакты;
29 this.sendForm('.js_popup_sending_form_', '[data-popup="success"]');
30 //this.sendOffer(); //отправка предложения по e-mail;
31
32 this.setGeneralMap(); // карта на странице карт;
33 this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК';
34 this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение';
35 this.setCatalogSorts(); // сортировка на странице 'каталог';
36 this.initIntroSlider(); // слайдер на странице жк и на странице предложения;
37 this.setTabs('.js_offer_side_tab', '.js_offer_side_item'); // табы с планами объекат и этажа на странице предложения;
38 this.setTabs('.js_offer_side_popup_tab', '.js_offer_side_popup_item'); // табы с планами объекат и этажа в поп-апе на странице предложения;
39 this.sontrolOfferSidePopup(); // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения;
40 this.setCustomGallery(); // галлерея;
41 this.setCookies() // куки;
42 this.setFooterSpoilers() // аккордеон в футере;
43
44 }
45
46 // фиксация <body>
47 fixBodyPosition() {
48
49 setTimeout(function () {
50 // ставим необходимую задержку, чтобы не было «конфликта» в случае, если функция фиксации вызывается сразу после расфиксации (расфиксация отменяет действия расфиксации из-за одновременного действия)
51
52 if (!document.body.hasAttribute('data-body-scroll-fix')) {
53
54 // получаем позицию прокрутки
55 let scrollPosition = window.pageYOffset || document.documentElement.scrollTop;
56
57 // ставим нужные стили
58 document.body.setAttribute('data-body-scroll-fix', scrollPosition); // Cтавим атрибут со значением прокрутки
59 document.body.style.overflow = 'hidden';
60 document.body.style.position = 'fixed';
61 document.body.style.top = '-' + scrollPosition + 'px';
62 document.body.style.left = '0';
63 document.body.style.width = '100%';
64
65 if (window.innerWidth >= 1200) {
66 document.body.style.paddingRight = '8px';
67 }
68 }
69
70 }, 15); // можно задержку ещё меньше, но работает хорошо именно с этим значением на всех устройствах и браузерах
71
72 }
73
74
75 // расфиксация <body>
76 unfixBodyPosition() {
77
78 if (document.body.hasAttribute('data-body-scroll-fix')) {
79
80 // получаем позицию прокрутки из атрибута
81 let scrollPosition = document.body.getAttribute('data-body-scroll-fix');
82
83 // удаляем атрибут
84 document.body.removeAttribute('data-body-scroll-fix');
85
86 // удаляем ненужные стили
87 document.body.style.overflow = '';
88 document.body.style.position = '';
89 document.body.style.top = '';
90 document.body.style.left = '';
91 document.body.style.width = '';
92 document.body.style.paddingRight = '';
93
94 // прокручиваем страницу на полученное из атрибута значение
95 window.scroll(0, scrollPosition);
96
97 }
98
99 }
100
101
102 // бургер-меню
103 controlBurgerMenu() {
104
105 const headerBurger = document.querySelector('.js_header_burger');
106
107 if (headerBurger) {
108
109 const menu = document.querySelector('.js_menu');
110 const menuClose = menu.querySelector('.js_menu_close');
111
112 headerBurger.addEventListener('click', () => {
113 menu.classList.add('active');
114 this.fixBodyPosition();
115 });
116
117 menu.addEventListener('click', (e) => {
118
119 if (e.target == menu) {
120 menu.classList.remove('active');
121 this.unfixBodyPosition();
122 }
123
124 });
125
126 menuClose.addEventListener('click', () => {
127 menu.classList.remove('active');
128 this.unfixBodyPosition();
129 });
130
131 }
132
133 }
134
135
136 // липкий хедер
137 stickyHeader() {
138
139 const header = document.querySelector('.js_header');
140
141 if (header) {
142
143 window.addEventListener('scroll', () => {
144
145 if (window.scrollY > 200) {
146 header.classList.add('fixed');
147 } else {
148 header.classList.remove('fixed');
149 }
150
151 });
152
153 };
154
155 }
156
157
158 // плавный скролл к якорю (smooth scroll)
159 smoothScroll() {
160
161 const smoothLinks = document.querySelectorAll('.js_smooth_link');
162
163 if (smoothLinks.length) {
164
165 smoothLinks.forEach(link => {
166
167 link.addEventListener('click', function (e) {
168
169 e.preventDefault();
170
171 let href = this.getAttribute('href').substring(1);
172
173 const scrollTarget = document.getElementById(href);
174
175 // const topOffset = document.querySelector('.header').offsetHeight;
176 const topOffset = 0; // если не нужен отступ сверху
177 const elementPosition = scrollTarget.getBoundingClientRect().top;
178 const offsetPosition = elementPosition - topOffset;
179
180 window.scrollBy({
181 top: offsetPosition,
182 behavior: 'smooth'
183 });
184
185 });
186
187 });
188
189 }
190
191 }
192
193
194 // кнопка наверх
195 scrollUp() {
196
197 const toTopBtn = document.querySelector('.js_btn_up');
198
199 if (toTopBtn) {
200
201 toTopBtn.addEventListener('click', function () {
202
203 window.scrollTo({
204 top: 0,
205 behavior: 'smooth'
206 });
207
208 });
209
210 }
211
212 }
213
214
215 // добавить в избранное (звёздочка)
216 addToFavorites() {
217
218 const cardFavorites = document.querySelectorAll('.js_card_favorites');
219
220 if (cardFavorites.length) {
221
222 cardFavorites.forEach(item => {
223
224 item.addEventListener('click', (e) => {
225 e.preventDefault();
226 item.classList.toggle('active');
227 });
228
229 });
230
231 }
232
233 }
234
235
236 // типовые слайдеры
237 initTypicalSlider() {
238
239 const slidersWraps = document.querySelectorAll('.slider__wrap');
240
241 if (slidersWraps.length) {
242
243 slidersWraps.forEach(wrap => {
244
245 const slider = wrap.querySelector('.swiper');
246 const prev = wrap.querySelector('.swiper-button-prev');
247 const next = wrap.querySelector('.swiper-button-next');
248 const pagination = wrap.querySelector('.swiper-pagination');
249
250 let swiper1 = new Swiper(slider, {
251 navigation: {
252 nextEl: next,
253 prevEl: prev,
254 },
255 pagination: {
256 el: pagination,
257 clickable: true,
258 },
259 slidesPerView: 1,
260 spaceBetween: 20,
261 observer: true,
262 observeParents: true,
263 observeSlideChildren: true,
264 breakpoints: {
265 480: {
266 slidesPerView: 1.5,
267 },
268 640: {
269 slidesPerView: 2,
270 },
271 780: {
272 slidesPerView: 2.5,
273 },
274 920: {
275 slidesPerView: 3,
276 },
277 1024: {
278 slidesPerView: 3.4
279 },
280 1200: {
281 slidesPerView: 4,
282 }
283 }
284 });
285
286 });
287
288 }
289
290 }
291
292
293 // метод, делающий число удобночитаемым (добавляет пробел справа через каждые 3 цифры)
294 prettify(num) {
295 const withoutSpace = num.replace(/[^\d]/g, ''); //убирает все символы;
296 return withoutSpace.replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' '); //ставит пробелы;
297 }
298
299
300 // фильтры на главном экране
301 controlFilters() {
302
303 const heroFilters = document.querySelectorAll('.js_hero_filter');
304 const heroSearchBtns = document.querySelectorAll('.js_hero_search_btn');
305
306 if (heroFilters.length) {
307
308 heroFilters.forEach(filter => {
309
310 const heroFilterInput = filter.querySelector('.js_hero_filter_input');
311 const heroFilterCurrent = filter.querySelector('.js_hero_filter_current');
312 const heroFilterItems = filter.querySelectorAll('.hero-filter__item');
313 const heroFilterFields = filter.querySelectorAll('.js_hero_filter_field');
314 const heroFilterFrom = filter.querySelector('.js_hero_filter_from');
315 const heroFilterTo = filter.querySelector('.js_hero_filter_to');
316 const heroFilterReset = filter.querySelector('.js_hero_filter_reset');
317
318 heroFilterCurrent.addEventListener('click', () => {
319
320 if (filter.classList.contains('active')) {
321
322 filter.classList.remove('active');
323
324 heroSearchBtns.forEach(btn => {
325 btn.disabled = false;
326 });
327
328 } else {
329
330 heroFilters.forEach(filter => {
331 filter.classList.remove('active');
332 });
333
334 filter.classList.add('active');
335
336 heroSearchBtns.forEach(btn => {
337 btn.disabled = true;
338 });
339
340 }
341
342 });
343
344 if (heroFilterItems.length) {
345
346 heroFilterItems.forEach(item => {
347
348 item.addEventListener('click', () => {
349
350 heroFilterCurrent.textContent = item.textContent;
351 heroFilterInput.value = item.dataset.val;
352 filter.classList.remove('active');
353
354 heroSearchBtns.forEach(btn => {
355 btn.disabled = false;
356 });
357
358 });
359
360 });
361
362 }
363
364 if (heroFilterFields.length) {
365
366 const heroFilterMin = heroFilterFrom.dataset.min;
367 const heroFilterMax = heroFilterTo.dataset.max;
368
369 let heroFilterFromVal;
370 let heroFilterToVal;
371
372 heroFilterFields.forEach(field => {
373
374 field.addEventListener('input', () => {
375
376 field.value = this.prettify(field.value);
377
378 heroFilterReset.classList.remove('active');
379
380 heroFilterFields.forEach(field => {
381
382 if (field.value != "") {
383 heroFilterReset.classList.add('active');
384 }
385
386 });
387
388 });
389
390 });
391
392 heroFilterFrom.addEventListener('change', () => {
393
394 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
395 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
396
397 if (heroFilterToVal != '' && heroFilterFromVal > heroFilterToVal) {
398
399 heroFilterFrom.value = heroFilterTo.value;
400
401 } else if (heroFilterFromVal < +heroFilterMin) {
402
403 heroFilterFrom.value = this.prettify(heroFilterMin);
404
405 } else if (heroFilterFromVal > +heroFilterMax) {
406
407 heroFilterFrom.value = this.prettify(heroFilterMax);
408
409 }
410
411 });
412
413 heroFilterTo.addEventListener('change', () => {
414
415 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
416 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
417
418 if (heroFilterFromVal != '' && heroFilterToVal < heroFilterFromVal) {
419
420 heroFilterTo.value = heroFilterFrom.value;
421
422 } else if (heroFilterToVal < +heroFilterMin) {
423
424 heroFilterTo.value = this.prettify(heroFilterMax);
425
426 } else if (heroFilterToVal > +heroFilterMax) {
427
428 heroFilterTo.value = this.prettify(heroFilterMax);
429
430 }
431
432 });
433
434 heroFilterReset.addEventListener('click', () => {
435
436 heroFilterFields.forEach(field => {
437 field.value = '';
438 });
439
440 heroFilterReset.classList.remove('active');
441
442 });
443 }
444
445 });
446
447 document.addEventListener('click', (e) => {
448
449 if (!e.target.closest('.js_hero_filter_dropdown') && !e.target.closest('.js_hero_filter_current')) {
450
451 heroFilters.forEach(filter => {
452 filter.classList.remove('active');
453 });
454
455 heroSearchBtns.forEach(btn => {
456 btn.disabled = false;
457 });
458
459 }
460
461 });
462
463 }
464
465 }
466
467
468 // открытие/закрытие типовых поп-апов
469 controlPopups() {
470
471 const popupShowBtns = document.querySelectorAll('[data-btn]');
472 const popups = document.querySelectorAll('[data-popup]');
473
474 if (popupShowBtns.length) {
475
476 popupShowBtns.forEach(btn => {
477
478 btn.addEventListener('click', (e) => {
479
480 e.preventDefault();
481
482 popups.forEach(popup => {
483
484 popup.classList.remove('active'); // если какойто поп-ап открыт, то закрываем его;
485 this.unfixBodyPosition();
486
487 if (btn.dataset.btn == popup.dataset.popup) {
488 popup.classList.add('active');
489 this.fixBodyPosition();
490 }
491
492 });
493
494
495 });
496
497 });
498
499 popups.forEach(popup => {
500
501 const popupCloseBtns = popup.querySelectorAll('.js_popup_close');
502
503 popupCloseBtns.forEach(btn => {
504
505 btn.addEventListener('click', (e) => {
506 e.preventDefault();
507 popup.classList.remove('active');
508 this.unfixBodyPosition();
509 });
510
511 });
512
513 popup.addEventListener('click', (e) => {
514
515 if (e.target == popup) {
516
517 popup.classList.remove('active');
518 this.unfixBodyPosition();
519 }
520
521 });
522
523 });
524
525 }
526 }
527
528
529 // открытие/закрытие поп-апа 'обратный звонок'
530 controlContactUsPopup() {
531
532 const contactUsBtn = document.querySelector('.js_btn_contact_us');
533 const contactUsPopup = document.querySelector('.js_contact_us');
534
535 if (contactUsPopup) {
536
537 const contactUsPopupCloseBtns = contactUsPopup.querySelectorAll('.js_contact_us_close');
538
539 contactUsBtn.addEventListener('click', (e) => {
540
541 e.preventDefault();
542
543 if (contactUsPopup.classList.contains('active')) {
544 contactUsPopup.classList.remove('active');
545 } else {
546 contactUsPopup.classList.add('active');
547 }
548
549 });
550
551 contactUsPopupCloseBtns.forEach(btn => {
552 btn.addEventListener('click', () => {
553 contactUsPopup.classList.remove('active');
554 });
555 });
556
557
558 document.addEventListener('click', (e) => {
559
560 if (!e.target.closest('.js_contact_us') && !e.target.closest('.js_btn_contact_us')) {
561 contactUsPopup.classList.remove('active');
562 }
563
564 });
565
566 }
567
568 }
569
570
571 // валидатор форм
572 validateForm(input) {
573
574 // функция добавления ошибки
575 const createError = (text) => {
576
577 input.classList.add('error');
578 input.classList.remove('no-error');
579
580 if (input.closest('label').querySelector('span.error')) {
581 input.closest('label').querySelector('span.error').remove();
582 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
583 } else {
584 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
585 }
586
587 }
588
589 // функция удаления ошибки
590 const removeError = () => {
591
592 input.classList.remove('error');
593 input.classList.add('no-error');
594
595 if (input.closest('label').querySelector('span.error')) {
596 input.closest('label').querySelector('span.error').remove();
597 }
598
599 }
600
601 // проверяем на правильность заполнения поля 'Телефон'
602 if (input.classList.contains('js_input_phone') && input.value == "") {
603 createError('Заполните, пожалуйста, поле');
604 } else if (input.classList.contains('js_input_phone') && input.value.search(this.patternPhone) == 0) {
605 removeError();
606 } else if (input.classList.contains('js_input_phone')) {
607 createError('Укажите, пожалуйста, корректный телефон');
608 }
609
610 // проверяем правильность заполнения поля 'Электронная почта'
611 if (input.classList.contains('js_input_email') && input.value == "") {
612 createError('Заполните, пожалуйста, поле');
613 } else if (input.classList.contains('js_input_email') && input.value.search(this.patternEmail) == 0) {
614 removeError();
615 } else if (input.classList.contains('js_input_email')) {
616 createError('Укажите, пожалуйста, корректный e-mail');
617 }
618
619 }
620
621
622 // отправка форм
623 sendForm(formEl, success) {
624
625 const form = document.querySelector(formEl);
626
627 if (form) {
628
629 form.addEventListener('submit', async (e) => {
630
631 e.preventDefault();
632
633 const formInputs = form.querySelectorAll('input');
634 const formBtn = form.querySelector('.js_form_btn');
635
636 formInputs.forEach(input => { // перебираем все инпуты в форме;
637
638 this.validateForm(input);
639
640 input.addEventListener('input', () => {
641 this.validateForm(input);
642 });
643
644 });
645
646 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
647
648 // сюда пишем команды, которые должны сработать после успешной валидации;
649
650 console.log('validate');
651 formBtn.classList.add('btn-animate');
652 formBtn.disabled = true;
653
654 const formData = new FormData(form);
655
656 console.log(...formData);
657
658 const response = await fetch(e.target.action, {
659 method: e.target.method,
660 body: formData
661 });
662
663 if (response.ok) {
664
665 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
666
667 console.log('Отправлено');
668 formBtn.classList.remove('btn-animate');
669 formBtn.disabled = false;
670 if (document.querySelector('[data-popup="feedback"]')) {
671 document.querySelector('[data-popup="feedback"]').classList.remove('active');
672 }
673 if (document.querySelector('[data-popup="viewing"]')) {
674 document.querySelector('[data-popup="viewing"]').classList.remove('active');
675 }
676 document.querySelector(success).classList.add('active');
677 this.fixBodyPosition();
678 form.reset();
679
680 formInputs.forEach(input => {
681 input.classList.remove('no-error');
682 });
683
684 }, 2000)
685
686 } else {
687 formBtn.classList.remove('btn-animate');
688 formBtn.disabled = false;
689 alert('Ошибка');
690 }
691
692 } else {
693 console.log('no-validate');
694 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
695 }
696
697 });
698
699 }
700
701 }
702
703 //отправка предложения по e-mail
704 sendOffer() {
705
706 const form = document.querySelector('.js_popup_sending_form');
707
708 if (form) {
709
710 form.addEventListener('submit', async (e) => {
711
712 e.preventDefault();
713
714 const formInputs = form.querySelectorAll('input');
715 const formBtn = form.querySelector('.js_form_btn');
716
717 formInputs.forEach(input => { // перебираем все инпуты в форме;
718
719 this.validateForm(input);
720
721 input.addEventListener('input', () => {
722 this.validateForm(input);
723 });
724
725 });
726
727 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
728
729 // сюда пишем команды, которые должны сработать после успешной валидации;
730
731 console.log('validate');
732 formBtn.classList.add('btn-animate');
733 formBtn.disabled = true;
734
735 const formData = new FormData(form);
736
737 console.log(...formData);
738
739 const response = await fetch(e.target.action, {
740 method: e.target.method,
741 body: formData
742 });
743
744 if (response.ok) {
745
746 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
747
748 console.log('Отправлено');
749 formBtn.classList.remove('btn-animate');
750 formBtn.disabled = false;
751 if (document.querySelector('[data-popup="sending"]')) {
752 document.querySelector('[data-popup="sending"]').classList.remove('active');
753 }
754 this.fixBodyPosition();
755 form.reset();
756
757 formInputs.forEach(input => {
758 input.classList.remove('no-error');
759 });
760
761 }, 2000)
762
763 } else {
764 formBtn.classList.remove('btn-animate');
765 formBtn.disabled = false;
766 alert('Ошибка');
767 }
768
769 } else {
770 console.log('no-validate');
771 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
772 }
773
774 });
775
776 }
777
778 }
779
780
781 // карта на странице 'ЖК'
782 setComplexMap(id, coords, caption) {
783
784 if (document.querySelector('#' + id)) {
785
786 // Дождёмся загрузки API и готовности DOM.
787 ymaps.ready(init);
788
789 function init() {
790 const map = new ymaps.Map(id, {
791 // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования.
792 center: coords,
793 zoom: 16,
794 controls: []
795 });
796
797 // Создаём макет содержимого.
798 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
799 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
800 );
801
802 // Создание макета содержимого хинта.
803 // Макет создается через фабрику макетов с помощью текстового шаблона.
804 const HintLayout = ymaps.templateLayoutFactory.createClass("<div class='my-hint'>" +
805 "{{ properties.object }}" + "</div>", {
806 // Определяем метод getShape, который
807 // будет возвращать размеры макета хинта.
808 // Это необходимо для того, чтобы хинт автоматически
809 // сдвигал позицию при выходе за пределы карты.
810 getShape: function () {
811 let el = this.getElement(),
812 result = null;
813 if (el) {
814 var firstChild = el.firstChild;
815 result = new ymaps.shape.Rectangle(
816 new ymaps.geometry.pixel.Rectangle([
817 [0, 0],
818 [firstChild.offsetWidth, firstChild.offsetHeight]
819 ])
820 );
821 }
822 return result;
823 }
824 }
825 );
826
827 // метка
828 const placemark = new ymaps.Placemark(coords, {
829 // hintContent: caption,
830 // balloonContent: caption,
831 iconContent: '1',
832 // address: caption,
833 object: caption
834 }, {
835 iconLayout: 'default#imageWithContent',
836 iconImageHref: 'images/mark-complex.svg',
837 iconImageSize: [52, 67],
838 iconImageOffset: [-26, -67],
839 iconContentOffset: [0, 17],
840 iconContentLayout: MyIconContentLayout,
841 hintLayout: HintLayout
842 });
843
844 map.geoObjects.add(placemark);
845
846 }
847
848 }
849
850 }
851
852
853 // фильтры и сортировка на странице 'каталог'
854 setCatalogSorts() {
855
856 const sortGroups = document.querySelectorAll('.js_sort_group');
857
858 if (sortGroups.length) {
859
860 sortGroups.forEach(group => {
861
862 const sortGroupInput = group.querySelector('.js_sort_group_input');
863 const sortGroupCurrent = group.querySelector('.js_sort_group_current');
864 const sortGroupList = group.querySelector('.js_sort_group_list');
865 const sortGroupItems = group.querySelectorAll('.js_sort_group_item');
866
867 const sendRequest = () => {
868
869 const spinner = document.querySelector('.spinner'); // спиннер;
870
871 spinner.classList.add('active');
872 document.body.classList.add('overlay');
873 /*this.fixBodyPosition();
874
875 fetch('test.json')
876 .then(response => response.json())
877 .then(data => {
878
879 console.log()
880
881 setTimeout(() => { //имитация ответа сервера
882
883 spinner.classList.remove('active');
884 document.body.classList.remove('overlay');
885 this.unfixBodyPosition();
886
887 }, 3000);
888
889 })
890 .catch(err => {
891 console.log(err);
892 });
893
894 */
895 spinner.classList.remove('active');
896 document.body.classList.remove('overlay');
897
898
899 };
900
901 sortGroupCurrent.addEventListener('click', () => {
902
903 if (group.classList.contains('active')) {
904
905 group.classList.remove('active');
906
907 } else {
908
909 sortGroups.forEach(group => {
910 group.classList.remove('active');
911 });
912
913 group.classList.add('active');
914
915 }
916
917 });
918
919 sortGroupItems.forEach(item => {
920
921 item.addEventListener('click', () => {
922
923 sortGroupItems.forEach(item => {
924 item.classList.remove('active');
925 });
926
927 item.classList.add('active');
928 sortGroupCurrent.textContent = item.textContent;
929 sortGroupInput.value = item.dataset.val;
930 group.classList.remove('active');
931
932 sendRequest();
933
934 });
935
936 });
937
938 });
939
940 document.addEventListener('click', (e) => {
941
942 if (!e.target.closest('.js_sort_group_list') && !e.target.closest('.js_sort_group_current')) {
943
944 sortGroups.forEach(group => {
945 group.classList.remove('active');
946 });
947
948 }
949
950 });
951
952 }
953
954 }
955
956
957 // слайдер на странице жк и на странице предложения
958 initIntroSlider() {
959
960 let swiper3 = new Swiper('.intro__swiper', {
961 navigation: {
962 nextEl: '.swiper-button-next',
963 prevEl: '.swiper-button-prev',
964 },
965 pagination: {
966 el: '.swiper-pagination',
967 clickable: true,
968 },
969 slidesPerView: 1.1,
970 spaceBetween: 20,
971 breakpoints: {
972 480: {
973 slidesPerView: 1.5,
974 },
975 640: {
976 slidesPerView: 1.75,
977 },
978 780: {
979 slidesPerView: 2.15,
980 },
981 1024: {
982 slidesPerView: 3.5,
983 },
984 1200: {
985 slidesPerView: 1,
986 }
987 }
988 });
989
990 }
991
992
993 // табы на странице предложения
994 setTabs(tabs, items) {
995
996 const offerSideTabs = document.querySelectorAll(tabs);
997 const offerSideItems = document.querySelectorAll(items);
998
999 if (offerSideTabs) {
1000
1001 offerSideTabs.forEach(tab => {
1002
1003 tab.addEventListener('click', () => {
1004
1005 offerSideTabs.forEach(tab => {
1006 tab.classList.remove('active');
1007 });
1008
1009 tab.classList.add('active');
1010
1011 offerSideItems.forEach(item => {
1012
1013 item.classList.remove('active', 'fade');
1014
1015 if (tab.dataset.tab == item.dataset.item) {
1016 item.classList.add('active', 'fade');
1017 }
1018
1019 });
1020
1021 });
1022
1023 });
1024
1025 }
1026
1027 }
1028
1029
1030 // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения
1031 sontrolOfferSidePopup() {
1032
1033 const offerSideItems = document.querySelectorAll('.js_offer_side_item');
1034 const offerSidePopupTabs = document.querySelectorAll('.js_offer_side_popup_tab');
1035 const offerSidePopupItems = document.querySelectorAll('.js_offer_side_popup_item');
1036
1037 if (offerSideItems) {
1038
1039 offerSideItems.forEach(item => {
1040
1041 const offerSideItemBtn = item.querySelector('.js_offer_side_item_btn');
1042
1043 offerSideItemBtn.addEventListener('click', (e) => {
1044
1045 e.preventDefault();
1046
1047 offerSidePopupTabs.forEach(tab => {
1048
1049 tab.classList.remove('active');
1050
1051 if (item.dataset.item == tab.dataset.tab) {
1052 tab.classList.add('active');
1053 }
1054
1055 });
1056
1057 offerSidePopupItems.forEach(el => {
1058
1059 el.classList.remove('active', 'fade');
1060
1061 if (item.dataset.item == el.dataset.item) {
1062 el.classList.add('active', 'fade');
1063 }
1064
1065 });
1066
1067 });
1068
1069 });
1070
1071 }
1072
1073 }
1074
1075
1076 // галлерея
1077 setCustomGallery() {
1078
1079 let swiper4 = new Swiper(".img-viewer__thumbs-swiper", {
1080 slidesPerView: 3,
1081 spaceBetween: 8,
1082 // freeMode: true,
1083 observer: true,
1084 observeParents: true,
1085 observeSlideChildren: true,
1086 breakpoints: {
1087 640: {
1088 spaceBetween: 10,
1089 },
1090 },
1091 });
1092
1093 let swiper5 = new Swiper(".img-viewer__slider .swiper", {
1094 navigation: {
1095 nextEl: ".img-viewer__slider .swiper-button-next",
1096 prevEl: ".img-viewer__slider .swiper-button-prev",
1097 },
1098 slidesPerView: 1,
1099 spaceBetween: 20,
1100 thumbs: {
1101 swiper: swiper4
1102 },
1103 observer: true,
1104 observeParents: true,
1105 observeSlideChildren: true,
1106 });
1107
1108 if (document.querySelector('.js_intro_item_btn')) {
1109
1110 const imgViewer = document.querySelector('.js_img_viewer');
1111 const imgViewerCloses = imgViewer.querySelectorAll('.js_img_viewer_close');
1112 const imgViewerCaption = imgViewer.querySelector('.js_img_viewer_caption');
1113
1114 const imgViewerSliderSwiper = imgViewer.querySelector('.js_img_viewer_slider_swiper');
1115 const imgViewerSliderSwiperWrap = imgViewerSliderSwiper.querySelector('.js_img_viewer_slider_swiper .swiper-wrapper');
1116
1117 const imgViewerThumbsSwiper = imgViewer.querySelector('.js_img_viewer_thumbs_swiper');
1118 const imgViewerThumbsSwiperWrap = imgViewerThumbsSwiper.querySelector('.js_img_viewer_thumbs_swiper .swiper-wrapper');
1119
1120 const introItemBtns = document.querySelectorAll('.js_intro_item_btn');
1121
1122 introItemBtns.forEach((btn, i) => {
1123
1124 btn.addEventListener('click', (e) => {
1125
1126 e.preventDefault();
1127
1128 imgViewer.classList.add('active');
1129 this.fixBodyPosition();
1130
1131 imgViewerSliderSwiperWrap.innerHTML = '';
1132 imgViewerThumbsSwiperWrap.innerHTML = '';
1133 imgViewerCaption.textContent = '';
1134
1135
1136 introItemBtns.forEach(btn => {
1137
1138 imgViewerSliderSwiperWrap.insertAdjacentHTML('beforeend', `
1139 <div class="swiper-slide">
1140 <img src="${btn.getAttribute('href')}" alt="">
1141 </div>`
1142 );
1143
1144 imgViewerThumbsSwiperWrap.insertAdjacentHTML('beforeend', `
1145 <div class="swiper-slide">
1146 <img src="${btn.getAttribute('href')}" alt="">
1147 </div>`
1148 );
1149
1150 });
1151
1152 swiper4.update();
1153 swiper5.update();
1154 swiper5.slideTo(i);
1155 imgViewerCaption.textContent = btn.dataset.caption;
1156
1157 });
1158
1159 });
1160
1161 swiper5.on('slideChange', function () {
1162 imgViewerCaption.textContent = introItemBtns[swiper5.realIndex].dataset.caption;
1163 });
1164
1165 imgViewerCloses.forEach(close => {
1166
1167 close.addEventListener('click', () => {
1168
1169 imgViewer.classList.remove('active');
1170 this.unfixBodyPosition();
1171
1172 });
1173
1174 });
1175
1176 }
1177
1178 }
1179
1180
1181 // куки
1182 setCookies() {
1183
1184 const cookies = document.querySelector('.js_cookies');
1185 const cookiesBtn = document.querySelector('.js_cookies_confirm');
1186 const cookiesTrigger = document.querySelector('.js_btn_cookies');
1187
1188 if (cookiesTrigger) {
1189
1190 cookiesTrigger.addEventListener('click', () => {
1191 cookies.classList.add('active');
1192 });
1193
1194 };
1195
1196 if (cookies) {
1197
1198 cookiesBtn.addEventListener('click', () => {
1199 cookies.classList.remove('active');
1200 });
1201
1202 };
1203
1204 }
1205
1206
1207 // карта на странице карт;
1208 setGeneralMap() {
1209
1210 if (document.querySelector('#general-map')) {
1211
1212 ymaps.ready(init); // Дождёмся загрузки API и готовности DOM;
1213
1214 function init() {
1215
1216 const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id;
1217 center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования;
1218 zoom: 10,
1219 controls: [] // Скрываем элементы управления на карте;
1220 });
1221
1222 // Создаём макет содержимого.
1223 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
1224 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
1225 );
1226
1227 let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива);
1228 // preset: 'islands#yellowIcon'
1229 });
1230
1231 let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте);
1232 [55.867783219108354, 37.392867499999916],
1233 [55.728043075486504, 37.73937949999994],
1234 [55.72624100423305, 37.476078499999964],
1235 [55.80751105044832, 37.449622999999974],
1236 [55.601783098948836, 37.36700499999998],
1237 [55.86086502152225, 37.540348999999964],
1238 [55.784961528728715, 37.56188599999996],
1239 [55.63910010399773, 37.319407999999996],
1240 [55.55819256767507, 37.55711549999994],
1241 [55.79829252928473, 37.52063549999999],
1242 ];
1243
1244 for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию;
1245 collection.add(new ymaps.Placemark(collectionCoords[i]));
1246 collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent';
1247 }
1248
1249 myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту;
1250
1251 collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета;
1252 collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки;
1253 collection.options.set('iconImageSize', [52, 67]); // Размеры метки;
1254 collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1255 collection.options.set('iconContentOffset', [0, 17]);
1256 collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1257
1258 const pageMapBar = document.querySelector('.js_page_map_bar');
1259 const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn');
1260 const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list');
1261 const pageMapBarCards = pageMapBar.querySelectorAll('.card-news');
1262
1263 const showCard = (i) => {
1264
1265 pageMapBarCards.forEach((card, k) => {
1266
1267 card.classList.remove('active');
1268
1269 if (i == k) {
1270 card.classList.add('active');
1271 }
1272
1273 });
1274
1275 };
1276
1277 const hidecard = () => {
1278
1279 pageMapBarCards.forEach(card => {
1280 card.classList.remove('active');
1281 });
1282
1283 }
1284
1285 let pageMapBarItems;
1286
1287 pageMapBarBtn.addEventListener('click', () => {
1288 pageMapBar.classList.toggle('active');
1289 });
1290
1291 pageMapBarList.addEventListener('click', (e) => {
1292
1293 if (e.target.closest('.page-map-bar__item')) {
1294
1295 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1296
1297 pageMapBarItems.forEach((item, i) => {
1298
1299 if (e.target == item && e.target.classList.contains('active')) {
1300
1301 item.classList.remove('active');
1302
1303 hidecard();
1304
1305 } else if (e.target == item) {
1306
1307 pageMapBarItems.forEach(item => {
1308 item.classList.remove('active');
1309 });
1310
1311 item.classList.add('active');
1312
1313 let offsetCoords = collection.get(i).geometry.getCoordinates();
1314
1315 offsetCoords = [
1316 offsetCoords[0] - 0.0025,
1317 offsetCoords[1]
1318 ];
1319
1320 myMap.setZoom(16);
1321 // myMap.setCenter(collection.get(i).geometry.getCoordinates());
1322 myMap.setCenter(offsetCoords);
1323
1324 showCard(i);
1325
1326 }
1327
1328 });
1329 }
1330
1331 });
1332
1333 collection.events.add('click', function (e) {
1334
1335 for (let i = 0, l = collection.getLength(); i < l; i++) {
1336
1337 if (e.get('target') == collection.get(i)) {
1338
1339 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1340
1341 pageMapBarItems.forEach((item) => {
1342 pageMapBar.classList.add('active');
1343 item.classList.remove('active');
1344 });
1345
1346 pageMapBarItems[i].classList.add('active');
1347
1348 showCard(i);
1349
1350 }
1351
1352 }
1353
1354 });
1355
1356 }
1357
1358 }
1359
1360 };
1361
1362
1363 // аккордеон в футере
1364 setFooterSpoilers() {
1365
1366 const items = document.querySelectorAll('.js_footer_col');
1367
1368 items.forEach(item => {
1369
1370 const itemTitle = item.querySelector('.js_footer_caption');
1371 const itemContent = item.querySelector('.js_footer_block');
1372
1373 const blockToggle = (block, duration) => {
1374
1375 if (window.getComputedStyle(block).display == "none" && !block.classList.contains('smooth')) {
1376
1377 block.style.display = "block";
1378
1379 const blockHeight = block.offsetHeight;
1380
1381 block.style.height = 0;
1382 block.style.overflow = "hidden";
1383 block.style.transition = `height ${duration}ms ease`;
1384 block.classList.add('smooth');
1385 block.offsetHeight;
1386 block.style.height = `${blockHeight}px`;
1387
1388 setTimeout(() => {
1389
1390 block.classList.remove('smooth');
1391 block.style.height = '';
1392 block.style.transition = '';
1393 block.style.overflow = '';
1394
1395 }, duration);
1396
1397 } else if (!block.classList.contains('smooth')) {
1398
1399 block.style.height = `${block.offsetHeight}px`;
1400 block.offsetHeight;
1401 block.style.height = 0;
1402 block.style.overflow = "hidden";
1403 block.style.transition = `height ${duration}ms ease`;
1404 block.classList.add('smooth');
1405
1406 setTimeout(() => {
1407
1408 block.classList.remove('smooth');
1409 block.style.display = "none";
1410 block.style.height = '';
1411 block.style.transition = '';
1412 block.style.overflow = '';
1413
1414 }, duration);
1415
1416 }
1417
1418 };
1419
1420 itemTitle.addEventListener('click', (e) => {
1421 itemTitle.classList.toggle('active');
1422 blockToggle(itemContent, 300);
1423 });
1424
1425 });
1426
1427 }
1428
1429
1430 // слайдер с партнёрами;
1431 initPartnerslSlider() {
1432
1433 const slider = document.querySelector('.partners__swiper');
1434
1435 if (slider) {
1436
1437 let swiper6;
1438
1439 const initSlider = () => {
1440
1441 swiper6 = new Swiper(slider, {
1442 // scrollbar: {
1443 // el: '.swiper-scrollbar',
1444 // draggable: true,
1445 // },
1446 slidesPerView: 0.275,
1447 loop: true,
1448 spaceBetween: 20,
1449 freeMode: true,
1450 allowTouchMove: true,
1451 breakpoints: {
1452 480: {
1453 slidesPerView: 0.4,
1454 },
1455 640: {
1456 slidesPerView: 0.65,
1457 },
1458 780: {
1459 slidesPerView: 0.65,
1460 },
1461 1024: {
1462 slidesPerView: 0.8,
1463 },
1464 1200: {
1465 slidesPerView: 1,
1466 loop: false,
1467 allowTouchMove: false,
1468 }
1469 }
1470 });
1471
1472 };
1473
1474 initSlider();
1475
1476 const updateSlider = () => {
1477 swiper6.destroy();
1478 initSlider();
1479 }
1480
1481 window.addEventListener('resize', () => {
1482
1483 if (window.innerWidth <= 1200 && slider.dataset.mobile == 'false') {
1484 slider.dataset.mobile = 'true';
1485 updateSlider();
1486 }
1487
1488 if (window.innerWidth > 1200 && slider.dataset.mobile == 'true') {
1489 slider.dataset.mobile = 'false';
1490 updateSlider();
1491 }
1492
1493 });
1494
1495 }
1496
1497 }
1498
1499 }
1500
1501
1502 document.addEventListener('DOMContentLoaded', () => {
1503
1504 const app = new App();
1505 app.init();
1506
1507 });
1508 1 // управляющий класс App с методом init(), в котором собраны все используемые методы с комментариями о том, что конкретно делает каждый метод
public/js/main_new.js
File was created 1 // управляющий класс App с методом init(), в котором собраны все используемые методы с комментариями о том, что конкретно делает каждый метод
2
3 class App {
4
5 constructor() {
6 this.patternPhone = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/; // рег. выражение для поля 'телефон';
7 this.patternEmail = /^[a-zA-Z0-9._%+-\.]+@[a-z0-9.-]+\.[a-z]{2,}$/i; // рег. выражение для поля 'электронная почта';
8 }
9
10 init() {
11
12 console.log('init');
13
14 this.stickyHeader(); // липкий хедер;
15 this.controlBurgerMenu(); // бургер-меню;
16 this.smoothScroll(); // плавный скролл к якорю (smooth scroll);
17 this.scrollUp(); // кнопка наверх;
18 this.addToFavorites(); // добавить в избранное (звёздочка);
19 this.initTypicalSlider(); // типовые слайдеры;
20 this.initPartnerslSlider(); // слайдер с партнёрами;
21 this.controlFilters(); // фильтры на главном экране;
22 this.controlPopups(); // открытие/закрытие поп-апов;
23 this.controlContactUsPopup(); // открытие/закрытие поп-апа 'обратный звонок';
24
25 this.sendForm('.js_popup_feedback_form', '[data-popup="success"]'); // отправка формы в поп-апе обратной связи;
26 this.sendForm('.js_popup_viewing_form', '[data-popup="success"]'); // отправка формы в поп-апе 'записаться на просмотр';
27 this.sendForm('.js_footer_feedback_form', '[data-popup="success"]'); // отправка формы в футере;
28 this.sendForm('.js_contacts_form', '.js_contacts_success'); // отправка формы на странице контакты;
29 this.sendForm('.js_popup_sending_form_', '[data-popup="success"]');
30 //this.sendOffer(); //отправка предложения по e-mail;
31
32 //this.setGeneralMap(); // карта на странице карт;
33 this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК';
34 this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение';
35 this.setCatalogSorts(); // сортировка на странице 'каталог';
36 this.initIntroSlider(); // слайдер на странице жк и на странице предложения;
37 this.setTabs('.js_offer_side_tab', '.js_offer_side_item'); // табы с планами объекат и этажа на странице предложения;
38 this.setTabs('.js_offer_side_popup_tab', '.js_offer_side_popup_item'); // табы с планами объекат и этажа в поп-апе на странице предложения;
39 this.sontrolOfferSidePopup(); // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения;
40 this.setCustomGallery(); // галлерея;
41 this.setCookies() // куки;
42 this.setFooterSpoilers() // аккордеон в футере;
43
44 }
45
46 // фиксация <body>
47 fixBodyPosition() {
48
49 setTimeout(function () {
50 // ставим необходимую задержку, чтобы не было «конфликта» в случае, если функция фиксации вызывается сразу после расфиксации (расфиксация отменяет действия расфиксации из-за одновременного действия)
51
52 if (!document.body.hasAttribute('data-body-scroll-fix')) {
53
54 // получаем позицию прокрутки
55 let scrollPosition = window.pageYOffset || document.documentElement.scrollTop;
56
57 // ставим нужные стили
58 document.body.setAttribute('data-body-scroll-fix', scrollPosition); // Cтавим атрибут со значением прокрутки
59 document.body.style.overflow = 'hidden';
60 document.body.style.position = 'fixed';
61 document.body.style.top = '-' + scrollPosition + 'px';
62 document.body.style.left = '0';
63 document.body.style.width = '100%';
64
65 if (window.innerWidth >= 1200) {
66 document.body.style.paddingRight = '8px';
67 }
68 }
69
70 }, 15); // можно задержку ещё меньше, но работает хорошо именно с этим значением на всех устройствах и браузерах
71
72 }
73
74
75 // расфиксация <body>
76 unfixBodyPosition() {
77
78 if (document.body.hasAttribute('data-body-scroll-fix')) {
79
80 // получаем позицию прокрутки из атрибута
81 let scrollPosition = document.body.getAttribute('data-body-scroll-fix');
82
83 // удаляем атрибут
84 document.body.removeAttribute('data-body-scroll-fix');
85
86 // удаляем ненужные стили
87 document.body.style.overflow = '';
88 document.body.style.position = '';
89 document.body.style.top = '';
90 document.body.style.left = '';
91 document.body.style.width = '';
92 document.body.style.paddingRight = '';
93
94 // прокручиваем страницу на полученное из атрибута значение
95 window.scroll(0, scrollPosition);
96
97 }
98
99 }
100
101
102 // бургер-меню
103 controlBurgerMenu() {
104
105 const headerBurger = document.querySelector('.js_header_burger');
106
107 if (headerBurger) {
108
109 const menu = document.querySelector('.js_menu');
110 const menuClose = menu.querySelector('.js_menu_close');
111
112 headerBurger.addEventListener('click', () => {
113 menu.classList.add('active');
114 this.fixBodyPosition();
115 });
116
117 menu.addEventListener('click', (e) => {
118
119 if (e.target == menu) {
120 menu.classList.remove('active');
121 this.unfixBodyPosition();
122 }
123
124 });
125
126 menuClose.addEventListener('click', () => {
127 menu.classList.remove('active');
128 this.unfixBodyPosition();
129 });
130
131 }
132
133 }
134
135
136 // липкий хедер
137 stickyHeader() {
138
139 const header = document.querySelector('.js_header');
140
141 if (header) {
142
143 window.addEventListener('scroll', () => {
144
145 if (window.scrollY > 200) {
146 header.classList.add('fixed');
147 } else {
148 header.classList.remove('fixed');
149 }
150
151 });
152
153 };
154
155 }
156
157
158 // плавный скролл к якорю (smooth scroll)
159 smoothScroll() {
160
161 const smoothLinks = document.querySelectorAll('.js_smooth_link');
162
163 if (smoothLinks.length) {
164
165 smoothLinks.forEach(link => {
166
167 link.addEventListener('click', function (e) {
168
169 e.preventDefault();
170
171 let href = this.getAttribute('href').substring(1);
172
173 const scrollTarget = document.getElementById(href);
174
175 // const topOffset = document.querySelector('.header').offsetHeight;
176 const topOffset = 0; // если не нужен отступ сверху
177 const elementPosition = scrollTarget.getBoundingClientRect().top;
178 const offsetPosition = elementPosition - topOffset;
179
180 window.scrollBy({
181 top: offsetPosition,
182 behavior: 'smooth'
183 });
184
185 });
186
187 });
188
189 }
190
191 }
192
193
194 // кнопка наверх
195 scrollUp() {
196
197 const toTopBtn = document.querySelector('.js_btn_up');
198
199 if (toTopBtn) {
200
201 toTopBtn.addEventListener('click', function () {
202
203 window.scrollTo({
204 top: 0,
205 behavior: 'smooth'
206 });
207
208 });
209
210 }
211
212 }
213
214
215 // добавить в избранное (звёздочка)
216 addToFavorites() {
217
218 const cardFavorites = document.querySelectorAll('.js_card_favorites');
219
220 if (cardFavorites.length) {
221
222 cardFavorites.forEach(item => {
223
224 item.addEventListener('click', (e) => {
225 e.preventDefault();
226 item.classList.toggle('active');
227 });
228
229 });
230
231 }
232
233 }
234
235
236 // типовые слайдеры
237 initTypicalSlider() {
238
239 const slidersWraps = document.querySelectorAll('.slider__wrap');
240
241 if (slidersWraps.length) {
242
243 slidersWraps.forEach(wrap => {
244
245 const slider = wrap.querySelector('.swiper');
246 const prev = wrap.querySelector('.swiper-button-prev');
247 const next = wrap.querySelector('.swiper-button-next');
248 const pagination = wrap.querySelector('.swiper-pagination');
249
250 let swiper1 = new Swiper(slider, {
251 navigation: {
252 nextEl: next,
253 prevEl: prev,
254 },
255 pagination: {
256 el: pagination,
257 clickable: true,
258 },
259 slidesPerView: 1,
260 spaceBetween: 20,
261 observer: true,
262 observeParents: true,
263 observeSlideChildren: true,
264 breakpoints: {
265 480: {
266 slidesPerView: 1.5,
267 },
268 640: {
269 slidesPerView: 2,
270 },
271 780: {
272 slidesPerView: 2.5,
273 },
274 920: {
275 slidesPerView: 3,
276 },
277 1024: {
278 slidesPerView: 3.4
279 },
280 1200: {
281 slidesPerView: 4,
282 }
283 }
284 });
285
286 });
287
288 }
289
290 }
291
292
293 // метод, делающий число удобночитаемым (добавляет пробел справа через каждые 3 цифры)
294 prettify(num) {
295 const withoutSpace = num.replace(/[^\d]/g, ''); //убирает все символы;
296 return withoutSpace.replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' '); //ставит пробелы;
297 }
298
299
300 // фильтры на главном экране
301 controlFilters() {
302
303 const heroFilters = document.querySelectorAll('.js_hero_filter');
304 const heroSearchBtns = document.querySelectorAll('.js_hero_search_btn');
305
306 if (heroFilters.length) {
307
308 heroFilters.forEach(filter => {
309
310 const heroFilterInput = filter.querySelector('.js_hero_filter_input');
311 const heroFilterCurrent = filter.querySelector('.js_hero_filter_current');
312 const heroFilterItems = filter.querySelectorAll('.hero-filter__item');
313 const heroFilterFields = filter.querySelectorAll('.js_hero_filter_field');
314 const heroFilterFrom = filter.querySelector('.js_hero_filter_from');
315 const heroFilterTo = filter.querySelector('.js_hero_filter_to');
316 const heroFilterReset = filter.querySelector('.js_hero_filter_reset');
317
318 heroFilterCurrent.addEventListener('click', () => {
319
320 if (filter.classList.contains('active')) {
321
322 filter.classList.remove('active');
323
324 heroSearchBtns.forEach(btn => {
325 btn.disabled = false;
326 });
327
328 } else {
329
330 heroFilters.forEach(filter => {
331 filter.classList.remove('active');
332 });
333
334 filter.classList.add('active');
335
336 heroSearchBtns.forEach(btn => {
337 btn.disabled = true;
338 });
339
340 }
341
342 });
343
344 if (heroFilterItems.length) {
345
346 heroFilterItems.forEach(item => {
347
348 item.addEventListener('click', () => {
349
350 heroFilterCurrent.textContent = item.textContent;
351 heroFilterInput.value = item.dataset.val;
352 filter.classList.remove('active');
353
354 heroSearchBtns.forEach(btn => {
355 btn.disabled = false;
356 });
357
358 });
359
360 });
361
362 }
363
364 if (heroFilterFields.length) {
365
366 const heroFilterMin = heroFilterFrom.dataset.min;
367 const heroFilterMax = heroFilterTo.dataset.max;
368
369 let heroFilterFromVal;
370 let heroFilterToVal;
371
372 heroFilterFields.forEach(field => {
373
374 field.addEventListener('input', () => {
375
376 field.value = this.prettify(field.value);
377
378 heroFilterReset.classList.remove('active');
379
380 heroFilterFields.forEach(field => {
381
382 if (field.value != "") {
383 heroFilterReset.classList.add('active');
384 }
385
386 });
387
388 });
389
390 });
391
392 heroFilterFrom.addEventListener('change', () => {
393
394 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
395 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
396
397 if (heroFilterToVal != '' && heroFilterFromVal > heroFilterToVal) {
398
399 heroFilterFrom.value = heroFilterTo.value;
400
401 } else if (heroFilterFromVal < +heroFilterMin) {
402
403 heroFilterFrom.value = this.prettify(heroFilterMin);
404
405 } else if (heroFilterFromVal > +heroFilterMax) {
406
407 heroFilterFrom.value = this.prettify(heroFilterMax);
408
409 }
410
411 });
412
413 heroFilterTo.addEventListener('change', () => {
414
415 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
416 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
417
418 if (heroFilterFromVal != '' && heroFilterToVal < heroFilterFromVal) {
419
420 heroFilterTo.value = heroFilterFrom.value;
421
422 } else if (heroFilterToVal < +heroFilterMin) {
423
424 heroFilterTo.value = this.prettify(heroFilterMax);
425
426 } else if (heroFilterToVal > +heroFilterMax) {
427
428 heroFilterTo.value = this.prettify(heroFilterMax);
429
430 }
431
432 });
433
434 heroFilterReset.addEventListener('click', () => {
435
436 heroFilterFields.forEach(field => {
437 field.value = '';
438 });
439
440 heroFilterReset.classList.remove('active');
441
442 });
443 }
444
445 });
446
447 document.addEventListener('click', (e) => {
448
449 if (!e.target.closest('.js_hero_filter_dropdown') && !e.target.closest('.js_hero_filter_current')) {
450
451 heroFilters.forEach(filter => {
452 filter.classList.remove('active');
453 });
454
455 heroSearchBtns.forEach(btn => {
456 btn.disabled = false;
457 });
458
459 }
460
461 });
462
463 }
464
465 }
466
467
468 // открытие/закрытие типовых поп-апов
469 controlPopups() {
470
471 const popupShowBtns = document.querySelectorAll('[data-btn]');
472 const popups = document.querySelectorAll('[data-popup]');
473
474 if (popupShowBtns.length) {
475
476 popupShowBtns.forEach(btn => {
477
478 btn.addEventListener('click', (e) => {
479
480 e.preventDefault();
481
482 popups.forEach(popup => {
483
484 popup.classList.remove('active'); // если какойто поп-ап открыт, то закрываем его;
485 this.unfixBodyPosition();
486
487 if (btn.dataset.btn == popup.dataset.popup) {
488 popup.classList.add('active');
489 this.fixBodyPosition();
490 }
491
492 });
493
494
495 });
496
497 });
498
499 popups.forEach(popup => {
500
501 const popupCloseBtns = popup.querySelectorAll('.js_popup_close');
502
503 popupCloseBtns.forEach(btn => {
504
505 btn.addEventListener('click', (e) => {
506 e.preventDefault();
507 popup.classList.remove('active');
508 this.unfixBodyPosition();
509 });
510
511 });
512
513 popup.addEventListener('click', (e) => {
514
515 if (e.target == popup) {
516
517 popup.classList.remove('active');
518 this.unfixBodyPosition();
519 }
520
521 });
522
523 });
524
525 }
526 }
527
528
529 // открытие/закрытие поп-апа 'обратный звонок'
530 controlContactUsPopup() {
531
532 const contactUsBtn = document.querySelector('.js_btn_contact_us');
533 const contactUsPopup = document.querySelector('.js_contact_us');
534
535 if (contactUsPopup) {
536
537 const contactUsPopupCloseBtns = contactUsPopup.querySelectorAll('.js_contact_us_close');
538
539 contactUsBtn.addEventListener('click', (e) => {
540
541 e.preventDefault();
542
543 if (contactUsPopup.classList.contains('active')) {
544 contactUsPopup.classList.remove('active');
545 } else {
546 contactUsPopup.classList.add('active');
547 }
548
549 });
550
551 contactUsPopupCloseBtns.forEach(btn => {
552 btn.addEventListener('click', () => {
553 contactUsPopup.classList.remove('active');
554 });
555 });
556
557
558 document.addEventListener('click', (e) => {
559
560 if (!e.target.closest('.js_contact_us') && !e.target.closest('.js_btn_contact_us')) {
561 contactUsPopup.classList.remove('active');
562 }
563
564 });
565
566 }
567
568 }
569
570
571 // валидатор форм
572 validateForm(input) {
573
574 // функция добавления ошибки
575 const createError = (text) => {
576
577 input.classList.add('error');
578 input.classList.remove('no-error');
579
580 if (input.closest('label').querySelector('span.error')) {
581 input.closest('label').querySelector('span.error').remove();
582 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
583 } else {
584 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
585 }
586
587 }
588
589 // функция удаления ошибки
590 const removeError = () => {
591
592 input.classList.remove('error');
593 input.classList.add('no-error');
594
595 if (input.closest('label').querySelector('span.error')) {
596 input.closest('label').querySelector('span.error').remove();
597 }
598
599 }
600
601 // проверяем на правильность заполнения поля 'Телефон'
602 if (input.classList.contains('js_input_phone') && input.value == "") {
603 createError('Заполните, пожалуйста, поле');
604 } else if (input.classList.contains('js_input_phone') && input.value.search(this.patternPhone) == 0) {
605 removeError();
606 } else if (input.classList.contains('js_input_phone')) {
607 createError('Укажите, пожалуйста, корректный телефон');
608 }
609
610 // проверяем правильность заполнения поля 'Электронная почта'
611 if (input.classList.contains('js_input_email') && input.value == "") {
612 createError('Заполните, пожалуйста, поле');
613 } else if (input.classList.contains('js_input_email') && input.value.search(this.patternEmail) == 0) {
614 removeError();
615 } else if (input.classList.contains('js_input_email')) {
616 createError('Укажите, пожалуйста, корректный e-mail');
617 }
618
619 }
620
621
622 // отправка форм
623 sendForm(formEl, success) {
624
625 const form = document.querySelector(formEl);
626
627 if (form) {
628
629 form.addEventListener('submit', async (e) => {
630
631 e.preventDefault();
632
633 const formInputs = form.querySelectorAll('input');
634 const formBtn = form.querySelector('.js_form_btn');
635
636 formInputs.forEach(input => { // перебираем все инпуты в форме;
637
638 this.validateForm(input);
639
640 input.addEventListener('input', () => {
641 this.validateForm(input);
642 });
643
644 });
645
646 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
647
648 // сюда пишем команды, которые должны сработать после успешной валидации;
649
650 console.log('validate');
651 formBtn.classList.add('btn-animate');
652 formBtn.disabled = true;
653
654 const formData = new FormData(form);
655
656 console.log(...formData);
657
658 const response = await fetch(e.target.action, {
659 method: e.target.method,
660 body: formData
661 });
662
663 if (response.ok) {
664
665 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
666
667 console.log('Отправлено');
668 formBtn.classList.remove('btn-animate');
669 formBtn.disabled = false;
670 if (document.querySelector('[data-popup="feedback"]')) {
671 document.querySelector('[data-popup="feedback"]').classList.remove('active');
672 }
673 if (document.querySelector('[data-popup="viewing"]')) {
674 document.querySelector('[data-popup="viewing"]').classList.remove('active');
675 }
676 document.querySelector(success).classList.add('active');
677 this.fixBodyPosition();
678 form.reset();
679
680 formInputs.forEach(input => {
681 input.classList.remove('no-error');
682 });
683
684 }, 2000)
685
686 } else {
687 formBtn.classList.remove('btn-animate');
688 formBtn.disabled = false;
689 alert('Ошибка');
690 }
691
692 } else {
693 console.log('no-validate');
694 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
695 }
696
697 });
698
699 }
700
701 }
702
703 //отправка предложения по e-mail
704 sendOffer() {
705
706 const form = document.querySelector('.js_popup_sending_form');
707
708 if (form) {
709
710 form.addEventListener('submit', async (e) => {
711
712 e.preventDefault();
713
714 const formInputs = form.querySelectorAll('input');
715 const formBtn = form.querySelector('.js_form_btn');
716
717 formInputs.forEach(input => { // перебираем все инпуты в форме;
718
719 this.validateForm(input);
720
721 input.addEventListener('input', () => {
722 this.validateForm(input);
723 });
724
725 });
726
727 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
728
729 // сюда пишем команды, которые должны сработать после успешной валидации;
730
731 console.log('validate');
732 formBtn.classList.add('btn-animate');
733 formBtn.disabled = true;
734
735 const formData = new FormData(form);
736
737 console.log(...formData);
738
739 const response = await fetch(e.target.action, {
740 method: e.target.method,
741 body: formData
742 });
743
744 if (response.ok) {
745
746 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
747
748 console.log('Отправлено');
749 formBtn.classList.remove('btn-animate');
750 formBtn.disabled = false;
751 if (document.querySelector('[data-popup="sending"]')) {
752 document.querySelector('[data-popup="sending"]').classList.remove('active');
753 }
754 this.fixBodyPosition();
755 form.reset();
756
757 formInputs.forEach(input => {
758 input.classList.remove('no-error');
759 });
760
761 }, 2000)
762
763 } else {
764 formBtn.classList.remove('btn-animate');
765 formBtn.disabled = false;
766 alert('Ошибка');
767 }
768
769 } else {
770 console.log('no-validate');
771 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
772 }
773
774 });
775
776 }
777
778 }
779
780
781 // карта на странице 'ЖК'
782 setComplexMap(id, coords, caption) {
783
784 if (document.querySelector('#' + id)) {
785
786 // Дождёмся загрузки API и готовности DOM.
787 ymaps.ready(init);
788
789 function init() {
790 const map = new ymaps.Map(id, {
791 // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования.
792 center: coords,
793 zoom: 16,
794 controls: []
795 });
796
797 // Создаём макет содержимого.
798 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
799 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
800 );
801
802 // Создание макета содержимого хинта.
803 // Макет создается через фабрику макетов с помощью текстового шаблона.
804 const HintLayout = ymaps.templateLayoutFactory.createClass("<div class='my-hint'>" +
805 "{{ properties.object }}" + "</div>", {
806 // Определяем метод getShape, который
807 // будет возвращать размеры макета хинта.
808 // Это необходимо для того, чтобы хинт автоматически
809 // сдвигал позицию при выходе за пределы карты.
810 getShape: function () {
811 let el = this.getElement(),
812 result = null;
813 if (el) {
814 var firstChild = el.firstChild;
815 result = new ymaps.shape.Rectangle(
816 new ymaps.geometry.pixel.Rectangle([
817 [0, 0],
818 [firstChild.offsetWidth, firstChild.offsetHeight]
819 ])
820 );
821 }
822 return result;
823 }
824 }
825 );
826
827 // метка
828 const placemark = new ymaps.Placemark(coords, {
829 // hintContent: caption,
830 // balloonContent: caption,
831 iconContent: '1',
832 // address: caption,
833 object: caption
834 }, {
835 iconLayout: 'default#imageWithContent',
836 iconImageHref: 'images/mark-complex.svg',
837 iconImageSize: [52, 67],
838 iconImageOffset: [-26, -67],
839 iconContentOffset: [0, 17],
840 iconContentLayout: MyIconContentLayout,
841 hintLayout: HintLayout
842 });
843
844 map.geoObjects.add(placemark);
845
846 }
847
848 }
849
850 }
851
852
853 // фильтры и сортировка на странице 'каталог'
854 setCatalogSorts() {
855
856 const sortGroups = document.querySelectorAll('.js_sort_group');
857
858 if (sortGroups.length) {
859
860 sortGroups.forEach(group => {
861
862 const sortGroupInput = group.querySelector('.js_sort_group_input');
863 const sortGroupCurrent = group.querySelector('.js_sort_group_current');
864 const sortGroupList = group.querySelector('.js_sort_group_list');
865 const sortGroupItems = group.querySelectorAll('.js_sort_group_item');
866
867 const sendRequest = () => {
868
869 const spinner = document.querySelector('.spinner'); // спиннер;
870
871 spinner.classList.add('active');
872 document.body.classList.add('overlay');
873 /*this.fixBodyPosition();
874
875 fetch('test.json')
876 .then(response => response.json())
877 .then(data => {
878
879 console.log()
880
881 setTimeout(() => { //имитация ответа сервера
882
883 spinner.classList.remove('active');
884 document.body.classList.remove('overlay');
885 this.unfixBodyPosition();
886
887 }, 3000);
888
889 })
890 .catch(err => {
891 console.log(err);
892 });
893
894 */
895 spinner.classList.remove('active');
896 document.body.classList.remove('overlay');
897
898
899 };
900
901 sortGroupCurrent.addEventListener('click', () => {
902
903 if (group.classList.contains('active')) {
904
905 group.classList.remove('active');
906
907 } else {
908
909 sortGroups.forEach(group => {
910 group.classList.remove('active');
911 });
912
913 group.classList.add('active');
914
915 }
916
917 });
918
919 sortGroupItems.forEach(item => {
920
921 item.addEventListener('click', () => {
922
923 sortGroupItems.forEach(item => {
924 item.classList.remove('active');
925 });
926
927 item.classList.add('active');
928 sortGroupCurrent.textContent = item.textContent;
929 sortGroupInput.value = item.dataset.val;
930 group.classList.remove('active');
931
932 sendRequest();
933
934 });
935
936 });
937
938 });
939
940 document.addEventListener('click', (e) => {
941
942 if (!e.target.closest('.js_sort_group_list') && !e.target.closest('.js_sort_group_current')) {
943
944 sortGroups.forEach(group => {
945 group.classList.remove('active');
946 });
947
948 }
949
950 });
951
952 }
953
954 }
955
956
957 // слайдер на странице жк и на странице предложения
958 initIntroSlider() {
959
960 let swiper3 = new Swiper('.intro__swiper', {
961 navigation: {
962 nextEl: '.swiper-button-next',
963 prevEl: '.swiper-button-prev',
964 },
965 pagination: {
966 el: '.swiper-pagination',
967 clickable: true,
968 },
969 slidesPerView: 1.1,
970 spaceBetween: 20,
971 breakpoints: {
972 480: {
973 slidesPerView: 1.5,
974 },
975 640: {
976 slidesPerView: 1.75,
977 },
978 780: {
979 slidesPerView: 2.15,
980 },
981 1024: {
982 slidesPerView: 3.5,
983 },
984 1200: {
985 slidesPerView: 1,
986 }
987 }
988 });
989
990 }
991
992
993 // табы на странице предложения
994 setTabs(tabs, items) {
995
996 const offerSideTabs = document.querySelectorAll(tabs);
997 const offerSideItems = document.querySelectorAll(items);
998
999 if (offerSideTabs) {
1000
1001 offerSideTabs.forEach(tab => {
1002
1003 tab.addEventListener('click', () => {
1004
1005 offerSideTabs.forEach(tab => {
1006 tab.classList.remove('active');
1007 });
1008
1009 tab.classList.add('active');
1010
1011 offerSideItems.forEach(item => {
1012
1013 item.classList.remove('active', 'fade');
1014
1015 if (tab.dataset.tab == item.dataset.item) {
1016 item.classList.add('active', 'fade');
1017 }
1018
1019 });
1020
1021 });
1022
1023 });
1024
1025 }
1026
1027 }
1028
1029
1030 // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения
1031 sontrolOfferSidePopup() {
1032
1033 const offerSideItems = document.querySelectorAll('.js_offer_side_item');
1034 const offerSidePopupTabs = document.querySelectorAll('.js_offer_side_popup_tab');
1035 const offerSidePopupItems = document.querySelectorAll('.js_offer_side_popup_item');
1036
1037 if (offerSideItems) {
1038
1039 offerSideItems.forEach(item => {
1040
1041 const offerSideItemBtn = item.querySelector('.js_offer_side_item_btn');
1042
1043 offerSideItemBtn.addEventListener('click', (e) => {
1044
1045 e.preventDefault();
1046
1047 offerSidePopupTabs.forEach(tab => {
1048
1049 tab.classList.remove('active');
1050
1051 if (item.dataset.item == tab.dataset.tab) {
1052 tab.classList.add('active');
1053 }
1054
1055 });
1056
1057 offerSidePopupItems.forEach(el => {
1058
1059 el.classList.remove('active', 'fade');
1060
1061 if (item.dataset.item == el.dataset.item) {
1062 el.classList.add('active', 'fade');
1063 }
1064
1065 });
1066
1067 });
1068
1069 });
1070
1071 }
1072
1073 }
1074
1075
1076 // галлерея
1077 setCustomGallery() {
1078
1079 let swiper4 = new Swiper(".img-viewer__thumbs-swiper", {
1080 slidesPerView: 3,
1081 spaceBetween: 8,
1082 // freeMode: true,
1083 observer: true,
1084 observeParents: true,
1085 observeSlideChildren: true,
1086 breakpoints: {
1087 640: {
1088 spaceBetween: 10,
1089 },
1090 },
1091 });
1092
1093 let swiper5 = new Swiper(".img-viewer__slider .swiper", {
1094 navigation: {
1095 nextEl: ".img-viewer__slider .swiper-button-next",
1096 prevEl: ".img-viewer__slider .swiper-button-prev",
1097 },
1098 slidesPerView: 1,
1099 spaceBetween: 20,
1100 thumbs: {
1101 swiper: swiper4
1102 },
1103 observer: true,
1104 observeParents: true,
1105 observeSlideChildren: true,
1106 });
1107
1108 if (document.querySelector('.js_intro_item_btn')) {
1109
1110 const imgViewer = document.querySelector('.js_img_viewer');
1111 const imgViewerCloses = imgViewer.querySelectorAll('.js_img_viewer_close');
1112 const imgViewerCaption = imgViewer.querySelector('.js_img_viewer_caption');
1113
1114 const imgViewerSliderSwiper = imgViewer.querySelector('.js_img_viewer_slider_swiper');
1115 const imgViewerSliderSwiperWrap = imgViewerSliderSwiper.querySelector('.js_img_viewer_slider_swiper .swiper-wrapper');
1116
1117 const imgViewerThumbsSwiper = imgViewer.querySelector('.js_img_viewer_thumbs_swiper');
1118 const imgViewerThumbsSwiperWrap = imgViewerThumbsSwiper.querySelector('.js_img_viewer_thumbs_swiper .swiper-wrapper');
1119
1120 const introItemBtns = document.querySelectorAll('.js_intro_item_btn');
1121
1122 introItemBtns.forEach((btn, i) => {
1123
1124 btn.addEventListener('click', (e) => {
1125
1126 e.preventDefault();
1127
1128 imgViewer.classList.add('active');
1129 this.fixBodyPosition();
1130
1131 imgViewerSliderSwiperWrap.innerHTML = '';
1132 imgViewerThumbsSwiperWrap.innerHTML = '';
1133 imgViewerCaption.textContent = '';
1134
1135
1136 introItemBtns.forEach(btn => {
1137
1138 imgViewerSliderSwiperWrap.insertAdjacentHTML('beforeend', `
1139 <div class="swiper-slide">
1140 <img src="${btn.getAttribute('href')}" alt="">
1141 </div>`
1142 );
1143
1144 imgViewerThumbsSwiperWrap.insertAdjacentHTML('beforeend', `
1145 <div class="swiper-slide">
1146 <img src="${btn.getAttribute('href')}" alt="">
1147 </div>`
1148 );
1149
1150 });
1151
1152 swiper4.update();
1153 swiper5.update();
1154 swiper5.slideTo(i);
1155 imgViewerCaption.textContent = btn.dataset.caption;
1156
1157 });
1158
1159 });
1160
1161 swiper5.on('slideChange', function () {
1162 imgViewerCaption.textContent = introItemBtns[swiper5.realIndex].dataset.caption;
1163 });
1164
1165 imgViewerCloses.forEach(close => {
1166
1167 close.addEventListener('click', () => {
1168
1169 imgViewer.classList.remove('active');
1170 this.unfixBodyPosition();
1171
1172 });
1173
1174 });
1175
1176 }
1177
1178 }
1179
1180
1181 // куки
1182 setCookies() {
1183
1184 const cookies = document.querySelector('.js_cookies');
1185 const cookiesBtn = document.querySelector('.js_cookies_confirm');
1186 const cookiesTrigger = document.querySelector('.js_btn_cookies');
1187
1188 if (cookiesTrigger) {
1189
1190 cookiesTrigger.addEventListener('click', () => {
1191 cookies.classList.add('active');
1192 });
1193
1194 };
1195
1196 if (cookies) {
1197
1198 cookiesBtn.addEventListener('click', () => {
1199 cookies.classList.remove('active');
1200 });
1201
1202 };
1203
1204 }
1205
1206
1207 // карта на странице карт;
1208 /*
1209 //setGeneralMap() {
1210
1211 if (document.querySelector('#general-map')) {
1212
1213 ymaps.ready(init); // Дождёмся загрузки API и готовности DOM;
1214
1215 function init() {
1216
1217 const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id;
1218 center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования;
1219 zoom: 10,
1220 controls: [] // Скрываем элементы управления на карте;
1221 });
1222
1223 // Создаём макет содержимого.
1224 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
1225 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
1226 );
1227
1228 let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива);
1229 // preset: 'islands#yellowIcon'
1230 });
1231
1232 let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте);
1233 [55.867783219108354, 37.392867499999916],
1234 [55.728043075486504, 37.73937949999994],
1235 [55.72624100423305, 37.476078499999964],
1236 [55.80751105044832, 37.449622999999974],
1237 [55.601783098948836, 37.36700499999998],
1238 [55.86086502152225, 37.540348999999964],
1239 [55.784961528728715, 37.56188599999996],
1240 [55.63910010399773, 37.319407999999996],
1241 [55.55819256767507, 37.55711549999994],
1242 [55.79829252928473, 37.52063549999999],
1243 ];
1244
1245 for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию;
1246 collection.add(new ymaps.Placemark(collectionCoords[i]));
1247 collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent';
1248 }
1249
1250 myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту;
1251
1252 collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета;
1253 collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки;
1254 collection.options.set('iconImageSize', [52, 67]); // Размеры метки;
1255 collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1256 collection.options.set('iconContentOffset', [0, 17]);
1257 collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1258
1259 const pageMapBar = document.querySelector('.js_page_map_bar');
1260 const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn');
1261 const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list');
1262 const pageMapBarCards = pageMapBar.querySelectorAll('.card-news');
1263
1264 const showCard = (i) => {
1265
1266 pageMapBarCards.forEach((card, k) => {
1267
1268 card.classList.remove('active');
1269
1270 if (i == k) {
1271 card.classList.add('active');
1272 }
1273
1274 });
1275
1276 };
1277
1278 const hidecard = () => {
1279
1280 pageMapBarCards.forEach(card => {
1281 card.classList.remove('active');
1282 });
1283
1284 }
1285
1286 let pageMapBarItems;
1287
1288 pageMapBarBtn.addEventListener('click', () => {
1289 pageMapBar.classList.toggle('active');
1290 });
1291
1292 pageMapBarList.addEventListener('click', (e) => {
1293
1294 if (e.target.closest('.page-map-bar__item')) {
1295
1296 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1297
1298 pageMapBarItems.forEach((item, i) => {
1299
1300 if (e.target == item && e.target.classList.contains('active')) {
1301
1302 item.classList.remove('active');
1303
1304 hidecard();
1305
1306 } else if (e.target == item) {
1307
1308 pageMapBarItems.forEach(item => {
1309 item.classList.remove('active');
1310 });
1311
1312 item.classList.add('active');
1313
1314 let offsetCoords = collection.get(i).geometry.getCoordinates();
1315
1316 offsetCoords = [
1317 offsetCoords[0] - 0.0025,
1318 offsetCoords[1]
1319 ];
1320
1321 myMap.setZoom(16);
1322 // myMap.setCenter(collection.get(i).geometry.getCoordinates());
1323 myMap.setCenter(offsetCoords);
1324
1325 showCard(i);
1326
1327 }
1328
1329 });
1330 }
1331
1332 });
1333
1334 collection.events.add('click', function (e) {
1335
1336 for (let i = 0, l = collection.getLength(); i < l; i++) {
1337
1338 if (e.get('target') == collection.get(i)) {
1339
1340 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1341
1342 pageMapBarItems.forEach((item) => {
1343 pageMapBar.classList.add('active');
1344 item.classList.remove('active');
1345 });
1346
1347 pageMapBarItems[i].classList.add('active');
1348
1349 showCard(i);
1350
1351 }
1352
1353 }
1354
1355 });
1356
1357 }
1358
1359 }
1360
1361 };*/
1362
1363
1364 // аккордеон в футере
1365 setFooterSpoilers() {
1366
1367 const items = document.querySelectorAll('.js_footer_col');
1368
1369 items.forEach(item => {
1370
1371 const itemTitle = item.querySelector('.js_footer_caption');
1372 const itemContent = item.querySelector('.js_footer_block');
1373
1374 const blockToggle = (block, duration) => {
1375
1376 if (window.getComputedStyle(block).display == "none" && !block.classList.contains('smooth')) {
1377
1378 block.style.display = "block";
1379
1380 const blockHeight = block.offsetHeight;
1381
1382 block.style.height = 0;
1383 block.style.overflow = "hidden";
1384 block.style.transition = `height ${duration}ms ease`;
1385 block.classList.add('smooth');
1386 block.offsetHeight;
1387 block.style.height = `${blockHeight}px`;
1388
1389 setTimeout(() => {
1390
1391 block.classList.remove('smooth');
1392 block.style.height = '';
1393 block.style.transition = '';
1394 block.style.overflow = '';
1395
1396 }, duration);
1397
1398 } else if (!block.classList.contains('smooth')) {
1399
1400 block.style.height = `${block.offsetHeight}px`;
1401 block.offsetHeight;
1402 block.style.height = 0;
1403 block.style.overflow = "hidden";
1404 block.style.transition = `height ${duration}ms ease`;
1405 block.classList.add('smooth');
1406
1407 setTimeout(() => {
1408
1409 block.classList.remove('smooth');
1410 block.style.display = "none";
1411 block.style.height = '';
1412 block.style.transition = '';
1413 block.style.overflow = '';
1414
1415 }, duration);
1416
1417 }
1418
1419 };
1420
1421 itemTitle.addEventListener('click', (e) => {
1422 itemTitle.classList.toggle('active');
1423 blockToggle(itemContent, 300);
1424 });
1425
1426 });
1427
1428 }
1429
1430
1431 // слайдер с партнёрами;
1432 initPartnerslSlider() {
1433
1434 const slider = document.querySelector('.partners__swiper');
1435
1436 if (slider) {
1437
1438 let swiper6;
1439
1440 const initSlider = () => {
1441
1442 swiper6 = new Swiper(slider, {
1443 // scrollbar: {
1444 // el: '.swiper-scrollbar',
1445 // draggable: true,
1446 // },
1447 slidesPerView: 0.275,
1448 loop: true,
1449 spaceBetween: 20,
1450 freeMode: true,
1451 allowTouchMove: true,
1452 breakpoints: {
1453 480: {
1454 slidesPerView: 0.4,
1455 },
1456 640: {
1457 slidesPerView: 0.65,
1458 },
1459 780: {
1460 slidesPerView: 0.65,
1461 },
1462 1024: {
1463 slidesPerView: 0.8,
1464 },
1465 1200: {
1466 slidesPerView: 1,
1467 loop: false,
1468 allowTouchMove: false,
1469 }
1470 }
1471 });
1472
1473 };
1474
1475 initSlider();
1476
1477 const updateSlider = () => {
1478 swiper6.destroy();
1479 initSlider();
1480 }
1481
1482 window.addEventListener('resize', () => {
1483
1484 if (window.innerWidth <= 1200 && slider.dataset.mobile == 'false') {
1485 slider.dataset.mobile = 'true';
1486 updateSlider();
1487 }
1488
1489 if (window.innerWidth > 1200 && slider.dataset.mobile == 'true') {
1490 slider.dataset.mobile = 'false';
1491 updateSlider();
1492 }
1493
1494 });
1495
1496 }
1497
1498 }
1499
1500 }
1501
1502
1503 document.addEventListener('DOMContentLoaded', () => {
1504
1505 const app = new App();
1506 app.init();
1507
1508 });
1509
public/pug/templates/scripts.pug
1 //- ПОДКЛЮЧЕНИЕ СКРИПТОВ 1 //- ПОДКЛЮЧЕНИЕ СКРИПТОВ
2 2
3 script(src="https://api-maps.yandex.ru/2.1/?lang=ru_RU") 3 script(src="https://api-maps.yandex.ru/2.1/?lang=ru_RU")
4 script(src="js/swiper-bundle.min.js") 4 script(src="js/swiper-bundle.min.js")
5 script(src="js/main.js")
5 script(src="js/main_new.js")
resources/views/admin/houses/form.blade.php
1 @csrf 1 @csrf
2 2
3 @isset($house) 3 @isset($house)
4 @method('PUT') 4 @method('PUT')
5 @endisset 5 @endisset
6 6
7 <label for="title">Заголовок офиса: <span class="req">*</span></label><br> 7 <label for="title">Заголовок офиса: <span class="req">*</span></label><br>
8 @error('title') 8 @error('title')
9 <div class="alert alert-danger">{{ $message }}</div> 9 <div class="alert alert-danger">{{ $message }}</div>
10 @enderror 10 @enderror
11 <input type="text" class="form-control_ txt" name="title" placeholder="Название офиса" 11 <input type="text" class="form-control_ txt" name="title" placeholder="Название офиса"
12 required maxlength="100" style="width: 80%" value="{{ old('title') ?? $house->title ?? '' }}"><br><br> 12 required maxlength="100" style="width: 80%" value="{{ old('title') ?? $house->title ?? '' }}"><br><br>
13 13
14 <label for="best">Лучшее предложение: </label><br> 14 <label for="best">Лучшее предложение: </label><br>
15 @error('best') 15 @error('best')
16 <div class="alert alert-danger">{{ $message }}</div> 16 <div class="alert alert-danger">{{ $message }}</div>
17 @enderror 17 @enderror
18 <select name="best" id="best" class="form-control"> 18 <select name="best" id="best" class="form-control">
19 <option value="1" 19 <option value="1"
20 @isset($house) 20 @isset($house)
21 @if($house->best == '1') 21 @if($house->best == '1')
22 selected 22 selected
23 @endif 23 @endif
24 @endisset 24 @endisset
25 >Да</option> 25 >Да</option>
26 <option value="0" 26 <option value="0"
27 @isset($house) 27 @isset($house)
28 @if($house->best == '0') 28 @if($house->best == '0')
29 selected 29 selected
30 @endif 30 @endif
31 @endisset 31 @endisset
32 >Нет</option> 32 >Нет</option>
33 </select><br><br> 33 </select><br><br>
34 34
35 <label for="area_id">Объект недвижимости (ЖК): <span class="req">*</span></label><br> 35 <label for="area_id">Объект недвижимости (ЖК): <span class="req">*</span></label><br>
36 @error('area_id') 36 @error('area_id')
37 <div class="alert alert-danger">{{ $message }}</div> 37 <div class="alert alert-danger">{{ $message }}</div>
38 @enderror 38 @enderror
39 <select name="area_id" id="area_id" class="form-control"> 39 <select name="area_id" id="area_id" class="form-control">
40 @foreach($areas as $area) 40 @foreach($areas as $area)
41 <option value="{{ $area->id }}" 41 <option value="{{ $area->id }}"
42 @isset($house) 42 @isset($house)
43 @if($house->area_id == $area->id) 43 @if($house->area_id == $area->id)
44 selected 44 selected
45 @endif 45 @endif
46 @endisset 46 @endisset
47 >{{ $area->name_area }}</option> 47 >{{ $area->name_area }}</option>
48 @endforeach 48 @endforeach
49 </select><br><br> 49 </select><br><br>
50 50
51 <label for="type_area_id">Тип недвижимости: <span class="req">*</span></label><br> 51 <label for="type_area_id">Тип недвижимости: <span class="req">*</span></label><br>
52 @error('type_area_id') 52 @error('type_area_id')
53 <div class="alert alert-danger">{{ $message }}</div> 53 <div class="alert alert-danger">{{ $message }}</div>
54 @enderror 54 @enderror
55 <select name="type_area_id" id="type_area_id" class="form-control"> 55 <select name="type_area_id" id="type_area_id" class="form-control">
56 @foreach($type_areas as $tarea) 56 @foreach($type_areas as $tarea)
57 <option value="{{ $tarea->id }}" 57 <option value="{{ $tarea->id }}"
58 @isset($house) 58 @isset($house)
59 @if($house->type_area_id == $tarea->id) 59 @if($house->type_area_id == $tarea->id)
60 selected 60 selected
61 @endif 61 @endif
62 @endisset 62 @endisset
63 >{{ $tarea->name_type }}</option> 63 >{{ $tarea->name_type }}</option>
64 @endforeach 64 @endforeach
65 </select><br><br> 65 </select><br><br>
66 66
67 <label for="format_area_id">Формат недвижимости: <span class="req">*</span></label><br> 67 <label for="format_area_id">Формат недвижимости: <span class="req">*</span></label><br>
68 @error('format_area_id') 68 @error('format_area_id')
69 <div class="alert alert-danger">{{ $message }}</div> 69 <div class="alert alert-danger">{{ $message }}</div>
70 @enderror 70 @enderror
71 <select name="format_area_id" id="format_area_id" class="form-control"> 71 <select name="format_area_id" id="format_area_id" class="form-control">
72 @foreach($format_areas as $farea) 72 @foreach($format_areas as $farea)
73 <option value="{{ $farea->id }}" 73 <option value="{{ $farea->id }}"
74 @isset($house) 74 @isset($house)
75 @if($house->format_area_id == $farea->id) 75 @if($house->format_area_id == $farea->id)
76 selected 76 selected
77 @endif 77 @endif
78 @endisset 78 @endisset
79 >{{ $farea->name_format }}</option> 79 >{{ $farea->name_format }}</option>
80 @endforeach 80 @endforeach
81 </select><br><br> 81 </select><br><br>
82 82
83 <label for="metro">Метро: <span class="req">*</span></label><br> 83 <label for="metro">Метро: <span class="req">*</span></label><br>
84 @error('metro') 84 @error('metro')
85 <div class="alert alert-danger">{{ $message }}</div> 85 <div class="alert alert-danger">{{ $message }}</div>
86 @enderror 86 @enderror
87 <input type="text" class="form-control_ txt" name="metro" placeholder="Название метро" 87 <input type="text" class="form-control_ txt" name="metro" placeholder="Название метро"
88 required maxlength="100" style="width: 80%" value="{{ old('metro') ?? $house->metro ?? '' }}"><br><br> 88 required maxlength="100" style="width: 80%" value="{{ old('metro') ?? $house->metro ?? '' }}"><br><br>
89 89
90 <label for="description_metro">Удаленность метро: </label><br> 90 <label for="description_metro">Удаленность метро: </label><br>
91 @error('description_metro') 91 @error('description_metro')
92 <div class="alert alert-danger">{{ $message }}</div> 92 <div class="alert alert-danger">{{ $message }}</div>
93 @enderror 93 @enderror
94 <input type="text" class="form-control_ txt" name="description_metro" placeholder="Удаленность метро" 94 <input type="text" class="form-control_ txt" name="description_metro" placeholder="Удаленность метро"
95 required maxlength="100" style="width: 80%" value="{{ old('description_metro') ?? $house->description_metro ?? '' }}"><br><br> 95 required maxlength="100" style="width: 80%" value="{{ old('description_metro') ?? $house->description_metro ?? '' }}"><br><br>
96 96
97 <label for="address">Адрес: <span class="req">*</span></label><br> 97 <label for="address">Адрес: <span class="req">*</span></label><br>
98 @error('address') 98 @error('address')
99 <div class="alert alert-danger">{{ $message }}</div> 99 <div class="alert alert-danger">{{ $message }}</div>
100 @enderror 100 @enderror
101 <input type="text" class="form-control_ txt" name="address" placeholder="Адрес" 101 <input type="text" class="form-control_ txt" name="address" placeholder="Адрес"
102 required maxlength="100" style="width: 80%" value="{{ old('address') ?? $house->address ?? '' }}"><br><br> 102 required maxlength="100" style="width: 80%" value="{{ old('address') ?? $house->address ?? '' }}"><br><br>
103 103
104 <label for="okrug">Округ: <span class="req">*</span></label><br> 104 <label for="okrug">Округ: <span class="req">*</span></label><br>
105 @error('okrug') 105 @error('okrug')
106 <div class="alert alert-danger">{{ $message }}</div> 106 <div class="alert alert-danger">{{ $message }}</div>
107 @enderror 107 @enderror
108 <input type="text" class="form-control_ txt" name="okrug" placeholder="Округ" 108 <input type="text" class="form-control_ txt" name="okrug" placeholder="Округ"
109 required maxlength="100" style="width: 80%" value="{{ old('okrug') ?? $house->okrug ?? '' }}"><br><br> 109 required maxlength="100" style="width: 80%" value="{{ old('okrug') ?? $house->okrug ?? '' }}"><br><br>
110 110
111 <label for="foto_main">Файл-картинка:</label><br> 111 <label for="foto_main">Файл-картинка:</label><br>
112 <input type="file" class="form-control-file txt" name="foto_main" id="foto_main" accept="image/png, image/jpeg"><br> 112 <input type="file" class="form-control-file txt" name="foto_main" id="foto_main" accept="image/png, image/jpeg"><br>
113 113
114 @isset($house->foto_main) 114 @isset($house->foto_main)
115 <div class="form-group form-check"> 115 <div class="form-group form-check">
116 <img src="<?=asset(Storage::url($house->foto_main))?>" width="100px"/> 116 <img src="<?=asset(Storage::url($house->foto_main))?>" width="100px"/>
117 <input type="checkbox" class="form-check-input" name="remove" id="remove"> 117 <input type="checkbox" class="form-check-input" name="remove" id="remove">
118 <label class="form-check-label" for="remove"> 118 <label class="form-check-label" for="remove">
119 Удалить загруженное изображение 119 Удалить загруженное изображение
120 </label> 120 </label>
121 </div> 121 </div>
122 @endisset 122 @endisset
123 <br> 123 <br>
124 124
125 <label for="articul_area">Артикул помещения: </label><br> 125 <label for="articul_area">Артикул помещения: </label><br>
126 @error('articul_area') 126 @error('articul_area')
127 <div class="alert alert-danger">{{ $message }}</div> 127 <div class="alert alert-danger">{{ $message }}</div>
128 @enderror 128 @enderror
129 <input type="text" class="form-control_ txt" name="articul_area" placeholder="Артикул помещения" 129 <input type="text" class="form-control_ txt" name="articul_area" placeholder="Артикул помещения"
130 required maxlength="100" style="width: 80%" value="{{ old('articul_area') ?? $house->articul_area ?? '' }}"><br><br> 130 required maxlength="100" style="width: 80%" value="{{ old('articul_area') ?? $house->articul_area ?? '' }}"><br><br>
131 131
132 <label for="format_house">Формат помещения: <span class="req">*</span></label><br> 132 <label for="format_house">Формат помещения: <span class="req">*</span></label><br>
133 @error('format_house') 133 @error('format_house')
134 <div class="alert alert-danger">{{ $message }}</div> 134 <div class="alert alert-danger">{{ $message }}</div>
135 @enderror 135 @enderror
136 <select name="format_house" id="format_house" class="form-control"> 136 <select name="format_house" id="format_house" class="form-control">
137 <option value="Аренда" 137 <option value="Аренда"
138 @isset($house) 138 @isset($house)
139 @if($house->format_house == 'Аренда') 139 @if($house->format_house == 'Аренда')
140 selected 140 selected
141 @endif 141 @endif
142 @endisset 142 @endisset
143 >Аренда</option> 143 >Аренда</option>
144 <option value="Продажа" 144 <option value="Продажа"
145 @isset($house) 145 @isset($house)
146 @if($house->format_house == 'Продажа') 146 @if($house->format_house == 'Продажа')
147 selected 147 selected
148 @endif 148 @endif
149 @endisset 149 @endisset
150 >Продажа</option> 150 >Продажа</option>
151 <option value="Бизнес" 151 <option value="Бизнес"
152 @isset($house) 152 @isset($house)
153 @if($house->format_house == 'Бизнес') 153 @if($house->format_house == 'Бизнес')
154 selected 154 selected
155 @endif 155 @endif
156 @endisset 156 @endisset
157 >Бизнес</option> 157 >Бизнес</option>
158 <option value="Арендованные" 158 <option value="Арендованные"
159 @isset($house) 159 @isset($house)
160 @if($house->format_house == 'Арендованные') 160 @if($house->format_house == 'Арендованные')
161 selected 161 selected
162 @endif 162 @endif
163 @endisset 163 @endisset
164 >Арендованные</option> 164 >Арендованные</option>
165 </select><br><br> 165 </select><br><br>
166 166
167 <label for="area">Площадь помещения: <span class="req">*</span></label><br> 167 <label for="area">Площадь помещения: <span class="req">*</span></label><br>
168 @error('area') 168 @error('area')
169 <div class="alert alert-danger">{{ $message }}</div> 169 <div class="alert alert-danger">{{ $message }}</div>
170 @enderror 170 @enderror
171 <input type="text" class="form-control_ txt" name="area" placeholder="Площадь помещения" 171 <input type="text" class="form-control_ txt" name="area" placeholder="Площадь помещения"
172 required maxlength="100" style="width: 80%" value="{{ old('area') ?? $house->area ?? '' }}"><br><br> 172 required maxlength="100" style="width: 80%" value="{{ old('area') ?? $house->area ?? '' }}"><br><br>
173 173
174 <label for="floor">Этаж: </label><br> 174 <label for="floor">Этаж: </label><br>
175 @error('floor') 175 @error('floor')
176 <div class="alert alert-danger">{{ $message }}</div> 176 <div class="alert alert-danger">{{ $message }}</div>
177 @enderror 177 @enderror
178 <input type="text" class="form-control_ txt" name="floor" placeholder="Этаж" 178 <input type="text" class="form-control_ txt" name="floor" placeholder="Этаж"
179 required maxlength="100" style="width: 80%" value="{{ old('floor') ?? $house->floor ?? '' }}"><br><br> 179 required maxlength="100" style="width: 80%" value="{{ old('floor') ?? $house->floor ?? '' }}"><br><br>
180 180
181 <label for="floor_bild">Этажность здания: </label><br> 181 <label for="floor_bild">Этажность здания: </label><br>
182 @error('floor_bild') 182 @error('floor_bild')
183 <div class="alert alert-danger">{{ $message }}</div> 183 <div class="alert alert-danger">{{ $message }}</div>
184 @enderror 184 @enderror
185 <input type="text" class="form-control_ txt" name="floor_bild" placeholder="Этажность здания" 185 <input type="text" class="form-control_ txt" name="floor_bild" placeholder="Этажность здания"
186 required maxlength="100" style="width: 80%" value="{{ old('floor_bild') ?? $house->floor_bild ?? '' }}"><br><br> 186 required maxlength="100" style="width: 80%" value="{{ old('floor_bild') ?? $house->floor_bild ?? '' }}"><br><br>
187 187
188 <label for="renter">Арендатор (поле только для аренды и арендованные): </label><br> 188 <label for="renter">Арендатор (поле только для аренды и арендованные): </label><br>
189 @error('renter') 189 @error('renter')
190 <div class="alert alert-danger">{{ $message }}</div> 190 <div class="alert alert-danger">{{ $message }}</div>
191 @enderror 191 @enderror
192 <input type="text" class="form-control_ txt" name="renter" placeholder="Арендатор" 192 <input type="text" class="form-control_ txt" name="renter" placeholder="Арендатор"
193 required maxlength="100" style="width: 80%" value="{{ old('renter') ?? $house->renter ?? '' }}"><br><br> 193 required maxlength="100" style="width: 80%" value="{{ old('renter') ?? $house->renter ?? '' }}"><br><br>
194 194
195 <label for="price">Цена: </label><br> 195 <label for="price">Цена: </label><br>
196 @error('price') 196 @error('price')
197 <div class="alert alert-danger">{{ $message }}</div> 197 <div class="alert alert-danger">{{ $message }}</div>
198 @enderror 198 @enderror
199 <input type="text" class="form-control_ txt" name="price" placeholder="Цена" 199 <input type="text" class="form-control_ txt" name="price" placeholder="Цена"
200 required maxlength="100" style="width: 80%" value="{{ old('price') ?? $house->price ?? '' }}"><br><br> 200 required maxlength="100" style="width: 80%" value="{{ old('price') ?? $house->price ?? '' }}"><br><br>
201 201
202 <label for="price_m2">Цена за метр2: </label><br> 202 <label for="price_m2">Цена за метр2: </label><br>
203 @error('price_m2') 203 @error('price_m2')
204 <div class="alert alert-danger">{{ $message }}</div> 204 <div class="alert alert-danger">{{ $message }}</div>
205 @enderror 205 @enderror
206 <input type="text" class="form-control_ txt" name="price_m2" placeholder="Цена за метр2" 206 <input type="text" class="form-control_ txt" name="price_m2" placeholder="Цена за метр2"
207 required maxlength="100" style="width: 80%" value="{{ old('price_m2') ?? $house->price_m2 ?? '' }}"><br><br> 207 required maxlength="100" style="width: 80%" value="{{ old('price_m2') ?? $house->price_m2 ?? '' }}"><br><br>
208 208
209 <label for="rent_in_year">Аренда в год (поле только для аренды): </label><br> 209 <label for="rent_in_year">Аренда в год (поле только для аренды): </label><br>
210 @error('rent_in_year') 210 @error('rent_in_year')
211 <div class="alert alert-danger">{{ $message }}</div> 211 <div class="alert alert-danger">{{ $message }}</div>
212 @enderror 212 @enderror
213 <input type="text" class="form-control_ txt" name="rent_in_year" placeholder="Аренда в год" 213 <input type="text" class="form-control_ txt" name="rent_in_year" placeholder="Аренда в год"
214 required maxlength="100" style="width: 80%" value="{{ old('rent_in_year') ?? $house->rent_in_year ?? '' }}"><br><br> 214 required maxlength="100" style="width: 80%" value="{{ old('rent_in_year') ?? $house->rent_in_year ?? '' }}"><br><br>
215 215
216 <label for="description_house">Описание офиса: </label><br> 216 <label for="description_house">Описание офиса: </label><br>
217 @error('description_house') 217 @error('description_house')
218 <div class="alert alert-danger">{{ $message }}</div> 218 <div class="alert alert-danger">{{ $message }}</div>
219 @enderror 219 @enderror
220 <textarea class="form-control_ txtarea ckeditor" name="description_house" placeholder="Описание офиса" required 220 <textarea class="form-control_ txtarea ckeditor" name="description_house" placeholder="Описание офиса" required
221 rows="10" style="width: 80%">{{ old('description_house') ?? $area->description_house ?? '' }}</textarea><br><br> 221 rows="10" style="width: 80%">{{ old('description_house') ?? $area->description_house ?? '' }}</textarea><br><br>
222 222
223 <label for="object_plan">План-объекта (картинка):</label><br> 223 <label for="object_plan">План-объекта (картинка):</label><br>
224 <input type="file" class="form-control-file txt" name="object_plan" id="object_plan" accept="image/png, image/jpeg"> 224 <input type="file" class="form-control-file txt" name="object_plan" id="object_plan" accept="image/png, image/jpeg">
225 225
226 @isset($house->object_plan) 226 @isset($house->object_plan)
227 <div class="form-group form-check"> 227 <div class="form-group form-check">
228 <img src="<?=asset(Storage::url($house->object_plan))?>" width="100px"/> 228 <img src="<?=asset(Storage::url($house->object_plan))?>" width="100px"/>
229 </div> 229 </div>
230 @endisset 230 @endisset
231 <br><br> 231 <br><br>
232 232
233 <label for="floor_plan">План-этажа (картинка):</label><br> 233 <label for="floor_plan">План-этажа (картинка):</label><br>
234 <input type="file" class="form-control-file txt" name="floor_plan" id="floor_plan" accept="image/png, image/jpeg"> 234 <input type="file" class="form-control-file txt" name="floor_plan" id="floor_plan" accept="image/png, image/jpeg">
235 235
236 @isset($house->floor_plan) 236 @isset($house->floor_plan)
237 <div class="form-group form-check"> 237 <div class="form-group form-check">
238 <img src="<?=asset(Storage::url($house->floor_plan))?>" width="100px"/> 238 <img src="<?=asset(Storage::url($house->floor_plan))?>" width="100px"/>
239 </div> 239 </div>
240 @endisset 240 @endisset
241 <br><br> 241 <br><br>
242 242
243 <label for="present">Презентация:</label><br> 243 <label for="present">Презентация:</label><br>
244 <input type="file" class="form-control-file txt" name="present" id="present"> 244 <input type="file" class="form-control-file txt" name="present" id="present">
245 245
246 @isset($house->present) 246 @isset($house->present)
247 <div class="form-group form-check"> 247 <div class="form-group form-check">
248 <a href="<?=asset(Storage::url($house->floor_plan))?>">Презентация</a> 248 <a href="<?=asset(Storage::url($house->floor_plan))?>">Презентация</a>
249 </div> 249 </div>
250 @endisset 250 @endisset
251 <br><br> 251 <br><br>
252 252
253 <label for="unloading_area">Зона разгрузки: </label><br> 253 <label for="unloading_area">Зона разгрузки: </label><br>
254 @error('unloading_area') 254 @error('unloading_area')
255 <div class="alert alert-danger">{{ $message }}</div> 255 <div class="alert alert-danger">{{ $message }}</div>
256 @enderror 256 @enderror
257 <select name="unloading_area" id="unloading_area" class="form-control"> 257 <select name="unloading_area" id="unloading_area" class="form-control">
258 <option value="1" 258 <option value="1"
259 @isset($house) 259 @isset($house)
260 @if($house->unloading_area == '1') 260 @if($house->unloading_area == '1')
261 selected 261 selected
262 @endif 262 @endif
263 @endisset 263 @endisset
264 >Есть</option> 264 >Есть</option>
265 <option value="0" 265 <option value="0"
266 @isset($house) 266 @isset($house)
267 @if($house->unloading_area == '0') 267 @if($house->unloading_area == '0')
268 selected 268 selected
269 @endif 269 @endif
270 @endisset 270 @endisset
271 >Нет</option> 271 >Нет</option>
272 </select><br><br> 272 </select><br><br>
273 273
274 <label for="electric_power">Электрическая мощность: </label><br> 274 <label for="electric_power">Электрическая мощность: </label><br>
275 @error('electric_power') 275 @error('electric_power')
276 <div class="alert alert-danger">{{ $message }}</div> 276 <div class="alert alert-danger">{{ $message }}</div>
277 @enderror 277 @enderror
278 <input type="text" class="form-control_ txt" name="electric_power" placeholder="Электрическая мощность" 278 <input type="text" class="form-control_ txt" name="electric_power" placeholder="Электрическая мощность"
279 required maxlength="100" style="width: 80%" value="{{ old('electric_power') ?? $house->electric_power ?? '' }}"><br><br> 279 required maxlength="100" style="width: 80%" value="{{ old('electric_power') ?? $house->electric_power ?? '' }}"><br><br>
280 280
281 <label for="travel_card">Проездное место: </label><br> 281 <label for="travel_card">Проездное место: </label><br>
282 @error('travel_card') 282 @error('travel_card')
283 <div class="alert alert-danger">{{ $message }}</div> 283 <div class="alert alert-danger">{{ $message }}</div>
284 @enderror 284 @enderror
285 <select name="travel_card" id="travel_card" class="form-control"> 285 <select name="travel_card" id="travel_card" class="form-control">
286 <option value="1" 286 <option value="1"
287 @isset($house) 287 @isset($house)
288 @if($house->travel_card == '1') 288 @if($house->travel_card == '1')
289 selected 289 selected
290 @endif 290 @endif
291 @endisset 291 @endisset
292 >Да</option> 292 >Да</option>
293 <option value="0" 293 <option value="0"
294 @isset($house) 294 @isset($house)
295 @if($house->travel_card == '0') 295 @if($house->travel_card == '0')
296 selected 296 selected
297 @endif 297 @endif
298 @endisset 298 @endisset
299 >Нет</option> 299 >Нет</option>
300 </select><br><br> 300 </select><br><br>
301 301
302 <label for="passing_place">Проходное место: </label><br> 302 <label for="passing_place">Проходное место: </label><br>
303 @error('passing_place') 303 @error('passing_place')
304 <div class="alert alert-danger">{{ $message }}</div> 304 <div class="alert alert-danger">{{ $message }}</div>
305 @enderror 305 @enderror
306 <select name="passing_place" id="passing_place" class="form-control"> 306 <select name="passing_place" id="passing_place" class="form-control">
307 <option value="1" 307 <option value="1"
308 @isset($house) 308 @isset($house)
309 @if($house->passing_place == '1') 309 @if($house->passing_place == '1')
310 selected 310 selected
311 @endif 311 @endif
312 @endisset 312 @endisset
313 >Да</option> 313 >Да</option>
314 <option value="0" 314 <option value="0"
315 @isset($house) 315 @isset($house)
316 @if($house->passing_place == '0') 316 @if($house->passing_place == '0')
317 selected 317 selected
318 @endif 318 @endif
319 @endisset 319 @endisset
320 >Нет</option> 320 >Нет</option>
321 </select><br><br> 321 </select><br><br>
322 322
323 <label for="separate_input">Отдельный вход: </label><br> 323 <label for="separate_input">Отдельный вход: </label><br>
324 @error('separate_input') 324 @error('separate_input')
325 <div class="alert alert-danger">{{ $message }}</div> 325 <div class="alert alert-danger">{{ $message }}</div>
326 @enderror 326 @enderror
327 <select name="separate_input" id="separate_input" class="form-control"> 327 <select name="separate_input" id="separate_input" class="form-control">
328 <option value="1" 328 <option value="1"
329 @isset($house) 329 @isset($house)
330 @if($house->separate_input == '1') 330 @if($house->separate_input == '1')
331 selected 331 selected
332 @endif 332 @endif
333 @endisset 333 @endisset
334 >Да</option> 334 >Да</option>
335 <option value="0" 335 <option value="0"
336 @isset($house) 336 @isset($house)
337 @if($house->separate_input == '0') 337 @if($house->separate_input == '0')
338 selected 338 selected
339 @endif 339 @endif
340 @endisset 340 @endisset
341 >Нет</option> 341 >Нет</option>
342 </select><br><br> 342 </select><br><br>
343 343
344 <label for="shop_windows">Витрины: </label><br> 344 <label for="shop_windows">Витрины: </label><br>
345 @error('shop_windows') 345 @error('shop_windows')
346 <div class="alert alert-danger">{{ $message }}</div> 346 <div class="alert alert-danger">{{ $message }}</div>
347 @enderror 347 @enderror
348 <select name="shop_windows" id="shop_windows" class="form-control"> 348 <select name="shop_windows" id="shop_windows" class="form-control">
349 <option value="1" 349 <option value="1"
350 @isset($house) 350 @isset($house)
351 @if($house->shop_windows == '1') 351 @if($house->shop_windows == '1')
352 selected 352 selected
353 @endif 353 @endif
354 @endisset 354 @endisset
355 >Да</option> 355 >Да</option>
356 <option value="0" 356 <option value="0"
357 @isset($house) 357 @isset($house)
358 @if($house->shop_windows == '0') 358 @if($house->shop_windows == '0')
359 selected 359 selected
360 @endif 360 @endif
361 @endisset 361 @endisset
362 >Нет</option> 362 >Нет</option>
363 </select><br><br> 363 </select><br><br>
364 364
365 <label for="place_advertising">Место для рекламы: </label><br> 365 <label for="place_advertising">Место для рекламы: </label><br>
366 @error('place_advertising') 366 @error('place_advertising')
367 <div class="alert alert-danger">{{ $message }}</div> 367 <div class="alert alert-danger">{{ $message }}</div>
368 @enderror 368 @enderror
369 <select name="place_advertising" id="place_advertising" class="form-control"> 369 <select name="place_advertising" id="place_advertising" class="form-control">
370 <option value="1" 370 <option value="1"
371 @isset($house) 371 @isset($house)
372 @if($house->place_advertising == '1') 372 @if($house->place_advertising == '1')
373 selected 373 selected
374 @endif 374 @endif
375 @endisset 375 @endisset
376 >Да</option> 376 >Да</option>
377 <option value="0" 377 <option value="0"
378 @isset($house) 378 @isset($house)
379 @if($house->place_advertising == '0') 379 @if($house->place_advertising == '0')
380 selected 380 selected
381 @endif 381 @endif
382 @endisset 382 @endisset
383 >Нет</option> 383 >Нет</option>
384 </select><br><br> 384 </select><br><br>
385 385
386 <label for="windows">Окна: </label><br> 386 <label for="windows">Окна: </label><br>
387 @error('windows') 387 @error('windows')
388 <div class="alert alert-danger">{{ $message }}</div> 388 <div class="alert alert-danger">{{ $message }}</div>
389 @enderror 389 @enderror
390 <input type="text" class="form-control_ txt" name="windows" placeholder="Окна" 390 <input type="text" class="form-control_ txt" name="windows" placeholder="Окна"
391 required maxlength="100" style="width: 80%" value="{{ old('windows') ?? $house->windows ?? '' }}"><br><br> 391 required maxlength="100" style="width: 80%" value="{{ old('windows') ?? $house->windows ?? '' }}"><br><br>
392 392
393 <label for="hood">Вытяжка: </label><br> 393 <label for="hood">Вытяжка: </label><br>
394 @error('hood') 394 @error('hood')
395 <div class="alert alert-danger">{{ $message }}</div> 395 <div class="alert alert-danger">{{ $message }}</div>
396 @enderror 396 @enderror
397 <select name="hood" id="hood" class="form-control"> 397 <select name="hood" id="hood" class="form-control">
398 <option value="1" 398 <option value="1"
399 @isset($house) 399 @isset($house)
400 @if($house->hood == '1') 400 @if($house->hood == '1')
401 selected 401 selected
402 @endif 402 @endif
403 @endisset 403 @endisset
404 >Да</option> 404 >Да</option>
405 <option value="0" 405 <option value="0"
406 @isset($house) 406 @isset($house)
407 @if($house->hood == '0') 407 @if($house->hood == '0')
408 selected 408 selected
409 @endif 409 @endif
410 @endisset 410 @endisset
411 >Нет</option> 411 >Нет</option>
412 </select><br><br> 412 </select><br><br>
413 413
414 <label for="central_heating">Центральное отопление: </label><br> 414 <label for="central_heating">Центральное отопление: </label><br>
415 @error('central_heating') 415 @error('central_heating')
416 <div class="alert alert-danger">{{ $message }}</div> 416 <div class="alert alert-danger">{{ $message }}</div>
417 @enderror 417 @enderror
418 <select name="central_heating" id="central_heating" class="form-control"> 418 <select name="central_heating" id="central_heating" class="form-control">
419 <option value="1" 419 <option value="1"
420 @isset($house) 420 @isset($house)
421 @if($house->central_heating == '1') 421 @if($house->central_heating == '1')
422 selected 422 selected
423 @endif 423 @endif
424 @endisset 424 @endisset
425 >Да</option> 425 >Да</option>
426 <option value="0" 426 <option value="0"
427 @isset($house) 427 @isset($house)
428 @if($house->central_heating == '0') 428 @if($house->central_heating == '0')
429 selected 429 selected
430 @endif 430 @endif
431 @endisset 431 @endisset
432 >Нет</option> 432 >Нет</option>
433 </select><br><br> 433 </select><br><br>
434 434
435 <label for="opening_hours">Возможные часы работы: </label><br> 435 <label for="opening_hours">Возможные часы работы: </label><br>
436 @error('opening_hours') 436 @error('opening_hours')
437 <div class="alert alert-danger">{{ $message }}</div> 437 <div class="alert alert-danger">{{ $message }}</div>
438 @enderror 438 @enderror
439 <input type="text" class="form-control_ txt" name="opening_hours" placeholder="Возможные часы работы" 439 <input type="text" class="form-control_ txt" name="opening_hours" placeholder="Возможные часы работы"
440 required maxlength="100" style="width: 80%" value="{{ old('opening_hours') ?? $house->opening_hours ?? '' }}"><br><br> 440 required maxlength="100" style="width: 80%" value="{{ old('opening_hours') ?? $house->opening_hours ?? '' }}"><br><br>
441 441
442 <label for="finishing">Отделка: </label><br> 442 <label for="finishing">Отделка: </label><br>
443 @error('finishing') 443 @error('finishing')
444 <div class="alert alert-danger">{{ $message }}</div> 444 <div class="alert alert-danger">{{ $message }}</div>
445 @enderror 445 @enderror
446 <select name="finishing" id="finishing" class="form-control"> 446 <select name="finishing" id="finishing" class="form-control">
447 <option value="1" 447 <option value="1"
448 @isset($house) 448 @isset($house)
449 @if($house->finishing == '1') 449 @if($house->finishing == '1')
450 selected 450 selected
451 @endif 451 @endif
452 @endisset 452 @endisset
453 >Да</option> 453 >Да</option>
454 <option value="0" 454 <option value="0"
455 @isset($house) 455 @isset($house)
456 @if($house->finishing == '0') 456 @if($house->finishing == '0')
457 selected 457 selected
458 @endif 458 @endif
459 @endisset 459 @endisset
460 >Нет</option> 460 >Нет</option>
461 </select><br><br> 461 </select><br><br>
462 462
463 <label for="parking">Парковка (кол-во мест): </label><br> 463 <label for="parking">Парковка (кол-во мест): </label><br>
464 @error('parking') 464 @error('parking')
465 <div class="alert alert-danger">{{ $message }}</div> 465 <div class="alert alert-danger">{{ $message }}</div>
466 @enderror 466 @enderror
467 <input type="text" class="form-control_ txt" name="parking" placeholder="Парковка" 467 <input type="text" class="form-control_ txt" name="parking" placeholder="Парковка"
468 required maxlength="100" style="width: 80%" value="{{ old('parking') ?? $house->parking ?? '' }}"><br><br> 468 required maxlength="100" style="width: 80%" value="{{ old('parking') ?? $house->parking ?? '' }}"><br><br>
469 469
470 <label for="scheme_deal">Схема сделки: </label><br> 470 <label for="scheme_deal">Схема сделки: </label><br>
471 @error('scheme_deal') 471 @error('scheme_deal')
472 <div class="alert alert-danger">{{ $message }}</div> 472 <div class="alert alert-danger">{{ $message }}</div>
473 @enderror 473 @enderror
474 <input type="text" class="form-control_ txt" name="scheme_deal" placeholder="Схема сделки" 474 <input type="text" class="form-control_ txt" name="scheme_deal" placeholder="Схема сделки"
475 required maxlength="100" style="width: 80%" value="{{ old('scheme_deal') ?? $house->scheme_deal ?? '' }}"><br><br> 475 required maxlength="100" style="width: 80%" value="{{ old('scheme_deal') ?? $house->scheme_deal ?? '' }}"><br><br>
476 476
477 <label for="map_coord">Координаты дома: </label><br> 477 <label for="coord_x">Координаты дома X: </label><br>
478 <input type="text" class="form-control_ txt" name="map_coord" placeholder="Координаты дома" 478 <input type="text" class="form-control_ txt" name="coord_x" placeholder="Координаты дома X"
479 required maxlength="100" value="{{ old('map_coord') ?? $house->map_coord ?? '' }}"><br><br> 479 required maxlength="100" value="{{ old('coord_x') ?? $house->coord_x ?? '0' }}"><br><br>
480
481 <label for="coord_y">Координаты дома Y: </label><br>
482 <input type="text" class="form-control_ txt" name="coord_y" placeholder="Координаты дома Y"
483 required maxlength="100" value="{{ old('coord_y') ?? $house->coord_y ?? '0' }}"><br><br>
480 484
481 <label for="sos_obj">Состояние объекта: </label><br> 485 <label for="sos_obj">Состояние объекта: </label><br>
482 @error('sos_obj') 486 @error('sos_obj')
483 <div class="alert alert-danger">{{ $message }}</div> 487 <div class="alert alert-danger">{{ $message }}</div>
484 @enderror 488 @enderror
485 <select name="sos_obj" id="sos_obj" class="form-control"> 489 <select name="sos_obj" id="sos_obj" class="form-control">
486 <option value="Рабочее" 490 <option value="Рабочее"
487 @isset($house) 491 @isset($house)
488 @if($house->sos_obj == 'Рабочее') 492 @if($house->sos_obj == 'Рабочее')
489 selected 493 selected
490 @endif 494 @endif
491 @endisset 495 @endisset
492 >Рабочее</option> 496 >Рабочее</option>
493 <option value="Не рабочее" 497 <option value="Не рабочее"
494 @isset($house) 498 @isset($house)
495 @if($house->sos_obj == 'Не рабочее') 499 @if($house->sos_obj == 'Не рабочее')
496 selected 500 selected
497 @endif 501 @endif
498 @endisset 502 @endisset
499 >Не рабочее</option> 503 >Не рабочее</option>
500 </select><br><br> 504 </select><br><br>
501 505
502 <label for="type_plan">Тип планировки: </label><br> 506 <label for="type_plan">Тип планировки: </label><br>
503 @error('type_plan') 507 @error('type_plan')
504 <div class="alert alert-danger">{{ $message }}</div> 508 <div class="alert alert-danger">{{ $message }}</div>
505 @enderror 509 @enderror
506 <select name="type_plan" id="type_plan" class="form-control"> 510 <select name="type_plan" id="type_plan" class="form-control">
507 <option value="Открытая" 511 <option value="Открытая"
508 @isset($house) 512 @isset($house)
509 @if($house->type_plan == 'Открытая') 513 @if($house->type_plan == 'Открытая')
510 selected 514 selected
511 @endif 515 @endif
512 @endisset 516 @endisset
513 >Открытая</option> 517 >Открытая</option>
514 <option value="Закрытая" 518 <option value="Закрытая"
515 @isset($house) 519 @isset($house)
516 @if($house->type_plan == 'Закрытая') 520 @if($house->type_plan == 'Закрытая')
517 selected 521 selected
518 @endif 522 @endif
519 @endisset 523 @endisset
520 >Закрытая</option> 524 >Закрытая</option>
521 </select><br><br> 525 </select><br><br>
522 526
523 <label for="description_2">Описание офиса дополнительно: </label><br> 527 <label for="description_2">Описание офиса дополнительно: </label><br>
524 @error('description_2') 528 @error('description_2')
525 <div class="alert alert-danger">{{ $message }}</div> 529 <div class="alert alert-danger">{{ $message }}</div>
526 @enderror 530 @enderror
527 <textarea class="form-control_ txtarea ckeditor" name="description_2" placeholder="Описание офиса дополнительно" required 531 <textarea class="form-control_ txtarea ckeditor" name="description_2" placeholder="Описание офиса дополнительно" required
528 rows="10" style="width: 80%">{{ old('description_2') ?? $house->description_2 ?? '' }}</textarea><br><br> 532 rows="10" style="width: 80%">{{ old('description_2') ?? $house->description_2 ?? '' }}</textarea><br><br>
529 533
530 <br> 534 <br>
531 <button type="submit" class="btn hero-search__btn btn--main">Сохранить</button> 535 <button type="submit" class="btn hero-search__btn btn--main">Сохранить</button>
532 536
533 537
534 538
resources/views/index.blade.php
1 @extends('layout.site', ['title' => 'Главная страница RentTorg']) 1 @extends('layout.site', ['title' => 'Главная страница RentTorg'])
2 2
3 @section('filter') 3 @section('filter')
4 @include('part.filter.main') 4 @include('part.filter.main')
5 @endsection 5 @endsection
6 6
7 @section('content') 7 @section('content')
8 8
9 <!-- Каталог --> 9 <!-- Каталог -->
10 <section class="slider" id="slider"> 10 <section class="slider" id="slider">
11 <div class="container"> 11 <div class="container">
12 <div class="slider__wrap"> 12 <div class="slider__wrap">
13 <div class="slider__top"> 13 <div class="slider__top">
14 <h2 class="slider__title title">Лучшие предложения</h2> 14 <h2 class="slider__title title">Лучшие предложения</h2>
15 <div class="slider__control"> 15 <div class="slider__control">
16 <div class="swiper-button-prev"> 16 <div class="swiper-button-prev">
17 <svg width="10" height="17"> 17 <svg width="10" height="17">
18 <use xlink:href="images/sprite.svg#slider-arrow"></use> 18 <use xlink:href="images/sprite.svg#slider-arrow"></use>
19 </svg> 19 </svg>
20 </div> 20 </div>
21 <div class="swiper-button-next"> 21 <div class="swiper-button-next">
22 <svg width="10" height="17"> 22 <svg width="10" height="17">
23 <use xlink:href="images/sprite.svg#slider-arrow"></use> 23 <use xlink:href="images/sprite.svg#slider-arrow"></use>
24 </svg> 24 </svg>
25 </div> 25 </div>
26 </div> 26 </div>
27 </div> 27 </div>
28 <div class="slider__swiper swiper"> 28 <div class="slider__swiper swiper">
29 <div class="swiper-wrapper"> 29 <div class="swiper-wrapper">
30 30
31 @if ($houses->count()) 31 @if ($houses->count())
32 @foreach ($houses as $house) 32 @foreach ($houses as $house)
33 @include('catalogs.elemhouse', ['house' => $house]) 33 @include('catalogs.elemhouse', ['house' => $house])
34 @endforeach 34 @endforeach
35 @endif 35 @endif
36 <!--<div class="swiper-slide"> 36 <!--<div class="swiper-slide">
37 <div class="card"> 37 <div class="card">
38 <div class="card__top"><img src="images/card/card-img-1.jpg" alt="Фото недвижимости" loading="lazy"> 38 <div class="card__top"><img src="images/card/card-img-1.jpg" alt="Фото недвижимости" loading="lazy">
39 <h3 class="card__title">Салон красоты</h3> 39 <h3 class="card__title">Салон красоты</h3>
40 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 40 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
41 <svg width="18" height="18"> 41 <svg width="18" height="18">
42 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 42 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
43 </svg> 43 </svg>
44 <svg width="18" height="18"> 44 <svg width="18" height="18">
45 <use xlink:href="images/sprite.svg#card-favorites"></use> 45 <use xlink:href="images/sprite.svg#card-favorites"></use>
46 </svg></span><a class="card__label card__label-messenger" href="#"> 46 </svg></span><a class="card__label card__label-messenger" href="#">
47 <svg width="25" height="25"> 47 <svg width="25" height="25">
48 <use xlink:href="images/sprite.svg#card-messenger"></use> 48 <use xlink:href="images/sprite.svg#card-messenger"></use>
49 </svg></a></div> 49 </svg></a></div>
50 </div> 50 </div>
51 <div class="card__cnt"> 51 <div class="card__cnt">
52 <div class="card__info"> 52 <div class="card__info">
53 <address class="card__line card__line-complex">ЖК “Новинки 1”</address> 53 <address class="card__line card__line-complex">ЖК “Новинки 1”</address>
54 <address class="card__line">Фрунзенская (10 мин., пешком)<span style="background-color: #FFC955;"></span></address> 54 <address class="card__line">Фрунзенская (10 мин., пешком)<span style="background-color: #FFC955;"></span></address>
55 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address> 55 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address>
56 <div class="card__line">Площадь: <b>556 м2</b></div> 56 <div class="card__line">Площадь: <b>556 м2</b></div>
57 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div> 57 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div>
58 </div> 58 </div>
59 <div class="card__price"><span>1 000 000 ₽</span> 59 <div class="card__price"><span>1 000 000 ₽</span>
60 </div><a class="card__btn btn btn--bordered" href="#">Подробнее</a> 60 </div><a class="card__btn btn btn--bordered" href="#">Подробнее</a>
61 </div> 61 </div>
62 </div> 62 </div>
63 </div> 63 </div>
64 <div class="swiper-slide"> 64 <div class="swiper-slide">
65 <div class="card"> 65 <div class="card">
66 <div class="card__top"><img src="images/card/card-img-2.jpg" alt="Фото недвижимости" loading="lazy"> 66 <div class="card__top"><img src="images/card/card-img-2.jpg" alt="Фото недвижимости" loading="lazy">
67 <h3 class="card__title">Барбер-шоп</h3> 67 <h3 class="card__title">Барбер-шоп</h3>
68 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 68 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
69 <svg width="18" height="18"> 69 <svg width="18" height="18">
70 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 70 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
71 </svg> 71 </svg>
72 <svg width="18" height="18"> 72 <svg width="18" height="18">
73 <use xlink:href="images/sprite.svg#card-favorites"></use> 73 <use xlink:href="images/sprite.svg#card-favorites"></use>
74 </svg></span><a class="card__label card__label-messenger" href="#"> 74 </svg></span><a class="card__label card__label-messenger" href="#">
75 <svg width="25" height="25"> 75 <svg width="25" height="25">
76 <use xlink:href="images/sprite.svg#card-messenger"></use> 76 <use xlink:href="images/sprite.svg#card-messenger"></use>
77 </svg></a></div> 77 </svg></a></div>
78 </div> 78 </div>
79 <div class="card__cnt"> 79 <div class="card__cnt">
80 <div class="card__info"> 80 <div class="card__info">
81 <address class="card__line card__line-complex">ЖК “Новоарбатский”</address> 81 <address class="card__line card__line-complex">ЖК “Новоарбатский”</address>
82 <address class="card__line">Арбатская (8 мин., пешком)<span style="background-color: #0000A0;"></span></address> 82 <address class="card__line">Арбатская (8 мин., пешком)<span style="background-color: #0000A0;"></span></address>
83 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address> 83 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address>
84 <div class="card__line">Площадь: <b>6 556 м2</b></div> 84 <div class="card__line">Площадь: <b>6 556 м2</b></div>
85 <div class="card__line">Цена за м<sup>2</sup>: <b>5 225 256 ₽</b></div> 85 <div class="card__line">Цена за м<sup>2</sup>: <b>5 225 256 ₽</b></div>
86 </div> 86 </div>
87 <div class="card__price"><span>15 520 900 ₽</span><span>в месяц</span> 87 <div class="card__price"><span>15 520 900 ₽</span><span>в месяц</span>
88 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a> 88 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a>
89 </div> 89 </div>
90 </div> 90 </div>
91 </div> 91 </div>
92 <div class="swiper-slide"> 92 <div class="swiper-slide">
93 <div class="card"> 93 <div class="card">
94 <div class="card__top"><img src="images/card/card-img-3.jpg" alt="Фото недвижимости" loading="lazy"> 94 <div class="card__top"><img src="images/card/card-img-3.jpg" alt="Фото недвижимости" loading="lazy">
95 <h3 class="card__title">Аптека</h3> 95 <h3 class="card__title">Аптека</h3>
96 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 96 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
97 <svg width="18" height="18"> 97 <svg width="18" height="18">
98 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 98 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
99 </svg> 99 </svg>
100 <svg width="18" height="18"> 100 <svg width="18" height="18">
101 <use xlink:href="images/sprite.svg#card-favorites"></use> 101 <use xlink:href="images/sprite.svg#card-favorites"></use>
102 </svg></span><a class="card__label card__label-messenger" href="#"> 102 </svg></span><a class="card__label card__label-messenger" href="#">
103 <svg width="25" height="25"> 103 <svg width="25" height="25">
104 <use xlink:href="images/sprite.svg#card-messenger"></use> 104 <use xlink:href="images/sprite.svg#card-messenger"></use>
105 </svg></a></div> 105 </svg></a></div>
106 </div> 106 </div>
107 <div class="card__cnt"> 107 <div class="card__cnt">
108 <div class="card__info"> 108 <div class="card__info">
109 <address class="card__line card__line-complex">ЖК “Садовые кварталы”</address> 109 <address class="card__line card__line-complex">ЖК “Садовые кварталы”</address>
110 <address class="card__line">Коломенская (2 мин., пешком)<span style="background-color: #029B55;"></span></address> 110 <address class="card__line">Коломенская (2 мин., пешком)<span style="background-color: #029B55;"></span></address>
111 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address> 111 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address>
112 <div class="card__line">Площадь: <b>8 626 м2</b></div> 112 <div class="card__line">Площадь: <b>8 626 м2</b></div>
113 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div> 113 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div>
114 </div> 114 </div>
115 <div class="card__price"><span>5 280 000 ₽</span> 115 <div class="card__price"><span>5 280 000 ₽</span>
116 </div><a class="card__btn btn btn--bordered" href="#">Подробнее о продаже</a> 116 </div><a class="card__btn btn btn--bordered" href="#">Подробнее о продаже</a>
117 </div> 117 </div>
118 </div> 118 </div>
119 </div> 119 </div>
120 <div class="swiper-slide"> 120 <div class="swiper-slide">
121 <div class="card"> 121 <div class="card">
122 <div class="card__top"><img src="images/card/card-img-4.jpg" alt="Фото недвижимости" loading="lazy"> 122 <div class="card__top"><img src="images/card/card-img-4.jpg" alt="Фото недвижимости" loading="lazy">
123 <h3 class="card__title">Витрина</h3> 123 <h3 class="card__title">Витрина</h3>
124 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 124 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
125 <svg width="18" height="18"> 125 <svg width="18" height="18">
126 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 126 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
127 </svg> 127 </svg>
128 <svg width="18" height="18"> 128 <svg width="18" height="18">
129 <use xlink:href="images/sprite.svg#card-favorites"></use> 129 <use xlink:href="images/sprite.svg#card-favorites"></use>
130 </svg></span><a class="card__label card__label-messenger" href="#"> 130 </svg></span><a class="card__label card__label-messenger" href="#">
131 <svg width="25" height="25"> 131 <svg width="25" height="25">
132 <use xlink:href="images/sprite.svg#card-messenger"></use> 132 <use xlink:href="images/sprite.svg#card-messenger"></use>
133 </svg></a></div> 133 </svg></a></div>
134 </div> 134 </div>
135 <div class="card__cnt"> 135 <div class="card__cnt">
136 <div class="card__info"> 136 <div class="card__info">
137 <address class="card__line card__line-complex">ЖК “Нахимовский проспект, 46”</address> 137 <address class="card__line card__line-complex">ЖК “Нахимовский проспект, 46”</address>
138 <address class="card__line">Парк Победы (5 мин., пешком)<span style="background-color: #222964;"></span></address> 138 <address class="card__line">Парк Победы (5 мин., пешком)<span style="background-color: #222964;"></span></address>
139 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address> 139 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address>
140 <div class="card__line">Площадь: <b>6 856 м2</b></div> 140 <div class="card__line">Площадь: <b>6 856 м2</b></div>
141 <div class="card__line">Цена за м<sup>2</sup>: <b>25 256 ₽</b></div> 141 <div class="card__line">Цена за м<sup>2</sup>: <b>25 256 ₽</b></div>
142 </div> 142 </div>
143 <div class="card__price"><span>2 625 520 ₽</span><span>в месяц</span> 143 <div class="card__price"><span>2 625 520 ₽</span><span>в месяц</span>
144 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a> 144 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a>
145 </div> 145 </div>
146 </div> 146 </div>
147 </div> 147 </div>
148 <div class="swiper-slide"> 148 <div class="swiper-slide">
149 <div class="card"> 149 <div class="card">
150 <div class="card__top"><img src="images/card/card-img-1.jpg" alt="Фото недвижимости" loading="lazy"> 150 <div class="card__top"><img src="images/card/card-img-1.jpg" alt="Фото недвижимости" loading="lazy">
151 <h3 class="card__title">Салон красоты</h3> 151 <h3 class="card__title">Салон красоты</h3>
152 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 152 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
153 <svg width="18" height="18"> 153 <svg width="18" height="18">
154 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 154 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
155 </svg> 155 </svg>
156 <svg width="18" height="18"> 156 <svg width="18" height="18">
157 <use xlink:href="images/sprite.svg#card-favorites"></use> 157 <use xlink:href="images/sprite.svg#card-favorites"></use>
158 </svg></span><a class="card__label card__label-messenger" href="#"> 158 </svg></span><a class="card__label card__label-messenger" href="#">
159 <svg width="25" height="25"> 159 <svg width="25" height="25">
160 <use xlink:href="images/sprite.svg#card-messenger"></use> 160 <use xlink:href="images/sprite.svg#card-messenger"></use>
161 </svg></a></div> 161 </svg></a></div>
162 </div> 162 </div>
163 <div class="card__cnt"> 163 <div class="card__cnt">
164 <div class="card__info"> 164 <div class="card__info">
165 <address class="card__line card__line-complex">ЖК “Новинки 1”</address> 165 <address class="card__line card__line-complex">ЖК “Новинки 1”</address>
166 <address class="card__line">Фрунзенская (10 мин., пешком)<span style="background-color: #FFC955;"></span></address> 166 <address class="card__line">Фрунзенская (10 мин., пешком)<span style="background-color: #FFC955;"></span></address>
167 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address> 167 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address>
168 <div class="card__line">Площадь: <b>556 м2</b></div> 168 <div class="card__line">Площадь: <b>556 м2</b></div>
169 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div> 169 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div>
170 </div> 170 </div>
171 <div class="card__price"><span>1 000 000 ₽</span> 171 <div class="card__price"><span>1 000 000 ₽</span>
172 </div><a class="card__btn btn btn--bordered" href="#">Подробнее</a> 172 </div><a class="card__btn btn btn--bordered" href="#">Подробнее</a>
173 </div> 173 </div>
174 </div> 174 </div>
175 </div> 175 </div>
176 <div class="swiper-slide"> 176 <div class="swiper-slide">
177 <div class="card"> 177 <div class="card">
178 <div class="card__top"><img src="images/card/card-img-2.jpg" alt="Фото недвижимости" loading="lazy"> 178 <div class="card__top"><img src="images/card/card-img-2.jpg" alt="Фото недвижимости" loading="lazy">
179 <h3 class="card__title">Барбер-шоп</h3> 179 <h3 class="card__title">Барбер-шоп</h3>
180 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 180 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
181 <svg width="18" height="18"> 181 <svg width="18" height="18">
182 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 182 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
183 </svg> 183 </svg>
184 <svg width="18" height="18"> 184 <svg width="18" height="18">
185 <use xlink:href="images/sprite.svg#card-favorites"></use> 185 <use xlink:href="images/sprite.svg#card-favorites"></use>
186 </svg></span><a class="card__label card__label-messenger" href="#"> 186 </svg></span><a class="card__label card__label-messenger" href="#">
187 <svg width="25" height="25"> 187 <svg width="25" height="25">
188 <use xlink:href="images/sprite.svg#card-messenger"></use> 188 <use xlink:href="images/sprite.svg#card-messenger"></use>
189 </svg></a></div> 189 </svg></a></div>
190 </div> 190 </div>
191 <div class="card__cnt"> 191 <div class="card__cnt">
192 <div class="card__info"> 192 <div class="card__info">
193 <address class="card__line card__line-complex">ЖК “Новоарбатский”</address> 193 <address class="card__line card__line-complex">ЖК “Новоарбатский”</address>
194 <address class="card__line">Арбатская (8 мин., пешком)<span style="background-color: #0000A0;"></span></address> 194 <address class="card__line">Арбатская (8 мин., пешком)<span style="background-color: #0000A0;"></span></address>
195 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address> 195 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address>
196 <div class="card__line">Площадь: <b>6 556 м2</b></div> 196 <div class="card__line">Площадь: <b>6 556 м2</b></div>
197 <div class="card__line">Цена за м<sup>2</sup>: <b>5 225 256 ₽</b></div> 197 <div class="card__line">Цена за м<sup>2</sup>: <b>5 225 256 ₽</b></div>
198 </div> 198 </div>
199 <div class="card__price"><span>15 520 900 ₽</span><span>в месяц</span> 199 <div class="card__price"><span>15 520 900 ₽</span><span>в месяц</span>
200 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a> 200 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a>
201 </div> 201 </div>
202 </div> 202 </div>
203 </div> 203 </div>
204 <div class="swiper-slide"> 204 <div class="swiper-slide">
205 <div class="card"> 205 <div class="card">
206 <div class="card__top"><img src="images/card/card-img-3.jpg" alt="Фото недвижимости" loading="lazy"> 206 <div class="card__top"><img src="images/card/card-img-3.jpg" alt="Фото недвижимости" loading="lazy">
207 <h3 class="card__title">Аптека</h3> 207 <h3 class="card__title">Аптека</h3>
208 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 208 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
209 <svg width="18" height="18"> 209 <svg width="18" height="18">
210 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 210 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
211 </svg> 211 </svg>
212 <svg width="18" height="18"> 212 <svg width="18" height="18">
213 <use xlink:href="images/sprite.svg#card-favorites"></use> 213 <use xlink:href="images/sprite.svg#card-favorites"></use>
214 </svg></span><a class="card__label card__label-messenger" href="#"> 214 </svg></span><a class="card__label card__label-messenger" href="#">
215 <svg width="25" height="25"> 215 <svg width="25" height="25">
216 <use xlink:href="images/sprite.svg#card-messenger"></use> 216 <use xlink:href="images/sprite.svg#card-messenger"></use>
217 </svg></a></div> 217 </svg></a></div>
218 </div> 218 </div>
219 <div class="card__cnt"> 219 <div class="card__cnt">
220 <div class="card__info"> 220 <div class="card__info">
221 <address class="card__line card__line-complex">ЖК “Садовые кварталы”</address> 221 <address class="card__line card__line-complex">ЖК “Садовые кварталы”</address>
222 <address class="card__line">Коломенская (2 мин., пешком)<span style="background-color: #029B55;"></span></address> 222 <address class="card__line">Коломенская (2 мин., пешком)<span style="background-color: #029B55;"></span></address>
223 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address> 223 <address class="card__line">ул. Ак. Королева, д. 13, стр. 1, этаж 7, пом. 1, к. 69</address>
224 <div class="card__line">Площадь: <b>8 626 м2</b></div> 224 <div class="card__line">Площадь: <b>8 626 м2</b></div>
225 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div> 225 <div class="card__line">Цена за м<sup>2</sup>: <b>550 256 ₽</b></div>
226 </div> 226 </div>
227 <div class="card__price"><span>5 280 000 ₽</span> 227 <div class="card__price"><span>5 280 000 ₽</span>
228 </div><a class="card__btn btn btn--bordered" href="#">Подробнее о продаже</a> 228 </div><a class="card__btn btn btn--bordered" href="#">Подробнее о продаже</a>
229 </div> 229 </div>
230 </div> 230 </div>
231 </div> 231 </div>
232 <div class="swiper-slide"> 232 <div class="swiper-slide">
233 <div class="card"> 233 <div class="card">
234 <div class="card__top"><img src="images/card/card-img-4.jpg" alt="Фото недвижимости" loading="lazy"> 234 <div class="card__top"><img src="images/card/card-img-4.jpg" alt="Фото недвижимости" loading="lazy">
235 <h3 class="card__title">Витрина</h3> 235 <h3 class="card__title">Витрина</h3>
236 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 236 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites">
237 <svg width="18" height="18"> 237 <svg width="18" height="18">
238 <use xlink:href="images/sprite.svg#card-favorites-empty"></use> 238 <use xlink:href="images/sprite.svg#card-favorites-empty"></use>
239 </svg> 239 </svg>
240 <svg width="18" height="18"> 240 <svg width="18" height="18">
241 <use xlink:href="images/sprite.svg#card-favorites"></use> 241 <use xlink:href="images/sprite.svg#card-favorites"></use>
242 </svg></span><a class="card__label card__label-messenger" href="#"> 242 </svg></span><a class="card__label card__label-messenger" href="#">
243 <svg width="25" height="25"> 243 <svg width="25" height="25">
244 <use xlink:href="images/sprite.svg#card-messenger"></use> 244 <use xlink:href="images/sprite.svg#card-messenger"></use>
245 </svg></a></div> 245 </svg></a></div>
246 </div> 246 </div>
247 <div class="card__cnt"> 247 <div class="card__cnt">
248 <div class="card__info"> 248 <div class="card__info">
249 <address class="card__line card__line-complex">ЖК “Нахимовский проспект, 46”</address> 249 <address class="card__line card__line-complex">ЖК “Нахимовский проспект, 46”</address>
250 <address class="card__line">Парк Победы (5 мин., пешком)<span style="background-color: #222964;"></span></address> 250 <address class="card__line">Парк Победы (5 мин., пешком)<span style="background-color: #222964;"></span></address>
251 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address> 251 <address class="card__line">г. Москва, ул. Дербеневская, д. 1, стр. 6, п. 4, эт. 2, к. 3.1.</address>
252 <div class="card__line">Площадь: <b>6 856 м2</b></div> 252 <div class="card__line">Площадь: <b>6 856 м2</b></div>
253 <div class="card__line">Цена за м<sup>2</sup>: <b>25 256 ₽</b></div> 253 <div class="card__line">Цена за м<sup>2</sup>: <b>25 256 ₽</b></div>
254 </div> 254 </div>
255 <div class="card__price"><span>2 625 520 ₽</span><span>в месяц</span> 255 <div class="card__price"><span>2 625 520 ₽</span><span>в месяц</span>
256 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a> 256 </div><a class="card__btn btn btn--bordered" href="#">Подробнее об аренде</a>
257 </div> 257 </div>
258 </div> 258 </div>
259 </div>--> 259 </div> --->
260 </div> 260 </div>
261 </div> 261 </div>
262 <div class="swiper-pagination"></div> 262 <div class="swiper-pagination"></div>
263 </div> 263 </div>
264 </div> 264 </div>
265 </section> 265 </section>
266 <!-- Описание компании --> 266 <!-- Описание компании -->
267 <section class="benefits"> 267 <section class="benefits">
268 <div class="container"> 268 <div class="container">
269 <div class="benefits__wrap"> 269 <div class="benefits__wrap">
270 <h2 class="benefits__title title">Преимущества Renttorg</h2> 270 <h2 class="benefits__title title">Преимущества Renttorg</h2>
271 <div class="benefits__items"> 271 <div class="benefits__items">
272 <div class="benefits-item"> 272 <div class="benefits-item">
273 <div class="benefits-item__top"> 273 <div class="benefits-item__top">
274 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-1.svg" alt="Опыт"></div> 274 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-1.svg" alt="Опыт"></div>
275 <h3 class="benefits-item__title">{{ $items_contact[0]->title1 }}</h3> 275 <h3 class="benefits-item__title">{{ $items_contact[0]->title1 }}</h3>
276 </div> 276 </div>
277 <p class="benefits-item__descr">{{ $items_contact[0]->text1 }}</p> 277 <p class="benefits-item__descr">{{ $items_contact[0]->text1 }}</p>
278 </div> 278 </div>
279 <div class="benefits-item"> 279 <div class="benefits-item">
280 <div class="benefits-item__top"> 280 <div class="benefits-item__top">
281 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-2.svg" alt="Агенство"></div> 281 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-2.svg" alt="Агенство"></div>
282 <h3 class="benefits-item__title">{{ $items_contact[0]->title2 }}</h3> 282 <h3 class="benefits-item__title">{{ $items_contact[0]->title2 }}</h3>
283 </div> 283 </div>
284 <p class="benefits-item__descr">{{ $items_contact[0]->text2 }}</p> 284 <p class="benefits-item__descr">{{ $items_contact[0]->text2 }}</p>
285 </div> 285 </div>
286 <div class="benefits-item"> 286 <div class="benefits-item">
287 <div class="benefits-item__top"> 287 <div class="benefits-item__top">
288 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-3.svg" alt="Предложения"></div> 288 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-3.svg" alt="Предложения"></div>
289 <h3 class="benefits-item__title">{{ $items_contact[0]->title3 }}</h3> 289 <h3 class="benefits-item__title">{{ $items_contact[0]->title3 }}</h3>
290 </div> 290 </div>
291 <p class="benefits-item__descr">{{ $items_contact[0]->text3 }}</p> 291 <p class="benefits-item__descr">{{ $items_contact[0]->text3 }}</p>
292 </div> 292 </div>
293 </div> 293 </div>
294 </div> 294 </div>
295 </div> 295 </div>
296 </section> 296 </section>
297 <!-- Партнеры --> 297 <!-- Партнеры -->
298 298
299 @if ($partners->count()) 299 @if ($partners->count())
300 <section class="partners"> 300 <section class="partners">
301 <div class="container"> 301 <div class="container">
302 <h2 class="partners__title title">Партнеры нашей компании</h2> 302 <h2 class="partners__title title">Партнеры нашей компании</h2>
303 <div class="partners__swiper swiper" data-mobile="false"> 303 <div class="partners__swiper swiper" data-mobile="false">
304 <div class="swiper-wrapper"> 304 <div class="swiper-wrapper">
305 <div class="swiper-slide"> 305 <div class="swiper-slide">
306 <div class="partners__inner"> 306 <div class="partners__inner">
307 @foreach ($partners as $partner) 307 @foreach ($partners as $partner)
308 <div class="partners-item"><img src="{{ asset(Storage::url($partner->foto))}}" alt="{{ $partner->name }}" loading="lazy"></div> 308 <div class="partners-item"><img src="{{ asset(Storage::url($partner->foto))}}" alt="{{ $partner->name }}" loading="lazy"></div>
309 @endforeach 309 @endforeach
310 310
311 </div> 311 </div>
312 </div> 312 </div>
313 </div> 313 </div>
314 <div class="swiper-scrollbar"></div> 314 <div class="swiper-scrollbar"></div>
315 </div> 315 </div>
316 </div> 316 </div>
317 </section> 317 </section>
318 @endif 318 @endif
319 <!-- Новости --> 319 <!-- Новости -->
320 320
321 <section class="slider"> 321 <section class="slider">
322 <div class="container"> 322 <div class="container">
323 <div class="slider__wrap"> 323 <div class="slider__wrap">
324 <div class="slider__top"> 324 <div class="slider__top">
325 <h2 class="slider__title title">Новости</h2> 325 <h2 class="slider__title title">Новости</h2>
326 <div class="slider__control"> 326 <div class="slider__control">
327 <div class="swiper-button-prev"> 327 <div class="swiper-button-prev">
328 <svg width="10" height="17"> 328 <svg width="10" height="17">
329 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 329 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
330 </svg> 330 </svg>
331 </div> 331 </div>
332 <div class="swiper-button-next"> 332 <div class="swiper-button-next">
333 <svg width="10" height="17"> 333 <svg width="10" height="17">
334 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 334 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
335 </svg> 335 </svg>
336 </div> 336 </div>
337 </div> 337 </div>
338 </div> 338 </div>
339 <div class="slider__swiper swiper"> 339 <div class="slider__swiper swiper">
340 <div class="swiper-wrapper"> 340 <div class="swiper-wrapper">
341 @if ($news->count()) 341 @if ($news->count())
342 @foreach($news as $new) 342 @foreach($news as $new)
343 @include('catalogs.new', ['new' => $new]) 343 @include('catalogs.new', ['new' => $new])
344 @endforeach 344 @endforeach
345 @else 345 @else
346 <h3>Пока здесь нет новостей!</h3> 346 <h3>Пока здесь нет новостей!</h3>
347 @endif 347 @endif
348 348
349 349
350 <!--<div class="swiper-slide"> 350 <!--<div class="swiper-slide">
351 <div class="card-news"> 351 <div class="card-news">
352 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 352 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
353 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div> 353 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div>
354 </div> 354 </div>
355 <div class="card-news__cnt"> 355 <div class="card-news__cnt">
356 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее 356 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее
357 <svg width="17" height="12"> 357 <svg width="17" height="12">
358 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 358 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
359 </svg></a> 359 </svg></a>
360 </div> 360 </div>
361 </div> 361 </div>
362 </div> 362 </div>
363 <div class="swiper-slide"> 363 <div class="swiper-slide">
364 <div class="card-news"> 364 <div class="card-news">
365 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 365 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
366 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div> 366 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div>
367 </div> 367 </div>
368 <div class="card-news__cnt"> 368 <div class="card-news__cnt">
369 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее 369 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее
370 <svg width="17" height="12"> 370 <svg width="17" height="12">
371 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 371 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
372 </svg></a> 372 </svg></a>
373 </div> 373 </div>
374 </div> 374 </div>
375 </div> 375 </div>
376 <div class="swiper-slide"> 376 <div class="swiper-slide">
377 <div class="card-news"> 377 <div class="card-news">
378 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 378 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
379 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div> 379 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div>
380 </div> 380 </div>
381 <div class="card-news__cnt"> 381 <div class="card-news__cnt">
382 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее 382 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее
383 <svg width="17" height="12"> 383 <svg width="17" height="12">
384 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 384 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
385 </svg></a> 385 </svg></a>
386 </div> 386 </div>
387 </div> 387 </div>
388 </div> 388 </div>
389 <div class="swiper-slide"> 389 <div class="swiper-slide">
390 <div class="card-news"> 390 <div class="card-news">
391 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 391 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
392 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div> 392 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div>
393 </div> 393 </div>
394 <div class="card-news__cnt"> 394 <div class="card-news__cnt">
395 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее 395 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее
396 <svg width="17" height="12"> 396 <svg width="17" height="12">
397 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 397 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
398 </svg></a> 398 </svg></a>
399 </div> 399 </div>
400 </div> 400 </div>
401 </div> 401 </div>
402 <div class="swiper-slide"> 402 <div class="swiper-slide">
403 <div class="card-news"> 403 <div class="card-news">
404 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 404 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
405 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div> 405 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div>
406 </div> 406 </div>
407 <div class="card-news__cnt"> 407 <div class="card-news__cnt">
408 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее 408 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее
409 <svg width="17" height="12"> 409 <svg width="17" height="12">
410 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 410 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
411 </svg></a> 411 </svg></a>
412 </div> 412 </div>
413 </div> 413 </div>
414 </div> 414 </div>
415 <div class="swiper-slide"> 415 <div class="swiper-slide">
416 <div class="card-news"> 416 <div class="card-news">
417 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 417 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
418 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div> 418 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div>
419 </div> 419 </div>
420 <div class="card-news__cnt"> 420 <div class="card-news__cnt">
421 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее 421 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее
422 <svg width="17" height="12"> 422 <svg width="17" height="12">
423 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 423 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
424 </svg></a> 424 </svg></a>
425 </div> 425 </div>
426 </div> 426 </div>
427 </div> 427 </div>
428 <div class="swiper-slide"> 428 <div class="swiper-slide">
429 <div class="card-news"> 429 <div class="card-news">
430 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 430 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
431 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div> 431 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div>
432 </div> 432 </div>
433 <div class="card-news__cnt"> 433 <div class="card-news__cnt">
434 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее 434 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее
435 <svg width="17" height="12"> 435 <svg width="17" height="12">
436 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 436 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
437 </svg></a> 437 </svg></a>
438 </div> 438 </div>
439 </div> 439 </div>
440 </div> 440 </div>
441 <div class="swiper-slide"> 441 <div class="swiper-slide">
442 <div class="card-news"> 442 <div class="card-news">
443 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 443 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
444 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div> 444 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div>
445 </div> 445 </div>
446 <div class="card-news__cnt"> 446 <div class="card-news__cnt">
447 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее 447 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее
448 <svg width="17" height="12"> 448 <svg width="17" height="12">
449 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 449 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
450 </svg></a> 450 </svg></a>
451 </div> 451 </div>
452 </div> 452 </div>
453 </div>--> 453 </div>-->
454 </div> 454 </div>
455 </div> 455 </div>
456 <div class="swiper-pagination"></div> 456 <div class="swiper-pagination"></div>
457 </div> 457 </div>
458 </div> 458 </div>
459 </section> 459 </section>
460 @endsection 460 @endsection
461 461
462 @section('form_feedback') 462 @section('form_feedback')
463 <!-- Форма обратной связи --> 463 <!-- Форма обратной связи -->
464 @include('form.form_feedback') 464 @include('form.form_feedback')
465 465
466 @endsection 466 @endsection
467 467
468 468
469 469
470 470
resources/views/layout/admin.blade.php
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> 2 <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
3 <head> 3 <head>
4 <meta charset="UTF-8"> 4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>{{$title}}</title> 7 <title>{{$title}}</title>
8 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin> 8 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin>
9 <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin> 9 <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin>
10 <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin> 10 <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin>
11 <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin> 11 <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin>
12 <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin> 12 <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin>
13 <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin> 13 <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin>
14 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin> 14 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin>
15 <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}"> 15 <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}">
16 <link rel="stylesheet" href="{{ asset('css/style.css') }}"> 16 <link rel="stylesheet" href="{{ asset('css/style.css') }}">
17 <link rel="stylesheet" href="{{ asset('css/style_table.css') }}"> 17 <link rel="stylesheet" href="{{ asset('css/style_table.css') }}">
18 <style> 18 <style>
19 /* form styles */ 19 /* form styles */
20 form .row { 20 form .row {
21 display: block; 21 display: block;
22 padding: 7px 8px; 22 padding: 7px 8px;
23 margin-bottom: 7px; 23 margin-bottom: 7px;
24 } 24 }
25 form .row:hover { 25 form .row:hover {
26 background: #f1f7fa; 26 background: #f1f7fa;
27 } 27 }
28 28
29 form label { 29 form label {
30 display: inline-block; 30 display: inline-block;
31 font-size: 1.2em; 31 font-size: 1.2em;
32 font-weight: bold; 32 font-weight: bold;
33 width: 120px; 33 width: 120px;
34 padding: 6px 0; 34 padding: 6px 0;
35 color: #464646; 35 color: #464646;
36 vertical-align: top; 36 vertical-align: top;
37 } 37 }
38 form .req { color: #ca5354; } 38 form .req { color: #ca5354; }
39 39
40 form .note { 40 form .note {
41 font-size: 1.2em; 41 font-size: 1.2em;
42 line-height: 1.33em; 42 line-height: 1.33em;
43 font-weight: normal; 43 font-weight: normal;
44 padding: 2px 7px; 44 padding: 2px 7px;
45 margin-bottom: 10px; 45 margin-bottom: 10px;
46 } 46 }
47 47
48 form input:focus, form textarea:focus { outline: none; } 48 form input:focus, form textarea:focus { outline: none; }
49 49
50 /* placeholder styles: http://stackoverflow.com/a/2610741/477958 */ 50 /* placeholder styles: http://stackoverflow.com/a/2610741/477958 */
51 ::-webkit-input-placeholder { color: #aaafbd; font-style: italic; } /* WebKit */ 51 ::-webkit-input-placeholder { color: #aaafbd; font-style: italic; } /* WebKit */
52 :-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 4 to 18 */ 52 :-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 4 to 18 */
53 ::-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 19+ */ 53 ::-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 19+ */
54 :-ms-input-placeholder { color: #aaafbd; font-style: italic; } /* Internet Explorer 10+ */ 54 :-ms-input-placeholder { color: #aaafbd; font-style: italic; } /* Internet Explorer 10+ */
55 55
56 form .txt { 56 form .txt {
57 display: inline-block; 57 display: inline-block;
58 padding: 8px 9px; 58 padding: 8px 9px;
59 padding-right: 30px; 59 padding-right: 30px;
60 width: 240px; 60 width: 240px;
61 font-family: 'Oxygen', sans-serif; 61 font-family: 'Oxygen', sans-serif;
62 font-size: 1.35em; 62 font-size: 1.35em;
63 font-weight: normal; 63 font-weight: normal;
64 color: #898989; 64 color: #898989;
65 } 65 }
66 66
67 form .txtarea { 67 form .txtarea {
68 display: inline-block; 68 display: inline-block;
69 padding: 8px 9px; 69 padding: 8px 9px;
70 padding-right: 30px; 70 padding-right: 30px;
71 font-family: 'Oxygen', sans-serif; 71 font-family: 'Oxygen', sans-serif;
72 font-size: 1.35em; 72 font-size: 1.35em;
73 font-weight: normal; 73 font-weight: normal;
74 color: #898989; 74 color: #898989;
75 } 75 }
76 </style> 76 </style>
77 </head> 77 </head>
78 <body> 78 <body>
79 <div class="spinner"></div> 79 <div class="spinner"></div>
80 <div class="wrapper"> 80 <div class="wrapper">
81 <header class="header js_header"> 81 <header class="header js_header">
82 <div class="container"> 82 <div class="container">
83 <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a> 83 <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a>
84 <nav class="header__nav nav"> 84 <nav class="header__nav nav">
85 <ul class="nav__list"> 85 <ul class="nav__list">
86 <li class="nav__item"><a class="nav__link" href="{{ route('admin.area.index') }}">Объекты</a></li> 86 <li class="nav__item"><a class="nav__link" href="{{ route('admin.area.index') }}">Объекты</a></li>
87 <li class="nav__item"><a class="nav__link" href="{{ route('admin.news.index') }}">Новости</a></li> 87 <li class="nav__item"><a class="nav__link" href="{{ route('admin.news.index') }}">Новости</a></li>
88 <li class="nav__item"><a class="nav__link" href="{{ route('admin.company.show', ['company' => 1]) }}">Компания</a></li> 88 <li class="nav__item"><a class="nav__link" href="{{ route('admin.company.show', ['company' => 1]) }}">Компания</a></li>
89 <li class="nav__item"><a class="nav__link" href="{{ route('admin.typearea.index') }}">Типы</a></li> 89 <li class="nav__item"><a class="nav__link" href="{{ route('admin.typearea.index') }}">Типы</a></li>
90 <li class="nav__item"><a class="nav__link" href="{{ route('admin.formatarea.index') }}">Форматы</a></li> 90 <li class="nav__item"><a class="nav__link" href="{{ route('admin.formatarea.index') }}">Форматы</a></li>
91 <li class="nav__item"><a class="nav__link" href="{{ route('admin.message.index') }}">Сообщения</a></li> 91 <li class="nav__item"><a class="nav__link" href="{{ route('admin.message.index') }}">Сообщения</a></li>
92 <li class="nav__item"><a class="nav__link" href="{{ route('admin.houses.index') }}">Офисы</a></li> 92 <li class="nav__item"><a class="nav__link" href="{{ route('admin.houses.index') }}">Офисы</a></li>
93 93
94 </ul> 94 </ul>
95 </nav> 95 </nav>
96 <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback"> 96 <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback">
97 <svg width="22" height="22"> 97 <svg width="22" height="22">
98 <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use> 98 <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use>
99 </svg></a> 99 </svg></a>
100 <button class="header__burger js_header_burger" type="button">Меню 100 <button class="header__burger js_header_burger" type="button">Меню
101 <svg width="28" height="18"> 101 <svg width="28" height="18">
102 <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> 102 <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use>
103 </svg> 103 </svg>
104 </button> 104 </button>
105 </div> 105 </div>
106 <div class="menu js_menu"> 106 <div class="menu js_menu">
107 <div class="menu__wrap"> 107 <div class="menu__wrap">
108 <button class="menu__close js_menu_close" type="button">Меню 108 <button class="menu__close js_menu_close" type="button">Меню
109 <svg width="20" height="20"> 109 <svg width="20" height="20">
110 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> 110 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use>
111 </svg> 111 </svg>
112 </button> 112 </button>
113 <div class="menu__inner"> 113 <div class="menu__inner">
114 <nav class="menu__nav"> 114 <nav class="menu__nav">
115 <ul class="menu__list"> 115 <ul class="menu__list">
116 <li class="menu__item"><a class="menu__link" href="{{ route('admin.area.index') }}">Объекты</a></li> 116 <li class="menu__item"><a class="menu__link" href="{{ route('admin.area.index') }}">Объекты</a></li>
117 <li class="menu__item"><a class="menu__link" href="{{ route('admin.news.index') }}">Новости</a></li> 117 <li class="menu__item"><a class="menu__link" href="{{ route('admin.news.index') }}">Новости</a></li>
118 <li class="menu__item"><a class="menu__link" href="{{ route('admin.company.show', ['company' => 1]) }}">Компания</a></li> 118 <li class="menu__item"><a class="menu__link" href="{{ route('admin.company.show', ['company' => 1]) }}">Компания</a></li>
119 <li class="menu__item"><a class="menu__link" href="{{ route('admin.typearea.index') }}">Типы недвижимости</a></li> 119 <li class="menu__item"><a class="menu__link" href="{{ route('admin.typearea.index') }}">Типы недвижимости</a></li>
120 <li class="menu__item"><a class="menu__link" href="{{ route('admin.formatarea.index') }}">Форматы недвижимости</a></li> 120 <li class="menu__item"><a class="menu__link" href="{{ route('admin.formatarea.index') }}">Форматы недвижимости</a></li>
121 <li class="menu__item"><a class="menu__link" href="{{ route('admin.message.index') }}">Сообщения</a></li> 121 <li class="menu__item"><a class="menu__link" href="{{ route('admin.message.index') }}">Сообщения</a></li>
122 <li class="menu__item"><a class="menu__link" href="{{ route('admin.houses.index') }}">Офисы</a></li> 122 <li class="menu__item"><a class="menu__link" href="{{ route('admin.houses.index') }}">Офисы</a></li>
123 </ul> 123 </ul>
124 </nav> 124 </nav>
125 <div class="menu__contacts"><a class="menu__contact" href="mailto:info@renttorg.ru">E-MAIL<span>info@renttorg.ru</span></a><a class="menu__contact" href="tel:+79290127262">ТЕЛЕФОН<span>+7 (929) 012-72-62</span></a></div> 125 <div class="menu__contacts"><a class="menu__contact" href="mailto:info@renttorg.ru">E-MAIL<span>info@renttorg.ru</span></a><a class="menu__contact" href="tel:+79290127262">ТЕЛЕФОН<span>+7 (929) 012-72-62</span></a></div>
126 <div class="menu__social social"> 126 <div class="menu__social social">
127 <ul class="social__list"> 127 <ul class="social__list">
128 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li> 128 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li>
129 <li class="social__item"><a class="social__link" href="#" target="_blank"> 129 <li class="social__item"><a class="social__link" href="#" target="_blank">
130 <svg width="40" height="40"> 130 <svg width="40" height="40">
131 <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use> 131 <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use>
132 </svg></a></li> 132 </svg></a></li>
133 </ul> 133 </ul>
134 </div> 134 </div>
135 </div> 135 </div>
136 </div> 136 </div>
137 </div> 137 </div>
138 </div> 138 </div>
139 </div> 139 </div>
140 </header> 140 </header>
141 <main> 141 <main>
142 @if ($message = Session::get('success')) 142 @if ($message = Session::get('success'))
143 <section> 143 <section>
144 <div class="alert alert-success alert-dismissible mt-0" role="alert"> 144 <div class="alert alert-success alert-dismissible mt-0" role="alert">
145 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> 145 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть">
146 <span aria-hidden="true">&times;</span> 146 <span aria-hidden="true">&times;</span>
147 </button> 147 </button>
148 {{ $message }} 148 {{ $message }}
149 </div> 149 </div>
150 </section> 150 </section>
151 @endif 151 @endif
152 152
153 @if ($errors->any()) 153 @if ($errors->any())
154 <section> 154 <section>
155 <div class="alert alert-danger alert-dismissible mt-4" role="alert"> 155 <div class="alert alert-danger alert-dismissible mt-4" role="alert">
156 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> 156 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть">
157 <span aria-hidden="true">&times;</span> 157 <span aria-hidden="true">&times;</span>
158 </button> 158 </button>
159 <ul class="mb-0"> 159 <ul class="mb-0">
160 @foreach ($errors->all() as $error) 160 @foreach ($errors->all() as $error)
161 <li>{{ $error }}</li> 161 <li>{{ $error }}</li>
162 @endforeach 162 @endforeach
163 </ul> 163 </ul>
164 </div> 164 </div>
165 </section> 165 </section>
166 @endif 166 @endif
167 <!-- Основной контент --> 167 <!-- Основной контент -->
168 @yield('content') 168 @yield('content')
169 169
170 </main> 170 </main>
171 171
172 <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})"> 172 <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})">
173 <div class="footer__buttons"> 173 <div class="footer__buttons">
174 <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button"> 174 <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button">
175 <svg width="30" height="32"> 175 <svg width="30" height="32">
176 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use> 176 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use>
177 </svg> 177 </svg>
178 </button> 178 </button>
179 <button class="footer__btn footer__btn-up js_btn_up" type="button"> 179 <button class="footer__btn footer__btn-up js_btn_up" type="button">
180 <svg width="19" height="11"> 180 <svg width="19" height="11">
181 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use> 181 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use>
182 </svg> 182 </svg>
183 </button> 183 </button>
184 </div> 184 </div>
185 185
186 <!-- Сам футер мееню --> 186 <!-- Сам футер мееню -->
187 <div class="footer-middle"> 187 <div class="footer-middle">
188 <div class="container"> 188 <div class="container">
189 <div class="footer-middle__wrap"> 189 <div class="footer-middle__wrap">
190 <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a> 190 <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a>
191 <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p> 191 <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p>
192 <div class="footer-questions"> 192 <div class="footer-questions">
193 <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a> 193 <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a>
194 </div> 194 </div>
195 </div> 195 </div>
196 <div class="footer__col footer__col-menu js_footer_col"> 196 <div class="footer__col footer__col-menu js_footer_col">
197 <h3 class="footer__caption js_footer_caption">Меню</h3> 197 <h3 class="footer__caption js_footer_caption">Меню</h3>
198 <div class="footer__block js_footer_block"> 198 <div class="footer__block js_footer_block">
199 <ul class="footer__list"> 199 <ul class="footer__list">
200 <li class="footer__item"><a class="footer__link" href="{{ route('index') }}">Главная</a></li> 200 <li class="footer__item"><a class="footer__link" href="{{ route('index') }}">Главная</a></li>
201 <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li> 201 <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li>
202 <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li> 202 <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li>
203 <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li> 203 <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li>
204 <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li> 204 <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li>
205 <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li> 205 <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li>
206 </ul> 206 </ul>
207 207
208 </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a> 208 </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a>
209 </div> 209 </div>
210 <div class="footer__col js_footer_col"> 210 <div class="footer__col js_footer_col">
211 <h3 class="footer__caption js_footer_caption">Админка</h3> 211 <h3 class="footer__caption js_footer_caption">Админка</h3>
212 <div class="footer__block js_footer_block"> 212 <div class="footer__block js_footer_block">
213 <ul class="footer__list"> 213 <ul class="footer__list">
214 <li class="footer__item"><a class="footer__link" href="{{ route('user.index') }}">Главная</a></li> 214 <li class="footer__item"><a class="footer__link" href="{{ route('user.index') }}">Главная</a></li>
215 215
216 </ul> 216 </ul>
217 </div> 217 </div>
218 </div> 218 </div>
219 <div class="footer__col js_footer_col"> 219 <div class="footer__col js_footer_col">
220 <h3 class="footer__caption js_footer_caption">Система</h3> 220 <h3 class="footer__caption js_footer_caption">Система</h3>
221 <div class="footer__block js_footer_block"> 221 <div class="footer__block js_footer_block">
222 <ul class="footer__list"> 222 <ul class="footer__list">
223 <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Авторизация</a></li> 223 <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Авторизация</a></li>
224 <li class="footer__item"><a class="footer__link" href="{{ route('auth.register') }}">Регистрация</a></li> 224 <li class="footer__item"><a class="footer__link" href="{{ route('auth.register') }}">Регистрация</a></li>
225 </ul> 225 </ul>
226 </div> 226 </div>
227 </div> 227 </div>
228 <div class="footer__col footer__col-contacts"> 228 <div class="footer__col footer__col-contacts">
229 <h3 class="footer__caption js_footer_caption">Контакты</h3> 229 <h3 class="footer__caption js_footer_caption">Контакты</h3>
230 <ul class="footer__list"> 230 <ul class="footer__list">
231 <li class="footer__item"><a class="footer__link" href="">EmailAdmin</a></li> 231 <li class="footer__item"><a class="footer__link" href="">EmailAdmin</a></li>
232 <li class="footer__item"><a class="footer__link" href="">ТелефонАдмин</a></li> 232 <li class="footer__item"><a class="footer__link" href="">ТелефонАдмин</a></li>
233 </ul> 233 </ul>
234 <div class="footer__social social"> 234 <div class="footer__social social">
235 <ul class="social__list"> 235 <ul class="social__list">
236 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li> 236 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li>
237 <li class="social__item"><a class="social__link" href="#" target="_blank"> 237 <li class="social__item"><a class="social__link" href="#" target="_blank">
238 <svg width="40" height="40"> 238 <svg width="40" height="40">
239 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use> 239 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use>
240 </svg></a></li> 240 </svg></a></li>
241 </ul> 241 </ul>
242 </div> 242 </div>
243 </div> 243 </div>
244 </div> 244 </div>
245 </div> 245 </div>
246 </div> 246 </div>
247 247
248 <div class="footer-bottom"> 248 <div class="footer-bottom">
249 <div class="container"> 249 <div class="container">
250 <div class="footer-bottom__wrap"> 250 <div class="footer-bottom__wrap">
251 <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a> 251 <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a>
252 </div> 252 </div>
253 </div> 253 </div>
254 </div> 254 </div>
255 </footer> 255 </footer>
256 </div> 256 </div>
257 257
258 <!-- Вплывающие окна --> 258 <!-- Вплывающие окна -->
259 <div class="popup popup-feedback" data-popup="feedback"> 259 <div class="popup popup-feedback" data-popup="feedback">
260 <div class="popup__wrap"> 260 <div class="popup__wrap">
261 <button class="popup__close js_popup_close" type="button"> 261 <button class="popup__close js_popup_close" type="button">
262 <svg width="20" height="20"> 262 <svg width="20" height="20">
263 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 263 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
264 </svg> 264 </svg>
265 </button> 265 </button>
266 <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST"> 266 <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST">
267 @csrf 267 @csrf
268 <div class="popup-feedback__title">Как с вами связаться</div> 268 <div class="popup-feedback__title">Как с вами связаться</div>
269 <div class="popup-feedback__fields"> 269 <div class="popup-feedback__fields">
270 <label class="popup-feedback__field field"> 270 <label class="popup-feedback__field field">
271 <input type="text" placeholder="Имя" name="NameUser"> 271 <input type="text" placeholder="Имя" name="NameUser">
272 </label> 272 </label>
273 <label class="popup-feedback__field field"> 273 <label class="popup-feedback__field field">
274 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> 274 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser">
275 </label> 275 </label>
276 </div> 276 </div>
277 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 277 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
278 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> 278 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p>
279 </form> 279 </form>
280 </div> 280 </div>
281 </div> 281 </div>
282 <div class="popup popup-feedback" data-popup="viewing"> 282 <div class="popup popup-feedback" data-popup="viewing">
283 <div class="popup__wrap"> 283 <div class="popup__wrap">
284 <button class="popup__close js_popup_close" type="button"> 284 <button class="popup__close js_popup_close" type="button">
285 <svg width="20" height="20"> 285 <svg width="20" height="20">
286 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 286 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
287 </svg> 287 </svg>
288 </button> 288 </button>
289 <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST"> 289 <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST">
290 @csrf 290 @csrf
291 <div class="popup-feedback__title">Записаться на просмотр</div> 291 <div class="popup-feedback__title">Записаться на просмотр</div>
292 <div class="popup-feedback__fields"> 292 <div class="popup-feedback__fields">
293 <label class="popup-feedback__field field"> 293 <label class="popup-feedback__field field">
294 <input type="text" placeholder="Имя" name="NameUser"> 294 <input type="text" placeholder="Имя" name="NameUser">
295 </label> 295 </label>
296 <label class="popup-feedback__field field"> 296 <label class="popup-feedback__field field">
297 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> 297 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser">
298 </label> 298 </label>
299 </div> 299 </div>
300 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 300 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
301 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 301 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
302 </form> 302 </form>
303 </div> 303 </div>
304 </div> 304 </div>
305 <div class="popup popup-success" data-popup="success"> 305 <div class="popup popup-success" data-popup="success">
306 <div class="popup__wrap"> 306 <div class="popup__wrap">
307 <button class="popup__close js_popup_close" type="button"> 307 <button class="popup__close js_popup_close" type="button">
308 <svg width="20" height="20"> 308 <svg width="20" height="20">
309 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> 309 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use>
310 </svg> 310 </svg>
311 </button> 311 </button>
312 <div class="popup-success__inner"> 312 <div class="popup-success__inner">
313 <div class="popup-success__logo"> 313 <div class="popup-success__logo">
314 <svg width="48" height="39"> 314 <svg width="48" height="39">
315 <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use> 315 <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use>
316 </svg> 316 </svg>
317 </div> 317 </div>
318 <div class="popup-success__title">Спасибо за заявку</div> 318 <div class="popup-success__title">Спасибо за заявку</div>
319 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p> 319 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p>
320 </div> 320 </div>
321 </div> 321 </div>
322 </div> 322 </div>
323 <div class="popup popup-feedback" data-popup="sending"> 323 <div class="popup popup-feedback" data-popup="sending">
324 <div class="popup__wrap"> 324 <div class="popup__wrap">
325 <button class="popup__close js_popup_close" type="button"> 325 <button class="popup__close js_popup_close" type="button">
326 <svg width="20" height="20"> 326 <svg width="20" height="20">
327 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 327 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
328 </svg> 328 </svg>
329 </button> 329 </button>
330 <form class="popup-feedback__form js_popup_sending_form" action="{{ route('email_form') }}" method="POST"> 330 <form class="popup-feedback__form js_popup_sending_form" action="{{ route('email_form') }}" method="POST">
331 @csrf 331 @csrf
332 <div class="popup-feedback__title">Отправить на почту</div> 332 <div class="popup-feedback__title">Отправить на почту</div>
333 <div class="popup-feedback__fields"> 333 <div class="popup-feedback__fields">
334 <label class="popup-feedback__field field"> 334 <label class="popup-feedback__field field">
335 <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser"> 335 <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser">
336 </label> 336 </label>
337 </div> 337 </div>
338 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 338 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
339 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> 339 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p>
340 </form> 340 </form>
341 </div> 341 </div>
342 </div> 342 </div>
343 <div class="contact-us js_contact_us"> 343 <div class="contact-us js_contact_us">
344 <div class="contact-us__top"> 344 <div class="contact-us__top">
345 <button class="contact-us__close js_contact_us_close" type="button"> 345 <button class="contact-us__close js_contact_us_close" type="button">
346 <svg width="20" height="20"> 346 <svg width="20" height="20">
347 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 347 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
348 </svg> 348 </svg>
349 </button> 349 </button>
350 <div class="contact-us__title">Свяжитесь с нами</div> 350 <div class="contact-us__title">Свяжитесь с нами</div>
351 </div> 351 </div>
352 <div class="contact-us__body"> 352 <div class="contact-us__body">
353 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback"> 353 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback">
354 <div class="contact-us-item__icon"> 354 <div class="contact-us-item__icon">
355 <svg width="34" height="34"> 355 <svg width="34" height="34">
356 <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use> 356 <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use>
357 </svg> 357 </svg>
358 </div> 358 </div>
359 <div class="contact-us-item__name">Позвонить</div></a> 359 <div class="contact-us-item__name">Позвонить</div></a>
360 360
361 <a class="contact-us-item js_contact_us_close" data-btn="sending"> 361 <a class="contact-us-item js_contact_us_close" data-btn="sending">
362 <div class="contact-us-item__icon"> 362 <div class="contact-us-item__icon">
363 <svg width="44" height="44"> 363 <svg width="44" height="44">
364 <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use> 364 <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use>
365 </svg> 365 </svg>
366 </div> 366 </div>
367 <div class="contact-us-item__name">Написать</div></a> 367 <div class="contact-us-item__name">Написать</div></a>
368 368
369 <a class="contact-us-item js_contact_us_close" > 369 <a class="contact-us-item js_contact_us_close" >
370 <div class="contact-us-item__icon"> 370 <div class="contact-us-item__icon">
371 <svg width="34" height="34"> 371 <svg width="34" height="34">
372 <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use> 372 <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use>
373 </svg> 373 </svg>
374 </div> 374 </div>
375 <div class="contact-us-item__name">Онлайн-чат</div></a></div> 375 <div class="contact-us-item__name">Онлайн-чат</div></a></div>
376 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 376 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
377 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div> 377 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div>
378 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 378 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
379 <div class="contact-us-social__icon contact-us-social__icon-wa"> 379 <div class="contact-us-social__icon contact-us-social__icon-wa">
380 <svg width="31" height="31"> 380 <svg width="31" height="31">
381 <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use> 381 <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use>
382 </svg> 382 </svg>
383 </div> 383 </div>
384 <div class="contact-us-social__name">WhatsApp</div></a></div> 384 <div class="contact-us-social__name">WhatsApp</div></a></div>
385 </div> 385 </div>
386 </div> 386 </div>
387 <div class="offer-side-popup" data-popup="offer-side-popup"> 387 <div class="offer-side-popup" data-popup="offer-side-popup">
388 <div class="offer-side-popup__wrap"> 388 <div class="offer-side-popup__wrap">
389 <button class="offer-side-popup__close js_popup_close" type="button"> 389 <button class="offer-side-popup__close js_popup_close" type="button">
390 <svg width="20" height="20"> 390 <svg width="20" height="20">
391 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 391 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
392 </svg> 392 </svg>
393 </button> 393 </button>
394 <div class="offer-side-popup__cnt"> 394 <div class="offer-side-popup__cnt">
395 <div class="offer-side-popup__item js_offer_side_popup_item active" data-item="1"><img src="{{ asset('images/offer-side-item-img-1.jpg')}}" alt="План объекта"></div> 395 <div class="offer-side-popup__item js_offer_side_popup_item active" data-item="1"><img src="{{ asset('images/offer-side-item-img-1.jpg')}}" alt="План объекта"></div>
396 <div class="offer-side-popup__item js_offer_side_popup_item" data-item="2"><img src="{{ asset('images/offer-side-item-img-2.jpg')}}" alt="План этажа"></div> 396 <div class="offer-side-popup__item js_offer_side_popup_item" data-item="2"><img src="{{ asset('images/offer-side-item-img-2.jpg')}}" alt="План этажа"></div>
397 </div> 397 </div>
398 <div class="offer-side-popup__tabs"> 398 <div class="offer-side-popup__tabs">
399 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button> 399 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button>
400 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button> 400 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button>
401 </div> 401 </div>
402 <button class="offer-side-popup__sizeoff js_popup_close" type="button"> 402 <button class="offer-side-popup__sizeoff js_popup_close" type="button">
403 <svg width="18" height="18"> 403 <svg width="18" height="18">
404 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use> 404 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use>
405 </svg> 405 </svg>
406 </button> 406 </button>
407 </div> 407 </div>
408 </div> 408 </div>
409 <div class="img-viewer js_img_viewer"> 409 <div class="img-viewer js_img_viewer">
410 <div class="img-viewer__wrap"> 410 <div class="img-viewer__wrap">
411 <button class="img-viewer__close js_img_viewer_close" type="button"> 411 <button class="img-viewer__close js_img_viewer_close" type="button">
412 <svg width="20" height="20"> 412 <svg width="20" height="20">
413 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 413 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
414 </svg> 414 </svg>
415 </button> 415 </button>
416 <div class="img-viewer__thumbs js_img_viewer_thumbs"> 416 <div class="img-viewer__thumbs js_img_viewer_thumbs">
417 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper"> 417 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper">
418 <div class="swiper-wrapper"></div> 418 <div class="swiper-wrapper"></div>
419 </div> 419 </div>
420 </div> 420 </div>
421 <div class="img-viewer__slider"> 421 <div class="img-viewer__slider">
422 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper"> 422 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper">
423 <div class="swiper-wrapper"></div> 423 <div class="swiper-wrapper"></div>
424 </div> 424 </div>
425 <div class="swiper-button-prev"> 425 <div class="swiper-button-prev">
426 <svg width="10" height="17"> 426 <svg width="10" height="17">
427 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> 427 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
428 </svg> 428 </svg>
429 </div> 429 </div>
430 <div class="swiper-button-next"> 430 <div class="swiper-button-next">
431 <svg width="10" height="17"> 431 <svg width="10" height="17">
432 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> 432 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
433 </svg> 433 </svg>
434 </div> 434 </div>
435 </div> 435 </div>
436 <div class="img-viewer__caption js_img_viewer_caption"></div> 436 <div class="img-viewer__caption js_img_viewer_caption"></div>
437 <button class="img-viewer__sizeoff js_img_viewer_close" type="button"> 437 <button class="img-viewer__sizeoff js_img_viewer_close" type="button">
438 <svg width="18" height="18"> 438 <svg width="18" height="18">
439 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use> 439 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use>
440 </svg> 440 </svg>
441 </button> 441 </button>
442 </div> 442 </div>
443 </div> 443 </div>
444 <div class="cookies js_cookies"> 444 <div class="cookies js_cookies">
445 <div class="container"> 445 <div class="container">
446 <div class="cookies__wrap"> 446 <div class="cookies__wrap">
447 <div class="cookies__top"> 447 <div class="cookies__top">
448 <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div> 448 <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div>
449 <div class="cookies__title">Cookies</div> 449 <div class="cookies__title">Cookies</div>
450 </div> 450 </div>
451 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p> 451 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p>
452 <div class="cookies__buttons"> 452 <div class="cookies__buttons">
453 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a> 453 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a>
454 </div> 454 </div>
455 </div> 455 </div>
456 </div> 456 </div>
457 </div> 457 </div>
458 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script> 458 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script>
459 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script> 459 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script>
460 <script src="{{ asset('js/main.js') }}"></script> 460 <script src="{{ asset('js/main_new.js') }}"></script>
461 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script> 461 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script>
462 <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script> 462 <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script>
463 @yield('custom_js') 463 @yield('custom_js')
464 @include('js.cookies_favorite') 464 @include('js.cookies_favorite')
465 </body> 465 </body>
466 </html> 466 </html>
467 467
resources/views/layout/site.blade.php
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> 2 <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
3 <head> 3 <head>
4 <meta charset="UTF-8"> 4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>{{$title}}</title> 7 <title>{{$title}}</title>
8 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin> 8 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin>
9 <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin> 9 <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin>
10 <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin> 10 <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin>
11 <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin> 11 <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin>
12 <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin> 12 <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin>
13 <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin> 13 <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin>
14 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin> 14 <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin>
15 <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}"> 15 <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}">
16 <link rel="stylesheet" href="{{ asset('css/style.css') }}"> 16 <link rel="stylesheet" href="{{ asset('css/style.css') }}">
17 </head> 17 </head>
18 <body> 18 <body>
19 <div class="spinner"></div> 19 <div class="spinner"></div>
20 <div class="wrapper"> 20 <div class="wrapper">
21 <header class="header js_header"> 21 <header class="header js_header">
22 <div class="container"> 22 <div class="container">
23 <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a> 23 <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a>
24 <nav class="header__nav nav"> 24 <nav class="header__nav nav">
25 <ul class="nav__list"> 25 <ul class="nav__list">
26 <li class="nav__item"><a class="nav__link" href="{{ route('catalog') }}">Каталог</a></li> 26 <li class="nav__item"><a class="nav__link" href="{{ route('catalog') }}">Каталог</a></li>
27 <li class="nav__item"><a class="nav__link" href="{{ route('about') }}">О компании</a></li> 27 <li class="nav__item"><a class="nav__link" href="{{ route('about') }}">О компании</a></li>
28 <li class="nav__item"><a class="nav__link" href="{{ route('contact') }}">Контакты</a></li> 28 <li class="nav__item"><a class="nav__link" href="{{ route('contact') }}">Контакты</a></li>
29 <li class="nav__item"><a class="nav__link nav__link-favorites" href="{{ route('favorite') }}">Избранное<span><?=\App\Classes\RusDate::count_item_fav();?></span></a></li> 29 <li class="nav__item"><a class="nav__link nav__link-favorites" href="{{ route('favorite') }}">Избранное<span><?=\App\Classes\RusDate::count_item_fav();?></span></a></li>
30 </ul> 30 </ul>
31 </nav> 31 </nav>
32 <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback"> 32 <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback">
33 <svg width="22" height="22"> 33 <svg width="22" height="22">
34 <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use> 34 <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use>
35 </svg></a> 35 </svg></a>
36 <div class="header__contacts"> 36 <div class="header__contacts">
37 <div class="header__col"><a class="header__contact" href="mailto:{{ $items_contact[0]->email }}">{{ $items_contact[0]->email }}</a></div> 37 <div class="header__col"><a class="header__contact" href="mailto:{{ $items_contact[0]->email }}">{{ $items_contact[0]->email }}</a></div>
38 <div class="header__col"><a class="header__contact" href="tel:{{ $items_contact[0]->email }}">{{ $items_contact[0]->telephone }}</a> 38 <div class="header__col"><a class="header__contact" href="tel:{{ $items_contact[0]->email }}">{{ $items_contact[0]->telephone }}</a>
39 <button class="header__btn-callback" type="button" data-btn="feedback">Обратный звонок</button> 39 <button class="header__btn-callback" type="button" data-btn="feedback">Обратный звонок</button>
40 </div> 40 </div>
41 </div> 41 </div>
42 <button class="header__burger js_header_burger" type="button">Меню 42 <button class="header__burger js_header_burger" type="button">Меню
43 <svg width="28" height="18"> 43 <svg width="28" height="18">
44 <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> 44 <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use>
45 </svg> 45 </svg>
46 </button> 46 </button>
47 </div> 47 </div>
48 <div class="menu js_menu"> 48 <div class="menu js_menu">
49 <div class="menu__wrap"> 49 <div class="menu__wrap">
50 <button class="menu__close js_menu_close" type="button">Меню 50 <button class="menu__close js_menu_close" type="button">Меню
51 <svg width="20" height="20"> 51 <svg width="20" height="20">
52 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> 52 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use>
53 </svg> 53 </svg>
54 </button> 54 </button>
55 <div class="menu__inner"> 55 <div class="menu__inner">
56 <nav class="menu__nav"> 56 <nav class="menu__nav">
57 <ul class="menu__list"> 57 <ul class="menu__list">
58 <li class="menu__item"><a class="menu__link" href="{{ route('about') }}">О компании</a></li> 58 <li class="menu__item"><a class="menu__link" href="{{ route('about') }}">О компании</a></li>
59 <li class="menu__item"><a class="menu__link menu__link-favorites" href="{{ route('favorite') }}">Избранное<span>5</span></a></li> 59 <li class="menu__item"><a class="menu__link menu__link-favorites" href="{{ route('favorite') }}">Избранное<span>5</span></a></li>
60 <li class="menu__item"><a class="menu__link" href="{{ route('catalog') }}">Каталог</a></li> 60 <li class="menu__item"><a class="menu__link" href="{{ route('catalog') }}">Каталог</a></li>
61 <li class="menu__item"><a class="menu__link" href="{{ route('news') }}">Новости</a></li> 61 <li class="menu__item"><a class="menu__link" href="{{ route('news') }}">Новости</a></li>
62 <li class="menu__item"><a class="menu__link" href="{{ route('contact') }}">Контакты</a></li> 62 <li class="menu__item"><a class="menu__link" href="{{ route('contact') }}">Контакты</a></li>
63 </ul> 63 </ul>
64 </nav> 64 </nav>
65 <div class="menu__contacts"><a class="menu__contact" href="mailto:info@renttorg.ru">E-MAIL<span>info@renttorg.ru</span></a><a class="menu__contact" href="tel:+79290127262">ТЕЛЕФОН<span>+7 (929) 012-72-62</span></a></div> 65 <div class="menu__contacts"><a class="menu__contact" href="mailto:info@renttorg.ru">E-MAIL<span>info@renttorg.ru</span></a><a class="menu__contact" href="tel:+79290127262">ТЕЛЕФОН<span>+7 (929) 012-72-62</span></a></div>
66 <div class="menu__social social"> 66 <div class="menu__social social">
67 <ul class="social__list"> 67 <ul class="social__list">
68 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li> 68 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li>
69 <li class="social__item"><a class="social__link" href="#" target="_blank"> 69 <li class="social__item"><a class="social__link" href="#" target="_blank">
70 <svg width="40" height="40"> 70 <svg width="40" height="40">
71 <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use> 71 <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use>
72 </svg></a></li> 72 </svg></a></li>
73 </ul> 73 </ul>
74 </div> 74 </div>
75 </div> 75 </div>
76 </div> 76 </div>
77 </div> 77 </div>
78 </div> 78 </div>
79 </div> 79 </div>
80 </header> 80 </header>
81 <main> 81 <main>
82 82
83 83
84 <!-- Фильтр --> 84 <!-- Фильтр -->
85 @yield('filter') 85 @yield('filter')
86 86
87 @if ($message = Session::get('success')) 87 @if ($message = Session::get('success'))
88 <section> 88 <section>
89 <div class="alert alert-success alert-dismissible mt-0" role="alert"> 89 <div class="alert alert-success alert-dismissible mt-0" role="alert">
90 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> 90 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть">
91 <span aria-hidden="true">&times;</span> 91 <span aria-hidden="true">&times;</span>
92 </button> 92 </button>
93 {{ $message }} 93 {{ $message }}
94 </div> 94 </div>
95 </section> 95 </section>
96 @endif 96 @endif
97 97
98 @if ($errors->any()) 98 @if ($errors->any())
99 <section> 99 <section>
100 <div class="alert alert-danger alert-dismissible mt-4" role="alert"> 100 <div class="alert alert-danger alert-dismissible mt-4" role="alert">
101 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> 101 <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть">
102 <span aria-hidden="true">&times;</span> 102 <span aria-hidden="true">&times;</span>
103 </button> 103 </button>
104 <ul class="mb-0"> 104 <ul class="mb-0">
105 @foreach ($errors->all() as $error) 105 @foreach ($errors->all() as $error)
106 <li>{{ $error }}</li> 106 <li>{{ $error }}</li>
107 @endforeach 107 @endforeach
108 </ul> 108 </ul>
109 </div> 109 </div>
110 </section> 110 </section>
111 @endif 111 @endif
112 <!-- Основной контент --> 112 <!-- Основной контент -->
113 @yield('content') 113 @yield('content')
114 114
115 </main> 115 </main>
116 116
117 <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})"> 117 <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})">
118 <div class="footer__buttons"> 118 <div class="footer__buttons">
119 <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button"> 119 <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button">
120 <svg width="30" height="32"> 120 <svg width="30" height="32">
121 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use> 121 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use>
122 </svg> 122 </svg>
123 </button> 123 </button>
124 <button class="footer__btn footer__btn-up js_btn_up" type="button"> 124 <button class="footer__btn footer__btn-up js_btn_up" type="button">
125 <svg width="19" height="11"> 125 <svg width="19" height="11">
126 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use> 126 <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use>
127 </svg> 127 </svg>
128 </button> 128 </button>
129 </div> 129 </div>
130 <!-- Форма обратной связи --> 130 <!-- Форма обратной связи -->
131 @yield('form_feedback') 131 @yield('form_feedback')
132 132
133 <!-- Сам футер мееню --> 133 <!-- Сам футер мееню -->
134 <div class="footer-middle"> 134 <div class="footer-middle">
135 <div class="container"> 135 <div class="container">
136 <div class="footer-middle__wrap"> 136 <div class="footer-middle__wrap">
137 <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a> 137 <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a>
138 <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p> 138 <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p>
139 <div class="footer-questions"> 139 <div class="footer-questions">
140 <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a> 140 <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a>
141 </div> 141 </div>
142 </div> 142 </div>
143 <div class="footer__col footer__col-menu js_footer_col"> 143 <div class="footer__col footer__col-menu js_footer_col">
144 <h3 class="footer__caption js_footer_caption">Меню</h3> 144 <h3 class="footer__caption js_footer_caption">Меню</h3>
145 <div class="footer__block js_footer_block"> 145 <div class="footer__block js_footer_block">
146 <ul class="footer__list"> 146 <ul class="footer__list">
147 <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li> 147 <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li>
148 <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li> 148 <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li>
149 <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li> 149 <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li>
150 <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li> 150 <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li>
151 <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li> 151 <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li>
152 </ul> 152 </ul>
153 153
154 </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a> 154 </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a>
155 </div> 155 </div>
156 <div class="footer__col js_footer_col"> 156 <div class="footer__col js_footer_col">
157 <h3 class="footer__caption js_footer_caption">Услуги</h3> 157 <h3 class="footer__caption js_footer_caption">Услуги</h3>
158 <div class="footer__block js_footer_block"> 158 <div class="footer__block js_footer_block">
159 <ul class="footer__list"> 159 <ul class="footer__list">
160 <li class="footer__item"><a class="footer__link" href="#">Продажа арендного бизнеса</a></li> 160 <li class="footer__item"><a class="footer__link" href="#">Продажа арендного бизнеса</a></li>
161 <li class="footer__item"><a class="footer__link" href="#">Арендованные помещения</a></li> 161 <li class="footer__item"><a class="footer__link" href="#">Арендованные помещения</a></li>
162 <li class="footer__item"><a class="footer__link" href="#">Свободные для аренды</a></li> 162 <li class="footer__item"><a class="footer__link" href="#">Свободные для аренды</a></li>
163 </ul> 163 </ul>
164 </div> 164 </div>
165 </div> 165 </div>
166 <div class="footer__col js_footer_col"> 166 <div class="footer__col js_footer_col">
167 <h3 class="footer__caption js_footer_caption">Страницы</h3> 167 <h3 class="footer__caption js_footer_caption">Страницы</h3>
168 <div class="footer__block js_footer_block"> 168 <div class="footer__block js_footer_block">
169 <ul class="footer__list"> 169 <ul class="footer__list">
170 <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Админка</a></li> 170 <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Админка</a></li>
171 <li class="footer__item"><a class="footer__link" href="{{ route('cookies') }}">Cookies</a></li> 171 <li class="footer__item"><a class="footer__link" href="{{ route('cookies') }}">Cookies</a></li>
172 172
173 <!--<li class="footer__item"><a class="footer__link" href="#">Новая Москва</a></li> 173 <!--<li class="footer__item"><a class="footer__link" href="#">Новая Москва</a></li>
174 <li class="footer__item"><a class="footer__link" href="#">Подмосковье</a></li> 174 <li class="footer__item"><a class="footer__link" href="#">Подмосковье</a></li>
175 <li class="footer__item"><a class="footer__link" href="#">Москва</a></li> 175 <li class="footer__item"><a class="footer__link" href="#">Москва</a></li>
176 <li class="footer__item"><a class="footer__link" href="#">Тип недвижимости</a></li>--> 176 <li class="footer__item"><a class="footer__link" href="#">Тип недвижимости</a></li>-->
177 </ul> 177 </ul>
178 </div> 178 </div>
179 </div> 179 </div>
180 <div class="footer__col footer__col-contacts"> 180 <div class="footer__col footer__col-contacts">
181 <h3 class="footer__caption js_footer_caption">Контакты</h3> 181 <h3 class="footer__caption js_footer_caption">Контакты</h3>
182 <ul class="footer__list"> 182 <ul class="footer__list">
183 <li class="footer__item"><a class="footer__link" href="#mailto:{{ $items_contact[0]->email }}">{{ $items_contact[0]->email }}</a></li> 183 <li class="footer__item"><a class="footer__link" href="#mailto:{{ $items_contact[0]->email }}">{{ $items_contact[0]->email }}</a></li>
184 <li class="footer__item"><a class="footer__link" href="tel:{{ $items_contact[0]->telephone }}">{{ $items_contact[0]->telephone }}</a></li> 184 <li class="footer__item"><a class="footer__link" href="tel:{{ $items_contact[0]->telephone }}">{{ $items_contact[0]->telephone }}</a></li>
185 </ul> 185 </ul>
186 <div class="footer__social social"> 186 <div class="footer__social social">
187 <ul class="social__list"> 187 <ul class="social__list">
188 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li> 188 <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li>
189 <li class="social__item"><a class="social__link" href="#" target="_blank"> 189 <li class="social__item"><a class="social__link" href="#" target="_blank">
190 <svg width="40" height="40"> 190 <svg width="40" height="40">
191 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use> 191 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use>
192 </svg></a></li> 192 </svg></a></li>
193 </ul> 193 </ul>
194 </div> 194 </div>
195 </div> 195 </div>
196 </div> 196 </div>
197 </div> 197 </div>
198 </div> 198 </div>
199 199
200 <div class="footer-bottom"> 200 <div class="footer-bottom">
201 <div class="container"> 201 <div class="container">
202 <div class="footer-bottom__wrap"> 202 <div class="footer-bottom__wrap">
203 <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a> 203 <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a>
204 </div> 204 </div>
205 </div> 205 </div>
206 </div> 206 </div>
207 </footer> 207 </footer>
208 </div> 208 </div>
209 209
210 <!-- Вплывающие окна --> 210 <!-- Вплывающие окна -->
211 <div class="popup popup-feedback" data-popup="feedback"> 211 <div class="popup popup-feedback" data-popup="feedback">
212 <div class="popup__wrap"> 212 <div class="popup__wrap">
213 <button class="popup__close js_popup_close" type="button"> 213 <button class="popup__close js_popup_close" type="button">
214 <svg width="20" height="20"> 214 <svg width="20" height="20">
215 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 215 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
216 </svg> 216 </svg>
217 </button> 217 </button>
218 <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST"> 218 <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST">
219 @csrf 219 @csrf
220 <div class="popup-feedback__title">Как с вами связаться</div> 220 <div class="popup-feedback__title">Как с вами связаться</div>
221 <div class="popup-feedback__fields"> 221 <div class="popup-feedback__fields">
222 <label class="popup-feedback__field field"> 222 <label class="popup-feedback__field field">
223 <input type="text" placeholder="Имя" name="NameUser"> 223 <input type="text" placeholder="Имя" name="NameUser">
224 </label> 224 </label>
225 <label class="popup-feedback__field field"> 225 <label class="popup-feedback__field field">
226 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> 226 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser">
227 </label> 227 </label>
228 </div> 228 </div>
229 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 229 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
230 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> 230 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p>
231 </form> 231 </form>
232 </div> 232 </div>
233 </div> 233 </div>
234 <div class="popup popup-feedback" data-popup="viewing"> 234 <div class="popup popup-feedback" data-popup="viewing">
235 <div class="popup__wrap"> 235 <div class="popup__wrap">
236 <button class="popup__close js_popup_close" type="button"> 236 <button class="popup__close js_popup_close" type="button">
237 <svg width="20" height="20"> 237 <svg width="20" height="20">
238 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 238 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
239 </svg> 239 </svg>
240 </button> 240 </button>
241 <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST"> 241 <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST">
242 @csrf 242 @csrf
243 <div class="popup-feedback__title">Записаться на просмотр</div> 243 <div class="popup-feedback__title">Записаться на просмотр</div>
244 <div class="popup-feedback__fields"> 244 <div class="popup-feedback__fields">
245 <label class="popup-feedback__field field"> 245 <label class="popup-feedback__field field">
246 <input type="text" placeholder="Имя" name="NameUser"> 246 <input type="text" placeholder="Имя" name="NameUser">
247 </label> 247 </label>
248 <label class="popup-feedback__field field"> 248 <label class="popup-feedback__field field">
249 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> 249 <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser">
250 </label> 250 </label>
251 </div> 251 </div>
252 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 252 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
253 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 253 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
254 </form> 254 </form>
255 </div> 255 </div>
256 </div> 256 </div>
257 <div class="popup popup-success" data-popup="success"> 257 <div class="popup popup-success" data-popup="success">
258 <div class="popup__wrap"> 258 <div class="popup__wrap">
259 <button class="popup__close js_popup_close" type="button"> 259 <button class="popup__close js_popup_close" type="button">
260 <svg width="20" height="20"> 260 <svg width="20" height="20">
261 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> 261 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use>
262 </svg> 262 </svg>
263 </button> 263 </button>
264 <div class="popup-success__inner"> 264 <div class="popup-success__inner">
265 <div class="popup-success__logo"> 265 <div class="popup-success__logo">
266 <svg width="48" height="39"> 266 <svg width="48" height="39">
267 <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use> 267 <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use>
268 </svg> 268 </svg>
269 </div> 269 </div>
270 <div class="popup-success__title">Спасибо за заявку</div> 270 <div class="popup-success__title">Спасибо за заявку</div>
271 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p> 271 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p>
272 </div> 272 </div>
273 </div> 273 </div>
274 </div> 274 </div>
275 <div class="popup popup-feedback" data-popup="sending"> 275 <div class="popup popup-feedback" data-popup="sending">
276 <div class="popup__wrap"> 276 <div class="popup__wrap">
277 <button class="popup__close js_popup_close" type="button"> 277 <button class="popup__close js_popup_close" type="button">
278 <svg width="20" height="20"> 278 <svg width="20" height="20">
279 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 279 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
280 </svg> 280 </svg>
281 </button> 281 </button>
282 <form class="popup-feedback__form js_popup_sending_form_" action="{{ route('email_form') }}" method="POST"> 282 <form class="popup-feedback__form js_popup_sending_form_" action="{{ route('email_form') }}" method="POST">
283 @csrf 283 @csrf
284 <div class="popup-feedback__title">Отправить на почту</div> 284 <div class="popup-feedback__title">Отправить на почту</div>
285 <div class="popup-feedback__fields"> 285 <div class="popup-feedback__fields">
286 <label class="popup-feedback__field field"> 286 <label class="popup-feedback__field field">
287 <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser"> 287 <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser">
288 </label> 288 </label>
289 </div> 289 </div>
290 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 290 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
291 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> 291 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p>
292 </form> 292 </form>
293 </div> 293 </div>
294 </div> 294 </div>
295 <div class="contact-us js_contact_us"> 295 <div class="contact-us js_contact_us">
296 <div class="contact-us__top"> 296 <div class="contact-us__top">
297 <button class="contact-us__close js_contact_us_close" type="button"> 297 <button class="contact-us__close js_contact_us_close" type="button">
298 <svg width="20" height="20"> 298 <svg width="20" height="20">
299 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 299 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
300 </svg> 300 </svg>
301 </button> 301 </button>
302 <div class="contact-us__title">Свяжитесь с нами</div> 302 <div class="contact-us__title">Свяжитесь с нами</div>
303 </div> 303 </div>
304 <div class="contact-us__body"> 304 <div class="contact-us__body">
305 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback"> 305 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback">
306 <div class="contact-us-item__icon"> 306 <div class="contact-us-item__icon">
307 <svg width="34" height="34"> 307 <svg width="34" height="34">
308 <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use> 308 <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use>
309 </svg> 309 </svg>
310 </div> 310 </div>
311 <div class="contact-us-item__name">Позвонить</div></a> 311 <div class="contact-us-item__name">Позвонить</div></a>
312 312
313 <a class="contact-us-item js_contact_us_close" data-btn="sending"> 313 <a class="contact-us-item js_contact_us_close" data-btn="sending">
314 <div class="contact-us-item__icon"> 314 <div class="contact-us-item__icon">
315 <svg width="44" height="44"> 315 <svg width="44" height="44">
316 <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use> 316 <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use>
317 </svg> 317 </svg>
318 </div> 318 </div>
319 <div class="contact-us-item__name">Написать</div></a> 319 <div class="contact-us-item__name">Написать</div></a>
320 320
321 <a class="contact-us-item js_contact_us_close" > 321 <a class="contact-us-item js_contact_us_close" >
322 <div class="contact-us-item__icon"> 322 <div class="contact-us-item__icon">
323 <svg width="34" height="34"> 323 <svg width="34" height="34">
324 <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use> 324 <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use>
325 </svg> 325 </svg>
326 </div> 326 </div>
327 <div class="contact-us-item__name">Онлайн-чат</div></a></div> 327 <div class="contact-us-item__name">Онлайн-чат</div></a></div>
328 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 328 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
329 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div> 329 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div>
330 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 330 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
331 <div class="contact-us-social__icon contact-us-social__icon-wa"> 331 <div class="contact-us-social__icon contact-us-social__icon-wa">
332 <svg width="31" height="31"> 332 <svg width="31" height="31">
333 <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use> 333 <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use>
334 </svg> 334 </svg>
335 </div> 335 </div>
336 <div class="contact-us-social__name">WhatsApp</div></a></div> 336 <div class="contact-us-social__name">WhatsApp</div></a></div>
337 </div> 337 </div>
338 </div> 338 </div>
339 339
340 <!-- Всплывашка этажа и объекта 340 <!-- Всплывашка этажа и объекта
341 <div class="offer-side-popup" data-popup="offer-side-popup"> 341 <div class="offer-side-popup" data-popup="offer-side-popup">
342 <div class="offer-side-popup__wrap"> 342 <div class="offer-side-popup__wrap">
343 <button class="offer-side-popup__close js_popup_close" type="button"> 343 <button class="offer-side-popup__close js_popup_close" type="button">
344 <svg width="20" height="20"> 344 <svg width="20" height="20">
345 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 345 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
346 </svg> 346 </svg>
347 </button> 347 </button>
348 <div class="offer-side-popup__cnt"> 348 <div class="offer-side-popup__cnt">
349 <div class="offer-side-popup__item js_offer_side_popup_item active" data-item="1"><img src="{{ asset('images/offer-side-item-img-1.jpg')}}" alt="План объекта"></div> 349 <div class="offer-side-popup__item js_offer_side_popup_item active" data-item="1"><img src="{{ asset('images/offer-side-item-img-1.jpg')}}" alt="План объекта"></div>
350 <div class="offer-side-popup__item js_offer_side_popup_item" data-item="2"><img src="{{ asset('images/offer-side-item-img-2.jpg')}}" alt="План этажа"></div> 350 <div class="offer-side-popup__item js_offer_side_popup_item" data-item="2"><img src="{{ asset('images/offer-side-item-img-2.jpg')}}" alt="План этажа"></div>
351 </div> 351 </div>
352 <div class="offer-side-popup__tabs"> 352 <div class="offer-side-popup__tabs">
353 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button> 353 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button>
354 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button> 354 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button>
355 </div> 355 </div>
356 <button class="offer-side-popup__sizeoff js_popup_close" type="button"> 356 <button class="offer-side-popup__sizeoff js_popup_close" type="button">
357 <svg width="18" height="18"> 357 <svg width="18" height="18">
358 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use> 358 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use>
359 </svg> 359 </svg>
360 </button> 360 </button>
361 </div> 361 </div>
362 </div> 362 </div>
363 --> 363 -->
364 364
365 <div class="img-viewer js_img_viewer"> 365 <div class="img-viewer js_img_viewer">
366 <div class="img-viewer__wrap"> 366 <div class="img-viewer__wrap">
367 <button class="img-viewer__close js_img_viewer_close" type="button"> 367 <button class="img-viewer__close js_img_viewer_close" type="button">
368 <svg width="20" height="20"> 368 <svg width="20" height="20">
369 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> 369 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
370 </svg> 370 </svg>
371 </button> 371 </button>
372 <div class="img-viewer__thumbs js_img_viewer_thumbs"> 372 <div class="img-viewer__thumbs js_img_viewer_thumbs">
373 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper"> 373 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper">
374 <div class="swiper-wrapper"></div> 374 <div class="swiper-wrapper"></div>
375 </div> 375 </div>
376 </div> 376 </div>
377 <div class="img-viewer__slider"> 377 <div class="img-viewer__slider">
378 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper"> 378 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper">
379 <div class="swiper-wrapper"></div> 379 <div class="swiper-wrapper"></div>
380 </div> 380 </div>
381 <div class="swiper-button-prev"> 381 <div class="swiper-button-prev">
382 <svg width="10" height="17"> 382 <svg width="10" height="17">
383 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> 383 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
384 </svg> 384 </svg>
385 </div> 385 </div>
386 <div class="swiper-button-next"> 386 <div class="swiper-button-next">
387 <svg width="10" height="17"> 387 <svg width="10" height="17">
388 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> 388 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
389 </svg> 389 </svg>
390 </div> 390 </div>
391 </div> 391 </div>
392 <div class="img-viewer__caption js_img_viewer_caption"></div> 392 <div class="img-viewer__caption js_img_viewer_caption"></div>
393 <button class="img-viewer__sizeoff js_img_viewer_close" type="button"> 393 <button class="img-viewer__sizeoff js_img_viewer_close" type="button">
394 <svg width="18" height="18"> 394 <svg width="18" height="18">
395 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use> 395 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use>
396 </svg> 396 </svg>
397 </button> 397 </button>
398 </div> 398 </div>
399 </div> 399 </div>
400 <div class="cookies js_cookies"> 400 <div class="cookies js_cookies">
401 <div class="container"> 401 <div class="container">
402 <div class="cookies__wrap"> 402 <div class="cookies__wrap">
403 <div class="cookies__top"> 403 <div class="cookies__top">
404 <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div> 404 <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div>
405 <div class="cookies__title">Cookies</div> 405 <div class="cookies__title">Cookies</div>
406 </div> 406 </div>
407 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p> 407 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p>
408 <div class="cookies__buttons"> 408 <div class="cookies__buttons">
409 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a> 409 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a>
410 </div> 410 </div>
411 </div> 411 </div>
412 </div> 412 </div>
413 </div> 413 </div>
414 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script> 414 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script>
415 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script> 415 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script>
416 <script src="{{ asset('js/main.js') }}"></script> 416 <script src="{{ asset('js/main_new.js') }}"></script>
417 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script> 417 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script>
418 <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script> 418 <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script>
419 @yield('custom_js') 419 @yield('custom_js')
420 @include('js.cookies_favorite') 420 @include('js.cookies_favorite')
421 </body> 421 </body>
422 </html> 422 </html>
423 423
resources/views/mapsobj.blade.php
1 @extends('layout.site', ['title' => 'Объекты на карте RentTorg']) 1 @extends('layout.site', ['title' => 'Объекты на карте RentTorg'])
2 2
3 @section('filter') 3 @section('filter')
4 @include('part.filter.mapsobj') 4 @include('part.filter.mapsobj')
5 @endsection 5 @endsection
6 6
7 @section('custom_js') 7 @section('custom_js')
8 @include('js.filter_value') 8 @include('js.filter_value')
9 <script>
10 function 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 @if ($areas->count())
35 @foreach ($areas as $area)
36 [{{ $area->coord_x }}, {{$area->coord_y}}],
37 @endforeach
38 @endif
39 // [55.867783219108354, 37.392867499999916],
40 // [55.728043075486504, 37.73937949999994],
41 // [55.72624100423305, 37.476078499999964],
42 // [55.80751105044832, 37.449622999999974],
43 // [55.601783098948836, 37.36700499999998],
44 // [55.86086502152225, 37.540348999999964],
45 // [55.784961528728715, 37.56188599999996],
46 // [55.63910010399773, 37.319407999999996],
47 // [55.55819256767507, 37.55711549999994],
48 // [55.79829252928473, 37.52063549999999],
49 ];
50
51 for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию;
52 collection.add(new ymaps.Placemark(collectionCoords[i]));
53 collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent';
54 }
55
56 myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту;
57
58 collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета;
59 collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки;
60 collection.options.set('iconImageSize', [52, 67]); // Размеры метки;
61 collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
62 collection.options.set('iconContentOffset', [0, 17]);
63 collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
64
65 const pageMapBar = document.querySelector('.js_page_map_bar');
66 const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn');
67 const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list');
68 const pageMapBarCards = pageMapBar.querySelectorAll('.card-news');
69
70 const showCard = (i) => {
71
72 pageMapBarCards.forEach((card, k) => {
73
74 card.classList.remove('active');
75
76 if (i == k) {
77 card.classList.add('active');
78 }
79
80 });
81
82 };
83
84 const hidecard = () => {
85
86 pageMapBarCards.forEach(card => {
87 card.classList.remove('active');
88 });
89
90 }
91
92 let pageMapBarItems;
93
94 pageMapBarBtn.addEventListener('click', () => {
95 pageMapBar.classList.toggle('active');
96 });
97
98 pageMapBarList.addEventListener('click', (e) => {
99
100 if (e.target.closest('.page-map-bar__item')) {
101
102 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
103
104 pageMapBarItems.forEach((item, i) => {
105
106 if (e.target == item && e.target.classList.contains('active')) {
107
108 item.classList.remove('active');
109
110 hidecard();
111
112 } else if (e.target == item) {
113
114 pageMapBarItems.forEach(item => {
115 item.classList.remove('active');
116 });
117
118 item.classList.add('active');
119
120 let offsetCoords = collection.get(i).geometry.getCoordinates();
121
122 offsetCoords = [
123 offsetCoords[0] - 0.0025,
124 offsetCoords[1]
125 ];
126
127 myMap.setZoom(16);
128 // myMap.setCenter(collection.get(i).geometry.getCoordinates());
129 myMap.setCenter(offsetCoords);
130
131 showCard(i);
132
133 }
134
135 });
136 }
137
138 });
139
140 collection.events.add('click', function (e) {
141
142 for (let i = 0, l = collection.getLength(); i < l; i++) {
143
144 if (e.get('target') == collection.get(i)) {
145
146 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
147
148 pageMapBarItems.forEach((item) => {
149 pageMapBar.classList.add('active');
150 item.classList.remove('active');
151 });
152
153 pageMapBarItems[i].classList.add('active');
154
155 showCard(i);
156
157 }
158
159 }
160
161 });
162
163 }
164
165 }
166
167 }
168
169 setGeneralMap();
170 </script>
9 @endsection 171 @endsection
10 172
11 @section('content') 173 @section('content')
12 <section class="page-map"> 174 <section class="page-map">
13 <div class="page-map__wrap"> 175 <div class="page-map__wrap">
14 <h2 class="visually-hidden">Карта</h2> 176 <h2 class="visually-hidden">Карта</h2>
15 <div class="page-map__map" id="general-map"></div> 177 <div class="page-map__map" id="general-map"></div>
16 <div class="container"> 178 <div class="container">
17 <div class="page-map__inner"> 179 <div class="page-map__inner">
18 <div class="page-map-bar js_page_map_bar active"> 180 <div class="page-map-bar js_page_map_bar active">
19 <div class="page-map-bar__top">Все объекты 181 <div class="page-map-bar__top">Все объекты
20 <button class="page-map-bar__close js_page_map_bar_btn" type="button"> 182 <button class="page-map-bar__close js_page_map_bar_btn" type="button">
21 <svg width="20" height="20"> 183 <svg width="20" height="20">
22 <use xlink:href="images/sprite.svg#popup-close"></use> 184 <use xlink:href="images/sprite.svg#popup-close"></use>
23 </svg> 185 </svg>
24 </button> 186 </button>
25 </div> 187 </div>
26 <ul class="page-map-bar__list js_page_map_bar_list"> 188 <ul class="page-map-bar__list js_page_map_bar_list">
27 <li class="page-map-bar__item">ЖК Большое Путилково</li> 189 @if ($areas->count())
190 @foreach ($areas as $area)
191 <li class="page-map-bar__item">{{ $area->name_area }}</li>
192 @endforeach
193 @endif
194 <!--<li class="page-map-bar__item">ЖК Большое Путилково</li>
28 <li class="page-map-bar__item">ЖК Среда</li> 195 <li class="page-map-bar__item">ЖК Среда</li>
29 <li class="page-map-bar__item">ЖК Квартал Триумфальный</li> 196 <li class="page-map-bar__item">ЖК Квартал Триумфальный</li>
30 <li class="page-map-bar__item">ЖК Алые Паруса</li> 197 <li class="page-map-bar__item">ЖК Алые Паруса</li>
31 <li class="page-map-bar__item">ЖК Первый Московский</li> 198 <li class="page-map-bar__item">ЖК Первый Московский</li>
32 <li class="page-map-bar__item">ЖК Ильменский 17</li> 199 <li class="page-map-bar__item">ЖК Ильменский 17</li>
33 <li class="page-map-bar__item">ЖК Царская Площадь</li> 200 <li class="page-map-bar__item">ЖК Царская Площадь</li>
34 <li class="page-map-bar__item">ЖК Переделкино Ближнее</li> 201 <li class="page-map-bar__item">ЖК Переделкино Ближнее</li>
35 <li class="page-map-bar__item">ЖК Этолон Cити</li> 202 <li class="page-map-bar__item">ЖК Этолон Cити</li>
36 <li class="page-map-bar__item">ЖК Триумф Палас</li> 203 <li class="page-map-bar__item">ЖК Триумф Палас</li>-->
37 </ul> 204 </ul>
38 <div class="card-news"> 205 @if ($areas->count())
206 @foreach ($areas as $area)
207 <div class="card-news">
208 <div class="card-news__top"><img src="{{ asset(Storage::url($area->foto_main)) }}" alt="Превью по {{$area->name_area}}" loading="lazy">
209 <div class="card-news__date"><span>{{ $area->name_area }}</span><span></span></div>
210 </div>
211 <div class="card-news__cnt">
212 <p class="card-news__descr">{{ $area->description }}</p>
213 <a class="card-news__link" href="{{ route('complex', ['area' => $area->id]) }}">Подробнее
214 <svg width="17" height="12">
215 <use xlink:href="{{ asset('images/sprite.svg#card-news-link-arrow') }}"></use>
216 </svg>
217 </a>
218 </div>
219 </div>
220 @endforeach
221 @endif
222 <!--<div class="card-news">
39 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 223 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
40 <div class="card-news__date"><span>ЖК Большое Путилково</span><span></span></div> 224 <div class="card-news__date"><span>ЖК Большое Путилково</span><span></span></div>
41 </div> 225 </div>
42 <div class="card-news__cnt"> 226 <div class="card-news__cnt">
43 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 227 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
44 <svg width="17" height="12"> 228 <svg width="17" height="12">
45 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 229 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
46 </svg></a> 230 </svg></a>
47 </div> 231 </div>
48 </div> 232 </div>
49 <div class="card-news"> 233 <div class="card-news">
50 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 234 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
51 <div class="card-news__date"><span>ЖК Среда</span><span></span></div> 235 <div class="card-news__date"><span>ЖК Среда</span><span></span></div>
52 </div> 236 </div>
53 <div class="card-news__cnt"> 237 <div class="card-news__cnt">
54 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 238 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
55 <svg width="17" height="12"> 239 <svg width="17" height="12">
56 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 240 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
57 </svg></a> 241 </svg></a>
58 </div> 242 </div>
59 </div> 243 </div>
60 <div class="card-news"> 244 <div class="card-news">
61 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 245 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
62 <div class="card-news__date"><span>ЖК Квартал Триумфальный</span><span></span></div> 246 <div class="card-news__date"><span>ЖК Квартал Триумфальный</span><span></span></div>
63 </div> 247 </div>
64 <div class="card-news__cnt"> 248 <div class="card-news__cnt">
65 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 249 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
66 <svg width="17" height="12"> 250 <svg width="17" height="12">
67 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 251 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
68 </svg></a> 252 </svg></a>
69 </div> 253 </div>
70 </div> 254 </div>
71 <div class="card-news"> 255 <div class="card-news">
72 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 256 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
73 <div class="card-news__date"><span>ЖК Алые Паруса</span><span></span></div> 257 <div class="card-news__date"><span>ЖК Алые Паруса</span><span></span></div>
74 </div> 258 </div>
75 <div class="card-news__cnt"> 259 <div class="card-news__cnt">
76 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 260 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
77 <svg width="17" height="12"> 261 <svg width="17" height="12">
78 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 262 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
79 </svg></a> 263 </svg></a>
80 </div> 264 </div>
81 </div> 265 </div>
82 <div class="card-news"> 266 <div class="card-news">
83 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 267 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
84 <div class="card-news__date"><span>ЖК Первый Московский</span><span></span></div> 268 <div class="card-news__date"><span>ЖК Первый Московский</span><span></span></div>
85 </div> 269 </div>
86 <div class="card-news__cnt"> 270 <div class="card-news__cnt">
87 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 271 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
88 <svg width="17" height="12"> 272 <svg width="17" height="12">
89 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 273 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
90 </svg></a> 274 </svg></a>
91 </div> 275 </div>
92 </div> 276 </div>
93 <div class="card-news"> 277 <div class="card-news">
94 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 278 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
95 <div class="card-news__date"><span>ЖК Ильменский 17</span><span></span></div> 279 <div class="card-news__date"><span>ЖК Ильменский 17</span><span></span></div>
96 </div> 280 </div>
97 <div class="card-news__cnt"> 281 <div class="card-news__cnt">
98 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 282 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
99 <svg width="17" height="12"> 283 <svg width="17" height="12">
100 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 284 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
101 </svg></a> 285 </svg></a>
102 </div> 286 </div>
103 </div> 287 </div>
104 <div class="card-news"> 288 <div class="card-news">
105 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 289 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
106 <div class="card-news__date"><span>ЖК Царская Площадь</span><span></span></div> 290 <div class="card-news__date"><span>ЖК Царская Площадь</span><span></span></div>
107 </div> 291 </div>
108 <div class="card-news__cnt"> 292 <div class="card-news__cnt">
109 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 293 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
110 <svg width="17" height="12"> 294 <svg width="17" height="12">
111 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 295 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
112 </svg></a> 296 </svg></a>
113 </div> 297 </div>
114 </div> 298 </div>
115 <div class="card-news"> 299 <div class="card-news">
116 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 300 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
117 <div class="card-news__date"><span>ЖК Переделкино Ближнее</span><span></span></div> 301 <div class="card-news__date"><span>ЖК Переделкино Ближнее</span><span></span></div>
118 </div> 302 </div>
119 <div class="card-news__cnt"> 303 <div class="card-news__cnt">
120 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 304 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
121 <svg width="17" height="12"> 305 <svg width="17" height="12">
122 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 306 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
123 </svg></a> 307 </svg></a>
124 </div> 308 </div>
125 </div> 309 </div>
126 <div class="card-news"> 310 <div class="card-news">
127 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 311 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
128 <div class="card-news__date"><span>ЖК Этолон Cити</span><span></span></div> 312 <div class="card-news__date"><span>ЖК Этолон Cити</span><span></span></div>
129 </div> 313 </div>
130 <div class="card-news__cnt"> 314 <div class="card-news__cnt">
131 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 315 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
132 <svg width="17" height="12"> 316 <svg width="17" height="12">
133 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 317 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
134 </svg></a> 318 </svg></a>
135 </div> 319 </div>
136 </div> 320 </div>
137 <div class="card-news"> 321 <div class="card-news">
138 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 322 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
139 <div class="card-news__date"><span>ЖК Триумф Палас</span><span></span></div> 323 <div class="card-news__date"><span>ЖК Триумф Палас</span><span></span></div>
140 </div> 324 </div>
141 <div class="card-news__cnt"> 325 <div class="card-news__cnt">
142 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее 326 <p class="card-news__descr">Помещение расположено на первой фасадной линии Лесной улицы. В нескольких минутах пешком от метро «Белорусская», Бизнес центра класса «А» «Белая площадь», напротив гостиницы «Holiday Inn» и рядом с фудмоллом</p><a class="card-news__link" href="#">Подробнее
143 <svg width="17" height="12"> 327 <svg width="17" height="12">
144 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 328 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
145 </svg></a> 329 </svg></a>
146 </div> 330 </div>
147 </div> 331 </div>-->
148 </div> 332 </div>
149 </div> 333 </div>
150 </div> 334 </div>
151 </div> 335 </div>
152 </section> 336 </section>
153 @endsection 337 @endsection
154 338
155 @section('form_feedback') 339 @section('form_feedback')
156 <!-- Форма обратной связи --> 340 <!-- Форма обратной связи -->
157 @include('form.form_feedback') 341 @include('form.form_feedback')
158 @endsection 342 @endsection
159 343
160 344