Commit 3646d2a475cf69a5f6e1594c4a864b7a9ff5e6ea

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

Механизм избранные карточки и форма обратной связи

Showing 20 changed files with 1987 additions and 137 deletions Inline Diff

app/Classes/RusDate.php
1 <?php 1 <?php
2 2
3 3
4 namespace App\Classes; 4 namespace App\Classes;
5 5
6 6
7 class RusDate 7 class RusDate
8 { 8 {
9 public static function russian_date($date = null){ 9 public static function russian_date($date = null){
10 $date=explode(".", date("d.m.Y")); 10 $date=explode(".", date("d.m.Y"));
11 $m = ""; 11 $m = "";
12 12
13 switch ($date[1]){ 13 switch ($date[1]){
14 case 1: $m = 'января'; break; 14 case 1: $m = 'января'; break;
15 case 2: $m = 'февраля'; break; 15 case 2: $m = 'февраля'; break;
16 case 3: $m = 'марта'; break; 16 case 3: $m = 'марта'; break;
17 case 4: $m = 'апреля'; break; 17 case 4: $m = 'апреля'; break;
18 case 5: $m = 'мая'; break; 18 case 5: $m = 'мая'; break;
19 case 6: $m = 'июня'; break; 19 case 6: $m = 'июня'; break;
20 case 7: $m = 'июля'; break; 20 case 7: $m = 'июля'; break;
21 case 8: $m = 'августа'; break; 21 case 8: $m = 'августа'; break;
22 case 9: $m = 'сентября'; break; 22 case 9: $m = 'сентября'; break;
23 case 10: $m = 'октября'; break; 23 case 10: $m = 'октября'; break;
24 case 11: $m = 'ноября'; break; 24 case 11: $m = 'ноября'; break;
25 case 12: $m = 'декабря'; break; 25 case 12: $m = 'декабря'; break;
26 } 26 }
27 return $date[0].' '.$m.' '.$date[2]; 27 return $date[0].' '.$m.' '.$date[2];
28 } 28 }
29 29
30 public static function russian_month($month) { 30 public static function russian_month($month) {
31 switch ($month){ 31 switch ($month){
32 case 1: $m = 'января'; break; 32 case 1: $m = 'января'; break;
33 case 2: $m = 'февраля'; break; 33 case 2: $m = 'февраля'; break;
34 case 3: $m = 'марта'; break; 34 case 3: $m = 'марта'; break;
35 case 4: $m = 'апреля'; break; 35 case 4: $m = 'апреля'; break;
36 case 5: $m = 'мая'; break; 36 case 5: $m = 'мая'; break;
37 case 6: $m = 'июня'; break; 37 case 6: $m = 'июня'; break;
38 case 7: $m = 'июля'; break; 38 case 7: $m = 'июля'; break;
39 case 8: $m = 'августа'; break; 39 case 8: $m = 'августа'; break;
40 case 9: $m = 'сентября'; break; 40 case 9: $m = 'сентября'; break;
41 case 10: $m = 'октября'; break; 41 case 10: $m = 'октября'; break;
42 case 11: $m = 'ноября'; break; 42 case 11: $m = 'ноября'; break;
43 case 12: $m = 'декабря'; break; 43 case 12: $m = 'декабря'; break;
44 } 44 }
45 return $m; 45 return $m;
46 } 46 }
47
48 public static function selected_item($item) {
49 $Str = json_decode($_COOKIE['favorite_house'], true);
50 //$Arr = explode(",", $Str);
51 if (in_array($item, $Str))
52 return " active ";
53 else
54 return "";
55
56 }
57
58 public static function count_item_fav() {
59 $Arr = json_decode($_COOKIE['favorite_house'], true);
60 return count($Arr);
61 }
62
63 public static function clear_items() {
64 unset($_COOKIE['favorite_house']);
65 //print_r($_COOKIE['arr']);
66 }
47 } 67 }
48 68
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\Models\Area; 5 use App\Models\Area;
6 use App\Models\format_area; 6 use App\Models\format_area;
7 use App\Models\House; 7 use App\Models\House;
8 use App\Models\News; 8 use App\Models\News;
9 use App\Models\Partners; 9 use App\Models\Partners;
10 use App\Models\type_area; 10 use App\Models\type_area;
11 use Illuminate\Http\Request; 11 use Illuminate\Http\Request;
12 use App\Classes\RusDate; 12 use App\Classes\RusDate;
13 use PhpParser\Node\Stmt\Switch_; 13 use PhpParser\Node\Stmt\Switch_;
14 use Illuminate\Support\Facades\Response; 14 use Illuminate\Support\Facades\Response;
15 15
16 class MainController extends Controller 16 class MainController extends Controller
17 { 17 {
18 /* 18 /*
19 * Главная страница проекта 19 * Главная страница проекта
20 */ 20 */
21 public function index() { 21 public function index() {
22 $houses = House::with('areas')->orderByDesc('created_at')->limit(8)->get(); 22 $houses = House::with('areas')->orderByDesc('created_at')->limit(8)->get();
23 $news = News::query()->orderByDesc('created_at')->limit(8)->get(); 23 $news = News::query()->orderByDesc('created_at')->limit(8)->get();
24 $partners = Partners::query()->limit(18)->get(); 24 $partners = Partners::query()->limit(18)->get();
25 return view('index', compact('houses', 'news', 'partners')); 25 return view('index', compact('houses', 'news', 'partners'));
26 } 26 }
27 27
28 /* 28 /*
29 * Фильтр ajax в каталоге 29 * Фильтр ajax в каталоге
30 */ 30 */
31 public function catalog_ajax_filter(Request $request) { 31 public function catalog_ajax_filter(Request $request) {
32 $Res = Array(); 32 $Res = Array();
33 if (!empty($request->area)) { 33 if (!empty($request->area)) {
34 $area_table = Area::where('id', '=', $request->area)->get(); 34 $area_table = Area::where('id', '=', $request->area)->get();
35 $Res[] = $area_table[0]->name_area; 35 $Res[] = $area_table[0]->name_area;
36 } else { 36 } else {
37 $Res[] = "Все объекты"; 37 $Res[] = "Все объекты";
38 } 38 }
39 39
40 if (!empty($request->type_area)) { 40 if (!empty($request->type_area)) {
41 $type_area_table = type_area::where('id', '=', $request->type_area)->get(); 41 $type_area_table = type_area::where('id', '=', $request->type_area)->get();
42 $Res[] = $type_area_table[0]->name_type; 42 $Res[] = $type_area_table[0]->name_type;
43 } else { 43 } else {
44 $Res[] = "Тип недвижимости"; 44 $Res[] = "Тип недвижимости";
45 } 45 }
46 46
47 if (!empty($request->format_area)) { 47 if (!empty($request->format_area)) {
48 $format_area_table = format_area::where('id', '=', $request->format_area)->get(); 48 $format_area_table = format_area::where('id', '=', $request->format_area)->get();
49 $Res[] = $format_area_table[0]->name_format; 49 $Res[] = $format_area_table[0]->name_format;
50 } else { 50 } else {
51 $Res[] = "Формат недвижимости"; 51 $Res[] = "Формат недвижимости";
52 } 52 }
53 53
54 return json_encode($Res); 54 return json_encode($Res);
55 } 55 }
56 56
57 /* 57 /*
58 * Страница ЖК 58 * Страница ЖК
59 */ 59 */
60 public function Complex(Area $area, Request $request) { 60 public function Complex(Area $area, Request $request) {
61 //////////раздел аренда 61 //////////раздел аренда
62 $house_arenda = House::with('areas')-> 62 $house_arenda = House::with('areas')->
63 where('area_id', '=', $area->id)-> 63 where('area_id', '=', $area->id)->
64 where('format_house', '=', 'Аренда'); 64 where('format_house', '=', 'Аренда');
65 65
66 if ($request->view == 'arenda') { 66 if ($request->view == 'arenda') {
67 switch ($request->sort_price) { 67 switch ($request->sort_price) {
68 case 1: $house_arenda = $house_arenda->orderBy('price');break; 68 case 1: $house_arenda = $house_arenda->orderBy('price');break;
69 case 2: $house_arenda = $house_arenda->orderByDesc('price');break; 69 case 2: $house_arenda = $house_arenda->orderByDesc('price');break;
70 } 70 }
71 switch ($request->sort_new) { 71 switch ($request->sort_new) {
72 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break; 72 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break;
73 case 2: $house_arenda = $house_arenda->orderBy('created_at');break; 73 case 2: $house_arenda = $house_arenda->orderBy('created_at');break;
74 } 74 }
75 switch ($request->sort_area) { 75 switch ($request->sort_area) {
76 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break; 76 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break;
77 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break; 77 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break;
78 } 78 }
79 } else { 79 } else {
80 $house_arenda = $house_arenda->orderBy('price')-> 80 $house_arenda = $house_arenda->orderBy('price')->
81 orderByDesc('created_at')-> 81 orderByDesc('created_at')->
82 orderByDesc('area')->get(); 82 orderByDesc('area')->get();
83 } 83 }
84 84
85 ////////раздел продажа 85 ////////раздел продажа
86 $house_prodaja = House::with('areas')-> 86 $house_prodaja = House::with('areas')->
87 where('area_id', '=', $area->id)-> 87 where('area_id', '=', $area->id)->
88 where('format_house', '=', 'Продажа'); 88 where('format_house', '=', 'Продажа');
89 89
90 if ($request->view == 'prodaja') { 90 if ($request->view == 'prodaja') {
91 switch ($request->sort_price) { 91 switch ($request->sort_price) {
92 case 1: $house_prodaja = $house_prodaja->orderBy('price');break; 92 case 1: $house_prodaja = $house_prodaja->orderBy('price');break;
93 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break; 93 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break;
94 } 94 }
95 switch ($request->sort_new) { 95 switch ($request->sort_new) {
96 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break; 96 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break;
97 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break; 97 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break;
98 } 98 }
99 switch ($request->sort_area) { 99 switch ($request->sort_area) {
100 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break; 100 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break;
101 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break; 101 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break;
102 } 102 }
103 } else { 103 } else {
104 $house_prodaja = $house_prodaja->orderBy('price')-> 104 $house_prodaja = $house_prodaja->orderBy('price')->
105 orderByDesc('created_at')-> 105 orderByDesc('created_at')->
106 orderByDesc('area')->get(); 106 orderByDesc('area')->get();
107 } 107 }
108 108
109 //////////////// Раздел бизнеса 109 //////////////// Раздел бизнеса
110 $house_bissnes = House::with('areas')-> 110 $house_bissnes = House::with('areas')->
111 where('area_id', '=', $area->id)-> 111 where('area_id', '=', $area->id)->
112 where('format_house', '=', 'Бизнес'); 112 where('format_house', '=', 'Бизнес');
113 //orderByDesc('created_at')->get(); 113 //orderByDesc('created_at')->get();
114 114
115 if ($request->view == 'bissnes') { 115 if ($request->view == 'bissnes') {
116 switch ($request->sort_price) { 116 switch ($request->sort_price) {
117 case 1: $house_bissnes = $house_bissnes->orderBy('price');break; 117 case 1: $house_bissnes = $house_bissnes->orderBy('price');break;
118 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break; 118 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break;
119 } 119 }
120 switch ($request->sort_new) { 120 switch ($request->sort_new) {
121 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break; 121 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break;
122 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break; 122 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break;
123 } 123 }
124 switch ($request->sort_area) { 124 switch ($request->sort_area) {
125 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break; 125 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break;
126 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break; 126 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break;
127 } 127 }
128 } else { 128 } else {
129 $house_bissnes = $house_bissnes->orderBy('price')-> 129 $house_bissnes = $house_bissnes->orderBy('price')->
130 orderByDesc('created_at')-> 130 orderByDesc('created_at')->
131 orderByDesc('area')->get(); 131 orderByDesc('area')->get();
132 } 132 }
133 133
134 //////////раздел арендованные 134 //////////раздел арендованные
135 $house_arendovannie = House::with('areas')-> 135 $house_arendovannie = House::with('areas')->
136 where('area_id', '=', $area->id)-> 136 where('area_id', '=', $area->id)->
137 where('format_house', '=', 'Арендованные'); 137 where('format_house', '=', 'Арендованные');
138 //orderByDesc('created_at')->get(); 138 //orderByDesc('created_at')->get();
139 139
140 if ($request->view == 'arendovannie') { 140 if ($request->view == 'arendovannie') {
141 switch ($request->sort_price) { 141 switch ($request->sort_price) {
142 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break; 142 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break;
143 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break; 143 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break;
144 } 144 }
145 switch ($request->sort_new) { 145 switch ($request->sort_new) {
146 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break; 146 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break;
147 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break; 147 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break;
148 } 148 }
149 switch ($request->sort_area) { 149 switch ($request->sort_area) {
150 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break; 150 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break;
151 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break; 151 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break;
152 } 152 }
153 } else { 153 } else {
154 $house_arendovannie = $house_arendovannie->orderBy('price')-> 154 $house_arendovannie = $house_arendovannie->orderBy('price')->
155 orderByDesc('created_at')-> 155 orderByDesc('created_at')->
156 orderByDesc('area')->get(); 156 orderByDesc('area')->get();
157 } 157 }
158 158
159 if ($request->ajax()) { 159 if ($request->ajax()) {
160 switch($request->view) { 160 switch($request->view) {
161 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break; 161 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break;
162 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break; 162 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break;
163 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break; 163 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break;
164 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break; 164 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break;
165 } 165 }
166 } 166 }
167 167
168 return view('complex', compact('area', 168 return view('complex', compact('area',
169 'house_arenda', 169 'house_arenda',
170 'house_prodaja', 170 'house_prodaja',
171 'house_bissnes', 171 'house_bissnes',
172 'house_arendovannie')); 172 'house_arendovannie'));
173 173
174 } 174 }
175 175
176 /* 176 /*
177 * О компании 177 * О компании
178 */ 178 */
179 public function About() { 179 public function About() {
180 return view('about'); 180 $news = News::query()->orderByDesc('created_at')->limit(8)->get();
181 $partners = Partners::query()->limit(18)->get();
182 return view('about', compact('news', 'partners'));
183 }
184
185 /*
186 * Форма обратной связи внизу сайта
187 */
188 public function main_form(Request $request) {
189 return "";
181 } 190 }
182 191
183 /* 192 /*
184 * Избранное 193 * Избранное
185 */ 194 */
186 public function Favorite() { 195 public function Favorite(Request $request) {
187 return view('favorite'); 196 $Arr = json_decode($_COOKIE['favorite_house'], true);
197 if (!empty($Arr) && is_array($Arr)) {
198 $houses = House::with('areas')->whereIn('id', $Arr);
199
200 if (isset($request->sort_price)) {
201 switch ($request->sort_price) {
202 case 1: $houses = $houses->orderBy('price');break;
203 case 2: $houses = $houses->orderByDesc('price');break;
204 }
205 switch ($request->sort_new) {
206 case 1: $houses = $houses->orderByDesc('created_at');break;
207 case 2: $houses = $houses->orderBy('created_at');break;
208 }
209 switch ($request->sort_area) {
210 case 1: $houses = $houses->orderByDesc('area');break;
211 case 2: $houses = $houses->orderBy('area');break;
212 }
213
214 } else {
215 $houses = $houses->orderBy('price')->
216 orderByDesc('created_at')->
217 orderByDesc('area');
218 }
219
220 $houses = $houses->paginate(4);
221
222 if ($request->ajax()) {
223 return view('ajax.complex.favorite', compact('houses'));
224 }
225
226 return view('favorite_data', compact('houses'));
227 } else {
228 return view('favorite', compact('Arr'));
229 }
230
231
188 } 232 }
189 233
190 /* 234 /*
191 * Категории каталога Аренда/Продажа/Бизнес 235 * Категории каталога Аренда/Продажа/Бизнес
192 */ 236 */
193 public function Category($cat, Request $request) { 237 public function Category($cat, Request $request) {
194 switch ($cat) { 238 switch ($cat) {
195 case 'arenda': 239 case 'arenda':
196 $title = "Аренда торговых помещениий"; 240 $title = "Аренда торговых помещениий";
197 $format_house = 'Аренда'; 241 $format_house = 'Аренда';
198 break; 242 break;
199 case 'sale': 243 case 'sale':
200 $title = "Продажа торговых помещений"; 244 $title = "Продажа торговых помещений";
201 $format_house = 'Продажа'; 245 $format_house = 'Продажа';
202 break; 246 break;
203 case 'bussiness': 247 case 'bussiness':
204 $title = "Арендый бизнес"; 248 $title = "Арендый бизнес";
205 $format_house = 'Бизнес'; 249 $format_house = 'Бизнес';
206 break; 250 break;
207 default: 251 default:
208 $title = "Аренда торговых помещениий"; 252 $title = "Аренда торговых помещениий";
209 $format_house = 'Аренда'; 253 $format_house = 'Аренда';
210 break; 254 break;
211 } 255 }
212 256
213 $houses = House::with('areas')-> 257 $houses = House::with('areas')->
214 where('format_house', '=', $format_house); 258 where('format_house', '=', $format_house);
215 //->appends(request()->query()); 259 //->appends(request()->query());
216 260
217 if (!empty($request->area)) { 261 if (!empty($request->area)) {
218 $houses = $houses->where('area_id', '=', $request->area); 262 $houses = $houses->where('area_id', '=', $request->area);
219 } 263 }
220 // условия поиска по типу недвижимости 264 // условия поиска по типу недвижимости
221 if (!empty($request->type_area)) { 265 if (!empty($request->type_area)) {
222 $houses = $houses->where('type_area_id', '=', $request->type_area); 266 $houses = $houses->where('type_area_id', '=', $request->type_area);
223 } 267 }
224 // условия поиска по формату недвижимости 268 // условия поиска по формату недвижимости
225 if (!empty($request->format_area)) { 269 if (!empty($request->format_area)) {
226 $houses = $houses->where('format_area_id', '=', $request->format_area); 270 $houses = $houses->where('format_area_id', '=', $request->format_area);
227 } 271 }
228 // условия поиска по площади - минимальная площадь 272 // условия поиска по площади - минимальная площадь
229 if (!empty($request->area_m2_min)) { 273 if (!empty($request->area_m2_min)) {
230 $houses = $houses->where('area', '>', $request->area_m2_min); 274 $houses = $houses->where('area', '>', $request->area_m2_min);
231 } 275 }
232 // условия поиска по площади - максимальная площадь 276 // условия поиска по площади - максимальная площадь
233 if (!empty($request->area_m2_max)) { 277 if (!empty($request->area_m2_max)) {
234 $houses = $houses->where('area', '<', $request->area_m2_max); 278 $houses = $houses->where('area', '<', $request->area_m2_max);
235 } 279 }
236 // условия поиска по цене - минимальная цена 280 // условия поиска по цене - минимальная цена
237 if (!empty($request->price_min)) { 281 if (!empty($request->price_min)) {
238 $houses = $houses->where('price', '>', $request->price_min); 282 $houses = $houses->where('price', '>', $request->price_min);
239 } 283 }
240 // условия поиска по цене - максимальная цена 284 // условия поиска по цене - максимальная цена
241 if (!empty($request->price_max)) { 285 if (!empty($request->price_max)) {
242 $houses = $houses->where('price', '<', $request->price_max); 286 $houses = $houses->where('price', '<', $request->price_max);
243 } 287 }
244 // условия поиска по адресу 288 // условия поиска по адресу
245 if (!empty($request->address)) { 289 if (!empty($request->address)) {
246 $houses = $houses->where('address', 'LIKE', "%".$request->address."%"); 290 $houses = $houses->where('address', 'LIKE', "%".$request->address."%");
247 } 291 }
248 292
249 if (isset($request->sort_price)) { 293 if (isset($request->sort_price)) {
250 switch ($request->sort_price) { 294 switch ($request->sort_price) {
251 case 1: $houses = $houses->orderBy('price');break; 295 case 1: $houses = $houses->orderBy('price');break;
252 case 2: $houses = $houses->orderByDesc('price');break; 296 case 2: $houses = $houses->orderByDesc('price');break;
253 } 297 }
254 switch ($request->sort_new) { 298 switch ($request->sort_new) {
255 case 1: $houses = $houses->orderByDesc('created_at');break; 299 case 1: $houses = $houses->orderByDesc('created_at');break;
256 case 2: $houses = $houses->orderBy('created_at');break; 300 case 2: $houses = $houses->orderBy('created_at');break;
257 } 301 }
258 switch ($request->sort_area) { 302 switch ($request->sort_area) {
259 case 1: $houses = $houses->orderByDesc('area');break; 303 case 1: $houses = $houses->orderByDesc('area');break;
260 case 2: $houses = $houses->orderBy('area');break; 304 case 2: $houses = $houses->orderBy('area');break;
261 } 305 }
262 306
263 } else { 307 } else {
264 $houses = $houses->orderBy('price')-> 308 $houses = $houses->orderBy('price')->
265 orderByDesc('created_at')-> 309 orderByDesc('created_at')->
266 orderByDesc('area'); 310 orderByDesc('area');
267 } 311 }
268 312
269 $houses = $houses->paginate(4); 313 $houses = $houses->paginate(4);
270 314
271 if ($request->ajax()) { 315 if ($request->ajax()) {
272 return view('ajax.complex.category', compact('houses')); 316 return view('ajax.complex.category', compact('houses'));
273 } 317 }
274 318
275 return view('category_catalog', compact('title', 'cat', 'houses')); 319 return view('category_catalog', compact('title', 'cat', 'houses'));
276 } 320 }
277 321
278 322
279 /* 323 /*
280 * Каталог 324 * Каталог
281 */ 325 */
282 public function Catalog(Request $request) { 326 public function Catalog(Request $request) {
283 327
284 //////////раздел аренда///////////////////////////////////////////////////////////////// 328 //////////раздел аренда/////////////////////////////////////////////////////////////////
285 $house_arenda = House::with('areas')-> 329 $house_arenda = House::with('areas')->
286 where('format_house', '=', 'Аренда'); 330 where('format_house', '=', 'Аренда');
287 // условия поиска по объектам комплексов 331 // условия поиска по объектам комплексов
288 if (!empty($request->area)) { 332 if (!empty($request->area)) {
289 $house_arenda = $house_arenda->where('area_id', '=', $request->area); 333 $house_arenda = $house_arenda->where('area_id', '=', $request->area);
290 } 334 }
291 // условия поиска по типу недвижимости 335 // условия поиска по типу недвижимости
292 if (!empty($request->type_area)) { 336 if (!empty($request->type_area)) {
293 $house_arenda = $house_arenda->where('type_area_id', '=', $request->type_area); 337 $house_arenda = $house_arenda->where('type_area_id', '=', $request->type_area);
294 } 338 }
295 // условия поиска по формату недвижимости 339 // условия поиска по формату недвижимости
296 if (!empty($request->format_area)) { 340 if (!empty($request->format_area)) {
297 $house_arenda = $house_arenda->where('format_area_id', '=', $request->format_area); 341 $house_arenda = $house_arenda->where('format_area_id', '=', $request->format_area);
298 } 342 }
299 // условия поиска по площади - минимальная площадь 343 // условия поиска по площади - минимальная площадь
300 if (!empty($request->area_m2_min)) { 344 if (!empty($request->area_m2_min)) {
301 $house_arenda = $house_arenda->where('area', '>', $request->area_m2_min); 345 $house_arenda = $house_arenda->where('area', '>', $request->area_m2_min);
302 } 346 }
303 // условия поиска по площади - максимальная площадь 347 // условия поиска по площади - максимальная площадь
304 if (!empty($request->area_m2_max)) { 348 if (!empty($request->area_m2_max)) {
305 $house_arenda = $house_arenda->where('area', '<', $request->area_m2_max); 349 $house_arenda = $house_arenda->where('area', '<', $request->area_m2_max);
306 } 350 }
307 // условия поиска по цене - минимальная цена 351 // условия поиска по цене - минимальная цена
308 if (!empty($request->price_min)) { 352 if (!empty($request->price_min)) {
309 $house_arenda = $house_arenda->where('price', '>', $request->price_min); 353 $house_arenda = $house_arenda->where('price', '>', $request->price_min);
310 } 354 }
311 // условия поиска по цене - максимальная цена 355 // условия поиска по цене - максимальная цена
312 if (!empty($request->price_max)) { 356 if (!empty($request->price_max)) {
313 $house_arenda = $house_arenda->where('price', '<', $request->price_max); 357 $house_arenda = $house_arenda->where('price', '<', $request->price_max);
314 } 358 }
315 // условия поиска по адресу 359 // условия поиска по адресу
316 if (!empty($request->address)) { 360 if (!empty($request->address)) {
317 $house_arenda = $house_arenda->where('address', 'LIKE', "%".$request->address."%"); 361 $house_arenda = $house_arenda->where('address', 'LIKE', "%".$request->address."%");
318 } 362 }
319 363
320 if ($request->view == 'arenda') { 364 if ($request->view == 'arenda') {
321 switch ($request->sort_price) { 365 switch ($request->sort_price) {
322 case 1: $house_arenda = $house_arenda->orderBy('price');break; 366 case 1: $house_arenda = $house_arenda->orderBy('price');break;
323 case 2: $house_arenda = $house_arenda->orderByDesc('price');break; 367 case 2: $house_arenda = $house_arenda->orderByDesc('price');break;
324 } 368 }
325 switch ($request->sort_new) { 369 switch ($request->sort_new) {
326 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break; 370 case 1: $house_arenda = $house_arenda->orderByDesc('created_at');break;
327 case 2: $house_arenda = $house_arenda->orderBy('created_at');break; 371 case 2: $house_arenda = $house_arenda->orderBy('created_at');break;
328 } 372 }
329 switch ($request->sort_area) { 373 switch ($request->sort_area) {
330 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break; 374 case 1: $house_arenda = $house_arenda->orderByDesc('area')->get();break;
331 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break; 375 case 2: $house_arenda = $house_arenda->orderBy('area')->get();break;
332 } 376 }
333 } else { 377 } else {
334 $house_arenda = $house_arenda->orderBy('price')-> 378 $house_arenda = $house_arenda->orderBy('price')->
335 orderByDesc('created_at')-> 379 orderByDesc('created_at')->
336 orderByDesc('area')->get(); 380 orderByDesc('area')->get();
337 } 381 }
338 382
339 ////////раздел продажа////////////////////////////////////////////////////////////////// 383 ////////раздел продажа//////////////////////////////////////////////////////////////////
340 $house_prodaja = House::with('areas')-> 384 $house_prodaja = House::with('areas')->
341 where('format_house', '=', 'Продажа'); 385 where('format_house', '=', 'Продажа');
342 386
343 // условия поиска по объектам комплексов 387 // условия поиска по объектам комплексов
344 if (!empty($request->area)) { 388 if (!empty($request->area)) {
345 $house_prodaja = $house_prodaja->where('area_id', '=', $request->area); 389 $house_prodaja = $house_prodaja->where('area_id', '=', $request->area);
346 } 390 }
347 // условия поиска по типу недвижимости 391 // условия поиска по типу недвижимости
348 if (!empty($request->type_area)) { 392 if (!empty($request->type_area)) {
349 $house_prodaja = $house_prodaja->where('type_area_id', '=', $request->type_area); 393 $house_prodaja = $house_prodaja->where('type_area_id', '=', $request->type_area);
350 } 394 }
351 // условия поиска по формату недвижимости 395 // условия поиска по формату недвижимости
352 if (!empty($request->format_area)) { 396 if (!empty($request->format_area)) {
353 $house_prodaja = $house_prodaja->where('format_area_id', '=', $request->format_area); 397 $house_prodaja = $house_prodaja->where('format_area_id', '=', $request->format_area);
354 } 398 }
355 // условия поиска по площади - минимальная площадь 399 // условия поиска по площади - минимальная площадь
356 if (!empty($request->area_m2_min)) { 400 if (!empty($request->area_m2_min)) {
357 $house_prodaja = $house_prodaja->where('area', '>', $request->area_m2_min); 401 $house_prodaja = $house_prodaja->where('area', '>', $request->area_m2_min);
358 } 402 }
359 // условия поиска по площади - максимальная площадь 403 // условия поиска по площади - максимальная площадь
360 if (!empty($request->area_m2_max)) { 404 if (!empty($request->area_m2_max)) {
361 $house_prodaja = $house_prodaja->where('area', '<', $request->area_m2_max); 405 $house_prodaja = $house_prodaja->where('area', '<', $request->area_m2_max);
362 } 406 }
363 // условия поиска по цене - минимальная цена 407 // условия поиска по цене - минимальная цена
364 if (!empty($request->price_min)) { 408 if (!empty($request->price_min)) {
365 $house_prodaja = $house_prodaja->where('price', '>', $request->price_min); 409 $house_prodaja = $house_prodaja->where('price', '>', $request->price_min);
366 } 410 }
367 // условия поиска по цене - максимальная цена 411 // условия поиска по цене - максимальная цена
368 if (!empty($request->price_max)) { 412 if (!empty($request->price_max)) {
369 $house_prodaja = $house_prodaja->where('price', '<', $request->price_max); 413 $house_prodaja = $house_prodaja->where('price', '<', $request->price_max);
370 } 414 }
371 // условия поиска по адресу 415 // условия поиска по адресу
372 if (!empty($request->address)) { 416 if (!empty($request->address)) {
373 $house_prodaja = $house_prodaja->where('address', 'LIKE', "%".$request->address."%"); 417 $house_prodaja = $house_prodaja->where('address', 'LIKE', "%".$request->address."%");
374 } 418 }
375 419
376 if ($request->view == 'prodaja') { 420 if ($request->view == 'prodaja') {
377 switch ($request->sort_price) { 421 switch ($request->sort_price) {
378 case 1: $house_prodaja = $house_prodaja->orderBy('price');break; 422 case 1: $house_prodaja = $house_prodaja->orderBy('price');break;
379 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break; 423 case 2: $house_prodaja = $house_prodaja->orderByDesc('price');break;
380 } 424 }
381 switch ($request->sort_new) { 425 switch ($request->sort_new) {
382 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break; 426 case 1: $house_prodaja = $house_prodaja->orderByDesc('created_at');break;
383 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break; 427 case 2: $house_prodaja = $house_prodaja->orderBy('created_at');break;
384 } 428 }
385 switch ($request->sort_area) { 429 switch ($request->sort_area) {
386 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break; 430 case 1: $house_prodaja = $house_prodaja->orderByDesc('area')->get();break;
387 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break; 431 case 2: $house_prodaja = $house_prodaja->orderBy('area')->get();break;
388 } 432 }
389 } else { 433 } else {
390 $house_prodaja = $house_prodaja->orderBy('price')-> 434 $house_prodaja = $house_prodaja->orderBy('price')->
391 orderByDesc('created_at')-> 435 orderByDesc('created_at')->
392 orderByDesc('area')->get(); 436 orderByDesc('area')->get();
393 } 437 }
394 438
395 //////////////// Раздел бизнеса///////////////////////////////////////////////////////// 439 //////////////// Раздел бизнеса/////////////////////////////////////////////////////////
396 $house_bissnes = House::with('areas')-> 440 $house_bissnes = House::with('areas')->
397 where('format_house', '=', 'Бизнес'); 441 where('format_house', '=', 'Бизнес');
398 //orderByDesc('created_at')->get(); 442 //orderByDesc('created_at')->get();
399 443
400 // условия поиска по объектам комплексов 444 // условия поиска по объектам комплексов
401 if (!empty($request->area)) { 445 if (!empty($request->area)) {
402 $house_bissnes = $house_bissnes->where('area_id', '=', $request->area); 446 $house_bissnes = $house_bissnes->where('area_id', '=', $request->area);
403 } 447 }
404 // условия поиска по типу недвижимости 448 // условия поиска по типу недвижимости
405 if (!empty($request->type_area)) { 449 if (!empty($request->type_area)) {
406 $house_bissnes = $house_bissnes->where('type_area_id', '=', $request->type_area); 450 $house_bissnes = $house_bissnes->where('type_area_id', '=', $request->type_area);
407 } 451 }
408 // условия поиска по формату недвижимости 452 // условия поиска по формату недвижимости
409 if (!empty($request->format_area)) { 453 if (!empty($request->format_area)) {
410 $house_bissnes = $house_bissnes->where('format_area_id', '=', $request->format_area); 454 $house_bissnes = $house_bissnes->where('format_area_id', '=', $request->format_area);
411 } 455 }
412 // условия поиска по площади - минимальная площадь 456 // условия поиска по площади - минимальная площадь
413 if (!empty($request->area_m2_min)) { 457 if (!empty($request->area_m2_min)) {
414 $house_bissnes = $house_bissnes->where('area', '>', $request->area_m2_min); 458 $house_bissnes = $house_bissnes->where('area', '>', $request->area_m2_min);
415 } 459 }
416 // условия поиска по площади - максимальная площадь 460 // условия поиска по площади - максимальная площадь
417 if (!empty($request->area_m2_max)) { 461 if (!empty($request->area_m2_max)) {
418 $house_bissnes = $house_bissnes->where('area', '<', $request->area_m2_max); 462 $house_bissnes = $house_bissnes->where('area', '<', $request->area_m2_max);
419 } 463 }
420 // условия поиска по цене - минимальная цена 464 // условия поиска по цене - минимальная цена
421 if (!empty($request->price_min)) { 465 if (!empty($request->price_min)) {
422 $house_bissnes = $house_bissnes->where('price', '>', $request->price_min); 466 $house_bissnes = $house_bissnes->where('price', '>', $request->price_min);
423 } 467 }
424 // условия поиска по цене - максимальная цена 468 // условия поиска по цене - максимальная цена
425 if (!empty($request->price_max)) { 469 if (!empty($request->price_max)) {
426 $house_bissnes = $house_bissnes->where('price', '<', $request->price_max); 470 $house_bissnes = $house_bissnes->where('price', '<', $request->price_max);
427 } 471 }
428 // условия поиска по адресу 472 // условия поиска по адресу
429 if (!empty($request->address)) { 473 if (!empty($request->address)) {
430 $house_bissnes = $house_bissnes->where('address', 'LIKE', "%".$request->address."%"); 474 $house_bissnes = $house_bissnes->where('address', 'LIKE', "%".$request->address."%");
431 } 475 }
432 476
433 if ($request->view == 'bissnes') { 477 if ($request->view == 'bissnes') {
434 switch ($request->sort_price) { 478 switch ($request->sort_price) {
435 case 1: $house_bissnes = $house_bissnes->orderBy('price');break; 479 case 1: $house_bissnes = $house_bissnes->orderBy('price');break;
436 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break; 480 case 2: $house_bissnes = $house_bissnes->orderByDesc('price');break;
437 } 481 }
438 switch ($request->sort_new) { 482 switch ($request->sort_new) {
439 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break; 483 case 1: $house_bissnes = $house_bissnes->orderByDesc('created_at');break;
440 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break; 484 case 2: $house_bissnes = $house_bissnes->orderBy('created_at');break;
441 } 485 }
442 switch ($request->sort_area) { 486 switch ($request->sort_area) {
443 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break; 487 case 1: $house_bissnes = $house_bissnes->orderByDesc('area')->get();break;
444 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break; 488 case 2: $house_bissnes = $house_bissnes->orderBy('area')->get();break;
445 } 489 }
446 } else { 490 } else {
447 $house_bissnes = $house_bissnes->orderBy('price')-> 491 $house_bissnes = $house_bissnes->orderBy('price')->
448 orderByDesc('created_at')-> 492 orderByDesc('created_at')->
449 orderByDesc('area')->get(); 493 orderByDesc('area')->get();
450 } 494 }
451 495
452 //////////раздел арендованные////////////////////////////////////////////////////////// 496 //////////раздел арендованные//////////////////////////////////////////////////////////
453 $house_arendovannie = House::with('areas')-> 497 $house_arendovannie = House::with('areas')->
454 where('format_house', '=', 'Арендованные'); 498 where('format_house', '=', 'Арендованные');
455 //orderByDesc('created_at')->get(); 499 //orderByDesc('created_at')->get();
456 500
457 // условия поиска по объектам комплексов 501 // условия поиска по объектам комплексов
458 if (!empty($request->area)) { 502 if (!empty($request->area)) {
459 $house_arendovannie = $house_arendovannie->where('area_id', '=', $request->area); 503 $house_arendovannie = $house_arendovannie->where('area_id', '=', $request->area);
460 } 504 }
461 // условия поиска по типу недвижимости 505 // условия поиска по типу недвижимости
462 if (!empty($request->type_area)) { 506 if (!empty($request->type_area)) {
463 $house_arendovannie = $house_arendovannie->where('type_area_id', '=', $request->type_area); 507 $house_arendovannie = $house_arendovannie->where('type_area_id', '=', $request->type_area);
464 } 508 }
465 // условия поиска по формату недвижимости 509 // условия поиска по формату недвижимости
466 if (!empty($request->format_area)) { 510 if (!empty($request->format_area)) {
467 $house_arendovannie = $house_arendovannie->where('format_area_id', '=', $request->format_area); 511 $house_arendovannie = $house_arendovannie->where('format_area_id', '=', $request->format_area);
468 } 512 }
469 // условия поиска по площади - минимальная площадь 513 // условия поиска по площади - минимальная площадь
470 if (!empty($request->area_m2_min)) { 514 if (!empty($request->area_m2_min)) {
471 $house_arendovannie = $house_arendovannie->where('area', '>', $request->area_m2_min); 515 $house_arendovannie = $house_arendovannie->where('area', '>', $request->area_m2_min);
472 } 516 }
473 // условия поиска по площади - максимальная площадь 517 // условия поиска по площади - максимальная площадь
474 if (!empty($request->area_m2_max)) { 518 if (!empty($request->area_m2_max)) {
475 $house_arendovannie = $house_arendovannie->where('area', '<', $request->area_m2_max); 519 $house_arendovannie = $house_arendovannie->where('area', '<', $request->area_m2_max);
476 } 520 }
477 // условия поиска по цене - минимальная цена 521 // условия поиска по цене - минимальная цена
478 if (!empty($request->price_min)) { 522 if (!empty($request->price_min)) {
479 $house_arendovannie = $house_arendovannie->where('price', '>', $request->price_min); 523 $house_arendovannie = $house_arendovannie->where('price', '>', $request->price_min);
480 } 524 }
481 // условия поиска по цене - максимальная цена 525 // условия поиска по цене - максимальная цена
482 if (!empty($request->price_max)) { 526 if (!empty($request->price_max)) {
483 $house_arendovannie = $house_arendovannie->where('price', '<', $request->price_max); 527 $house_arendovannie = $house_arendovannie->where('price', '<', $request->price_max);
484 } 528 }
485 // условия поиска по адресу 529 // условия поиска по адресу
486 if (!empty($request->address)) { 530 if (!empty($request->address)) {
487 $house_arendovannie = $house_arendovannie->where('address', 'LIKE', "%".$request->address."%"); 531 $house_arendovannie = $house_arendovannie->where('address', 'LIKE', "%".$request->address."%");
488 } 532 }
489 533
490 if ($request->view == 'arendovannie') { 534 if ($request->view == 'arendovannie') {
491 switch ($request->sort_price) { 535 switch ($request->sort_price) {
492 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break; 536 case 1: $house_arendovannie = $house_arendovannie->orderBy('price');break;
493 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break; 537 case 2: $house_arendovannie = $house_arendovannie->orderByDesc('price');break;
494 } 538 }
495 switch ($request->sort_new) { 539 switch ($request->sort_new) {
496 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break; 540 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('created_at');break;
497 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break; 541 case 2: $house_arendovannie = $house_arendovannie->orderBy('created_at');break;
498 } 542 }
499 switch ($request->sort_area) { 543 switch ($request->sort_area) {
500 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break; 544 case 1: $house_arendovannie = $house_arendovannie->orderByDesc('area')->get();break;
501 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break; 545 case 2: $house_arendovannie = $house_arendovannie->orderBy('area')->get();break;
502 } 546 }
503 } else { 547 } else {
504 $house_arendovannie = $house_arendovannie->orderBy('price')-> 548 $house_arendovannie = $house_arendovannie->orderBy('price')->
505 orderByDesc('created_at')-> 549 orderByDesc('created_at')->
506 orderByDesc('area')->get(); 550 orderByDesc('area')->get();
507 } 551 }
508 552
509 if ($request->ajax()) { 553 if ($request->ajax()) {
510 switch($request->view) { 554 switch($request->view) {
511 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break; 555 case 'arenda': return view('ajax.complex.arenda', compact('house_arenda')); break;
512 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break; 556 case 'prodaja': return view('ajax.complex.prodaja', compact('house_prodaja'));break;
513 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break; 557 case 'bissnes': return view('ajax.complex.bissnes', compact('house_bissnes')); break;
514 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break; 558 case 'arendovannie': return view('ajax.complex.arendovannie', compact('house_arendovannie')); break;
515 } 559 }
516 } 560 }
517 if (session('message') == 'Искать') { 561 if (session('message') == 'Искать') {
518 session()->flash('message', 'Сброс'); 562 session()->flash('message', 'Сброс');
519 } else { 563 } else {
520 session()->flash('message', 'Искать'); 564 session()->flash('message', 'Искать');
521 } 565 }
522 566
523 if (empty($request)) { 567 if (empty($request)) {
524 session()->flash('message', 'Искать'); 568 session()->flash('message', 'Искать');
525 } 569 }
526 570
527 return view('catalog', compact( 571 return view('catalog', compact(
528 'house_arenda', 572 'house_arenda',
529 'house_prodaja', 573 'house_prodaja',
530 'house_bissnes', 574 'house_bissnes',
531 'house_arendovannie' 575 'house_arendovannie'
532 )); 576 ));
533 577
534 578
535 } 579 }
536 580
537 /* 581 /*
538 * Новости 582 * Новости
539 */ 583 */
540 public function News() { 584 public function News() {
541 //$news = News::orderByDesc('created_at')->limit(1)->paginate(); 585 //$news = News::orderByDesc('created_at')->limit(1)->paginate();
542 $news_ = News::query()->orderByDesc('created_at')->paginate(4); 586 $news_ = News::query()->orderByDesc('created_at')->paginate(4);
543 return view('news', compact('news_')); 587 return view('news', compact('news_'));
544 } 588 }
545 589
546 /* 590 /*
547 * Контакты 591 * Контакты
548 */ 592 */
549 public function Contact() { 593 public function Contact() {
550 return view('contact'); 594 return view('contact');
551 } 595 }
552 596
553 /* 597 /*
554 * Карта объектов 598 * Карта объектов
555 */ 599 */
556 public function MapsObj() { 600 public function MapsObj() {
557 return view('mapsobj'); 601 return view('mapsobj');
558 } 602 }
559 603
560 /* 604 /*
561 * Посмотр конктретного предложение офиса 605 * Посмотр конктретного предложение офиса
562 */ 606 */
563 public function Offer(House $house) { 607 public function Offer(House $house) {
564 $houses = House::with('areas'); 608 $houses = House::with('areas');
565 $houses = $houses->where('type_area_id', '=', $house->typearea->id); 609 $houses = $houses->where('type_area_id', '=', $house->typearea->id);
566 $houses = $houses->where('format_house', '=', $house->format_house); 610 $houses = $houses->where('format_house', '=', $house->format_house);
567 $houses = $houses->orderByDesc('created_at')->limit(8)->get(); 611 $houses = $houses->orderByDesc('created_at')->limit(8)->get();
568 612
569 return view('house.post', compact('house', 'houses')); 613 return view('house.post', compact('house', 'houses'));
570 } 614 }
571 615
572 /* 616 /*
573 * Просмотр детально конкретной новости 617 * Просмотр детально конкретной новости
574 */ 618 */
575 public function DetailNew(News $news) { 619 public function DetailNew(News $news) {
576 $news_list = News::query()->orderByDesc('created_at')->limit(8)->get(); 620 $news_list = News::query()->orderByDesc('created_at')->limit(8)->get();
577 return view('new.post', compact('news', 'news_list')); 621 return view('new.post', compact('news', 'news_list'));
578 } 622 }
579 } 623 }
580 624
app/Providers/ComposerServiceProvider.php
1 <?php 1 <?php
2 2
3 namespace App\Providers; 3 namespace App\Providers;
4 4
5 use App\Models\Area; 5 use App\Models\Area;
6 use App\Models\Contact; 6 use App\Models\Contact;
7 use App\Models\format_area; 7 use App\Models\format_area;
8 use App\Models\Tag; 8 use App\Models\Tag;
9 use App\Models\type_area; 9 use App\Models\type_area;
10 use Illuminate\Support\ServiceProvider; 10 use Illuminate\Support\ServiceProvider;
11 use Illuminate\Support\Facades\View; 11 use Illuminate\Support\Facades\View;
12 12
13 class ComposerServiceProvider extends ServiceProvider 13 class ComposerServiceProvider extends ServiceProvider
14 { 14 {
15 /** 15 /**
16 * Register services. 16 * Register services.
17 * 17 *
18 * @return void 18 * @return void
19 */ 19 */
20 public function register() 20 public function register()
21 { 21 {
22 $views = ['part.filter.main','part.filter.catalog', 'part.filter.category']; 22 $views = ['part.filter.main','part.filter.catalog', 'part.filter.category'];
23 23
24 View::composer($views, 24 View::composer($views,
25 function($view) { 25 function($view) {
26 $items_type_area = type_area::all(); 26 $items_type_area = type_area::all();
27 $items_format_area = format_area::all(); 27 $items_format_area = format_area::all();
28 $items_area = Area::all(); 28 $items_area = Area::all();
29 $view->with([ 29 $view->with([
30 'items_area' => $items_area, 30 'items_area' => $items_area,
31 'items_type_area' => $items_type_area, 31 'items_type_area' => $items_type_area,
32 'items_format_area' => $items_format_area, 32 'items_format_area' => $items_format_area,
33 ]); 33 ]);
34 } 34 }
35 ); 35 );
36 36
37 $views = ['layout.site', 'index']; 37 $views = ['layout.site', 'index', 'about'];
38 View::composer($views, function($view) { 38 View::composer($views, function($view) {
39 $view->with(['items_contact' => Contact::limit(1)->get()]); 39 $view->with(['items_contact' => Contact::limit(1)->get()]);
40 }); 40 });
41 41
42 42
43 } 43 }
44 44
45 /** 45 /**
46 * Bootstrap services. 46 * Bootstrap services.
47 * 47 *
48 * @return void 48 * @return void
49 */ 49 */
50 public function boot() 50 public function boot()
51 { 51 {
52 // 52 //
53 } 53 }
54 } 54 }
55 55
public/js/jquery.cookie.js
File was created 1 /**
2 * Cookie plugin
3 *
4 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
5 * Dual licensed under the MIT and GPL licenses:
6 * http://www.opensource.org/licenses/mit-license.php
7 * http://www.gnu.org/licenses/gpl.html
8 *
9 */
10
11 /**
12 * Create a cookie with the given name and value and other optional parameters.
13 *
14 * @example $.cookie('the_cookie', 'the_value');
15 * @desc Set the value of a cookie.
16 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
17 * @desc Create a cookie with all available options.
18 * @example $.cookie('the_cookie', 'the_value');
19 * @desc Create a session cookie.
20 * @example $.cookie('the_cookie', null);
21 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
22 * used when the cookie was set.
23 *
24 * @param String name The name of the cookie.
25 * @param String value The value of the cookie.
26 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
27 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
28 * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
29 * If set to null or omitted, the cookie will be a session cookie and will not be retained
30 * when the the browser exits.
31 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
32 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
33 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
34 * require a secure protocol (like HTTPS).
35 * @type undefined
36 *
37 * @name $.cookie
38 * @cat Plugins/Cookie
39 * @author Klaus Hartl/klaus.hartl@stilbuero.de
40 */
41
42 /**
43 * Get the value of a cookie with the given name.
44 *
45 * @example $.cookie('the_cookie');
46 * @desc Get the value of a cookie.
47 *
48 * @param String name The name of the cookie.
49 * @return The value of the cookie.
50 * @type String
51 *
52 * @name $.cookie
53 * @cat Plugins/Cookie
54 * @author Klaus Hartl/klaus.hartl@stilbuero.de
55 */
56 jQuery.cookie = function(name, value, options) {
57 if (typeof value != 'undefined') { // name and value given, set cookie
58 options = options || {};
59 if (value === null) {
60 value = '';
61 options.expires = -1;
62 }
63 var expires = '';
64 if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
65 var date;
66 if (typeof options.expires == 'number') {
67 date = new Date();
68 date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
69 } else {
70 date = options.expires;
71 }
72 expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
73 }
74 // CAUTION: Needed to parenthesize options.path and options.domain
75 // in the following expressions, otherwise they evaluate to undefined
76 // in the packed version for some reason...
77 var path = options.path ? '; path=' + (options.path) : '';
78 var domain = options.domain ? '; domain=' + (options.domain) : '';
79 var secure = options.secure ? '; secure' : '';
80 document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
81 } else { // only name given, get cookie
82 var cookieValue = null;
83 if (document.cookie && document.cookie != '') {
84 var cookies = document.cookie.split(';');
85 for (var i = 0; i < cookies.length; i++) {
86 var cookie = jQuery.trim(cookies[i]);
87 // Does this cookie string begin with the name we want?
88 if (cookie.substring(0, name.length + 1) == (name + '=')) {
89 cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
90 break;
91 }
92 }
93 }
94 return cookieValue;
95 }
96 };
public/js/jquery.cookie.zip
No preview for this file type
1 // управляющий класс App с методом init(), в котором собраны все используемые методы с комментариями о том, что конкретно делает каждый метод 1 // управляющий класс App с методом init(), в котором собраны все используемые методы с комментариями о том, что конкретно делает каждый метод
2 2
3 class App { 3 class App {
4 4
5 constructor() { 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}$/; // рег. выражение для поля 'телефон'; 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; // рег. выражение для поля 'электронная почта'; 7 this.patternEmail = /^[a-zA-Z0-9._%+-\.]+@[a-z0-9.-]+\.[a-z]{2,}$/i; // рег. выражение для поля 'электронная почта';
8 } 8 }
9 9
10 init() { 10 init() {
11 11
12 console.log('init'); 12 console.log('init');
13 13
14 this.stickyHeader(); // липкий хедер; 14 this.stickyHeader(); // липкий хедер;
15 this.controlBurgerMenu(); // бургер-меню; 15 this.controlBurgerMenu(); // бургер-меню;
16 this.smoothScroll(); // плавный скролл к якорю (smooth scroll); 16 this.smoothScroll(); // плавный скролл к якорю (smooth scroll);
17 this.scrollUp(); // кнопка наверх; 17 this.scrollUp(); // кнопка наверх;
18 this.addToFavorites(); // добавить в избранное (звёздочка); 18 this.addToFavorites(); // добавить в избранное (звёздочка);
19 this.initTypicalSlider(); // типовые слайдеры; 19 this.initTypicalSlider(); // типовые слайдеры;
20 this.initPartnerslSlider(); // слайдер с партнёрами; 20 this.initPartnerslSlider(); // слайдер с партнёрами;
21 this.controlFilters(); // фильтры на главном экране; 21 this.controlFilters(); // фильтры на главном экране;
22 this.controlPopups(); // открытие/закрытие поп-апов; 22 this.controlPopups(); // открытие/закрытие поп-апов;
23 this.controlContactUsPopup(); // открытие/закрытие поп-апа 'обратный звонок'; 23 this.controlContactUsPopup(); // открытие/закрытие поп-апа 'обратный звонок';
24 24
25 this.sendForm('.js_popup_feedback_form', 'server.php', '[data-popup="success"]'); // отправка формы в поп-апе обратной связи; 25 this.sendForm('.js_popup_feedback_form', 'server.php', '[data-popup="success"]'); // отправка формы в поп-апе обратной связи;
26 this.sendForm('.js_popup_viewing_form', 'server.php', '[data-popup="success"]'); // отправка формы в поп-апе 'записаться на просмотр'; 26 this.sendForm('.js_popup_viewing_form', 'server.php', '[data-popup="success"]'); // отправка формы в поп-апе 'записаться на просмотр';
27 this.sendForm('.js_footer_feedback_form', 'server.php', '[data-popup="success"]'); // отправка формы в футере; 27 this.sendForm('.js_footer_feedback_form', '', '[data-popup="success"]'); // отправка формы в футере;
28 this.sendForm('.js_contacts_form', 'server.php', '.js_contacts_success'); // отправка формы на странице контакты; 28 this.sendForm('.js_contacts_form', 'server.php', '.js_contacts_success'); // отправка формы на странице контакты;
29 this.sendOffer(); //отправка предложения по e-mail; 29 this.sendOffer(); //отправка предложения по e-mail;
30 30
31 this.setGeneralMap(); // карта на странице карт; 31 this.setGeneralMap(); // карта на странице карт;
32 this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК'; 32 this.setComplexMap('complex-map', [55.726591050908745, 37.57244549999999], 'ЖК Садовые кварталы'); // карта на странице 'ЖК';
33 this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение'; 33 this.setComplexMap('offer-map', [55.70851106903402, 37.65864349999999], 'Аренда торгового помещения 321,6 м2'); // карта на странице 'Предложение';
34 this.setCatalogSorts(); // сортировка на странице 'каталог'; 34 this.setCatalogSorts(); // сортировка на странице 'каталог';
35 this.initIntroSlider(); // слайдер на странице жк и на странице предложения; 35 this.initIntroSlider(); // слайдер на странице жк и на странице предложения;
36 this.setTabs('.js_offer_side_tab', '.js_offer_side_item'); // табы с планами объекат и этажа на странице предложения; 36 this.setTabs('.js_offer_side_tab', '.js_offer_side_item'); // табы с планами объекат и этажа на странице предложения;
37 this.setTabs('.js_offer_side_popup_tab', '.js_offer_side_popup_item'); // табы с планами объекат и этажа в поп-апе на странице предложения; 37 this.setTabs('.js_offer_side_popup_tab', '.js_offer_side_popup_item'); // табы с планами объекат и этажа в поп-апе на странице предложения;
38 this.sontrolOfferSidePopup(); // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения; 38 this.sontrolOfferSidePopup(); // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения;
39 this.setCustomGallery(); // галлерея; 39 this.setCustomGallery(); // галлерея;
40 this.setCookies() // куки; 40 this.setCookies() // куки;
41 this.setFooterSpoilers() // аккордеон в футере; 41 this.setFooterSpoilers() // аккордеон в футере;
42 42
43 } 43 }
44 44
45 // фиксация <body> 45 // фиксация <body>
46 fixBodyPosition() { 46 fixBodyPosition() {
47 47
48 setTimeout(function () { 48 setTimeout(function () {
49 // ставим необходимую задержку, чтобы не было «конфликта» в случае, если функция фиксации вызывается сразу после расфиксации (расфиксация отменяет действия расфиксации из-за одновременного действия) 49 // ставим необходимую задержку, чтобы не было «конфликта» в случае, если функция фиксации вызывается сразу после расфиксации (расфиксация отменяет действия расфиксации из-за одновременного действия)
50 50
51 if (!document.body.hasAttribute('data-body-scroll-fix')) { 51 if (!document.body.hasAttribute('data-body-scroll-fix')) {
52 52
53 // получаем позицию прокрутки 53 // получаем позицию прокрутки
54 let scrollPosition = window.pageYOffset || document.documentElement.scrollTop; 54 let scrollPosition = window.pageYOffset || document.documentElement.scrollTop;
55 55
56 // ставим нужные стили 56 // ставим нужные стили
57 document.body.setAttribute('data-body-scroll-fix', scrollPosition); // Cтавим атрибут со значением прокрутки 57 document.body.setAttribute('data-body-scroll-fix', scrollPosition); // Cтавим атрибут со значением прокрутки
58 document.body.style.overflow = 'hidden'; 58 document.body.style.overflow = 'hidden';
59 document.body.style.position = 'fixed'; 59 document.body.style.position = 'fixed';
60 document.body.style.top = '-' + scrollPosition + 'px'; 60 document.body.style.top = '-' + scrollPosition + 'px';
61 document.body.style.left = '0'; 61 document.body.style.left = '0';
62 document.body.style.width = '100%'; 62 document.body.style.width = '100%';
63 63
64 if (window.innerWidth >= 1200) { 64 if (window.innerWidth >= 1200) {
65 document.body.style.paddingRight = '8px'; 65 document.body.style.paddingRight = '8px';
66 } 66 }
67 } 67 }
68 68
69 }, 15); // можно задержку ещё меньше, но работает хорошо именно с этим значением на всех устройствах и браузерах 69 }, 15); // можно задержку ещё меньше, но работает хорошо именно с этим значением на всех устройствах и браузерах
70 70
71 } 71 }
72 72
73 73
74 // расфиксация <body> 74 // расфиксация <body>
75 unfixBodyPosition() { 75 unfixBodyPosition() {
76 76
77 if (document.body.hasAttribute('data-body-scroll-fix')) { 77 if (document.body.hasAttribute('data-body-scroll-fix')) {
78 78
79 // получаем позицию прокрутки из атрибута 79 // получаем позицию прокрутки из атрибута
80 let scrollPosition = document.body.getAttribute('data-body-scroll-fix'); 80 let scrollPosition = document.body.getAttribute('data-body-scroll-fix');
81 81
82 // удаляем атрибут 82 // удаляем атрибут
83 document.body.removeAttribute('data-body-scroll-fix'); 83 document.body.removeAttribute('data-body-scroll-fix');
84 84
85 // удаляем ненужные стили 85 // удаляем ненужные стили
86 document.body.style.overflow = ''; 86 document.body.style.overflow = '';
87 document.body.style.position = ''; 87 document.body.style.position = '';
88 document.body.style.top = ''; 88 document.body.style.top = '';
89 document.body.style.left = ''; 89 document.body.style.left = '';
90 document.body.style.width = ''; 90 document.body.style.width = '';
91 document.body.style.paddingRight = ''; 91 document.body.style.paddingRight = '';
92 92
93 // прокручиваем страницу на полученное из атрибута значение 93 // прокручиваем страницу на полученное из атрибута значение
94 window.scroll(0, scrollPosition); 94 window.scroll(0, scrollPosition);
95 95
96 } 96 }
97 97
98 } 98 }
99 99
100 100
101 // бургер-меню 101 // бургер-меню
102 controlBurgerMenu() { 102 controlBurgerMenu() {
103 103
104 const headerBurger = document.querySelector('.js_header_burger'); 104 const headerBurger = document.querySelector('.js_header_burger');
105 105
106 if (headerBurger) { 106 if (headerBurger) {
107 107
108 const menu = document.querySelector('.js_menu'); 108 const menu = document.querySelector('.js_menu');
109 const menuClose = menu.querySelector('.js_menu_close'); 109 const menuClose = menu.querySelector('.js_menu_close');
110 110
111 headerBurger.addEventListener('click', () => { 111 headerBurger.addEventListener('click', () => {
112 menu.classList.add('active'); 112 menu.classList.add('active');
113 this.fixBodyPosition(); 113 this.fixBodyPosition();
114 }); 114 });
115 115
116 menu.addEventListener('click', (e) => { 116 menu.addEventListener('click', (e) => {
117 117
118 if (e.target == menu) { 118 if (e.target == menu) {
119 menu.classList.remove('active'); 119 menu.classList.remove('active');
120 this.unfixBodyPosition(); 120 this.unfixBodyPosition();
121 } 121 }
122 122
123 }); 123 });
124 124
125 menuClose.addEventListener('click', () => { 125 menuClose.addEventListener('click', () => {
126 menu.classList.remove('active'); 126 menu.classList.remove('active');
127 this.unfixBodyPosition(); 127 this.unfixBodyPosition();
128 }); 128 });
129 129
130 } 130 }
131 131
132 } 132 }
133 133
134 134
135 // липкий хедер 135 // липкий хедер
136 stickyHeader() { 136 stickyHeader() {
137 137
138 const header = document.querySelector('.js_header'); 138 const header = document.querySelector('.js_header');
139 139
140 if (header) { 140 if (header) {
141 141
142 window.addEventListener('scroll', () => { 142 window.addEventListener('scroll', () => {
143 143
144 if (window.scrollY > 200) { 144 if (window.scrollY > 200) {
145 header.classList.add('fixed'); 145 header.classList.add('fixed');
146 } else { 146 } else {
147 header.classList.remove('fixed'); 147 header.classList.remove('fixed');
148 } 148 }
149 149
150 }); 150 });
151 151
152 }; 152 };
153 153
154 } 154 }
155 155
156 156
157 // плавный скролл к якорю (smooth scroll) 157 // плавный скролл к якорю (smooth scroll)
158 smoothScroll() { 158 smoothScroll() {
159 159
160 const smoothLinks = document.querySelectorAll('.js_smooth_link'); 160 const smoothLinks = document.querySelectorAll('.js_smooth_link');
161 161
162 if (smoothLinks.length) { 162 if (smoothLinks.length) {
163 163
164 smoothLinks.forEach(link => { 164 smoothLinks.forEach(link => {
165 165
166 link.addEventListener('click', function (e) { 166 link.addEventListener('click', function (e) {
167 167
168 e.preventDefault(); 168 e.preventDefault();
169 169
170 let href = this.getAttribute('href').substring(1); 170 let href = this.getAttribute('href').substring(1);
171 171
172 const scrollTarget = document.getElementById(href); 172 const scrollTarget = document.getElementById(href);
173 173
174 // const topOffset = document.querySelector('.header').offsetHeight; 174 // const topOffset = document.querySelector('.header').offsetHeight;
175 const topOffset = 0; // если не нужен отступ сверху 175 const topOffset = 0; // если не нужен отступ сверху
176 const elementPosition = scrollTarget.getBoundingClientRect().top; 176 const elementPosition = scrollTarget.getBoundingClientRect().top;
177 const offsetPosition = elementPosition - topOffset; 177 const offsetPosition = elementPosition - topOffset;
178 178
179 window.scrollBy({ 179 window.scrollBy({
180 top: offsetPosition, 180 top: offsetPosition,
181 behavior: 'smooth' 181 behavior: 'smooth'
182 }); 182 });
183 183
184 }); 184 });
185 185
186 }); 186 });
187 187
188 } 188 }
189 189
190 } 190 }
191 191
192 192
193 // кнопка наверх 193 // кнопка наверх
194 scrollUp() { 194 scrollUp() {
195 195
196 const toTopBtn = document.querySelector('.js_btn_up'); 196 const toTopBtn = document.querySelector('.js_btn_up');
197 197
198 if (toTopBtn) { 198 if (toTopBtn) {
199 199
200 toTopBtn.addEventListener('click', function () { 200 toTopBtn.addEventListener('click', function () {
201 201
202 window.scrollTo({ 202 window.scrollTo({
203 top: 0, 203 top: 0,
204 behavior: 'smooth' 204 behavior: 'smooth'
205 }); 205 });
206 206
207 }); 207 });
208 208
209 } 209 }
210 210
211 } 211 }
212 212
213 213
214 // добавить в избранное (звёздочка) 214 // добавить в избранное (звёздочка)
215 addToFavorites() { 215 addToFavorites() {
216 216
217 const cardFavorites = document.querySelectorAll('.js_card_favorites'); 217 const cardFavorites = document.querySelectorAll('.js_card_favorites');
218 218
219 if (cardFavorites.length) { 219 if (cardFavorites.length) {
220 220
221 cardFavorites.forEach(item => { 221 cardFavorites.forEach(item => {
222 222
223 item.addEventListener('click', (e) => { 223 item.addEventListener('click', (e) => {
224 e.preventDefault(); 224 e.preventDefault();
225 item.classList.toggle('active'); 225 item.classList.toggle('active');
226 }); 226 });
227 227
228 }); 228 });
229 229
230 } 230 }
231 231
232 } 232 }
233 233
234 234
235 // типовые слайдеры 235 // типовые слайдеры
236 initTypicalSlider() { 236 initTypicalSlider() {
237 237
238 const slidersWraps = document.querySelectorAll('.slider__wrap'); 238 const slidersWraps = document.querySelectorAll('.slider__wrap');
239 239
240 if (slidersWraps.length) { 240 if (slidersWraps.length) {
241 241
242 slidersWraps.forEach(wrap => { 242 slidersWraps.forEach(wrap => {
243 243
244 const slider = wrap.querySelector('.swiper'); 244 const slider = wrap.querySelector('.swiper');
245 const prev = wrap.querySelector('.swiper-button-prev'); 245 const prev = wrap.querySelector('.swiper-button-prev');
246 const next = wrap.querySelector('.swiper-button-next'); 246 const next = wrap.querySelector('.swiper-button-next');
247 const pagination = wrap.querySelector('.swiper-pagination'); 247 const pagination = wrap.querySelector('.swiper-pagination');
248 248
249 let swiper1 = new Swiper(slider, { 249 let swiper1 = new Swiper(slider, {
250 navigation: { 250 navigation: {
251 nextEl: next, 251 nextEl: next,
252 prevEl: prev, 252 prevEl: prev,
253 }, 253 },
254 pagination: { 254 pagination: {
255 el: pagination, 255 el: pagination,
256 clickable: true, 256 clickable: true,
257 }, 257 },
258 slidesPerView: 1, 258 slidesPerView: 1,
259 spaceBetween: 20, 259 spaceBetween: 20,
260 observer: true, 260 observer: true,
261 observeParents: true, 261 observeParents: true,
262 observeSlideChildren: true, 262 observeSlideChildren: true,
263 breakpoints: { 263 breakpoints: {
264 480: { 264 480: {
265 slidesPerView: 1.5, 265 slidesPerView: 1.5,
266 }, 266 },
267 640: { 267 640: {
268 slidesPerView: 2, 268 slidesPerView: 2,
269 }, 269 },
270 780: { 270 780: {
271 slidesPerView: 2.5, 271 slidesPerView: 2.5,
272 }, 272 },
273 920: { 273 920: {
274 slidesPerView: 3, 274 slidesPerView: 3,
275 }, 275 },
276 1024: { 276 1024: {
277 slidesPerView: 3.4 277 slidesPerView: 3.4
278 }, 278 },
279 1200: { 279 1200: {
280 slidesPerView: 4, 280 slidesPerView: 4,
281 } 281 }
282 } 282 }
283 }); 283 });
284 284
285 }); 285 });
286 286
287 } 287 }
288 288
289 } 289 }
290 290
291 291
292 // метод, делающий число удобночитаемым (добавляет пробел справа через каждые 3 цифры) 292 // метод, делающий число удобночитаемым (добавляет пробел справа через каждые 3 цифры)
293 prettify(num) { 293 prettify(num) {
294 const withoutSpace = num.replace(/[^\d]/g, ''); //убирает все символы; 294 const withoutSpace = num.replace(/[^\d]/g, ''); //убирает все символы;
295 return withoutSpace.replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' '); //ставит пробелы; 295 return withoutSpace.replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' '); //ставит пробелы;
296 } 296 }
297 297
298 298
299 // фильтры на главном экране 299 // фильтры на главном экране
300 controlFilters() { 300 controlFilters() {
301 301
302 const heroFilters = document.querySelectorAll('.js_hero_filter'); 302 const heroFilters = document.querySelectorAll('.js_hero_filter');
303 const heroSearchBtns = document.querySelectorAll('.js_hero_search_btn'); 303 const heroSearchBtns = document.querySelectorAll('.js_hero_search_btn');
304 304
305 if (heroFilters.length) { 305 if (heroFilters.length) {
306 306
307 heroFilters.forEach(filter => { 307 heroFilters.forEach(filter => {
308 308
309 const heroFilterInput = filter.querySelector('.js_hero_filter_input'); 309 const heroFilterInput = filter.querySelector('.js_hero_filter_input');
310 const heroFilterCurrent = filter.querySelector('.js_hero_filter_current'); 310 const heroFilterCurrent = filter.querySelector('.js_hero_filter_current');
311 const heroFilterItems = filter.querySelectorAll('.hero-filter__item'); 311 const heroFilterItems = filter.querySelectorAll('.hero-filter__item');
312 const heroFilterFields = filter.querySelectorAll('.js_hero_filter_field'); 312 const heroFilterFields = filter.querySelectorAll('.js_hero_filter_field');
313 const heroFilterFrom = filter.querySelector('.js_hero_filter_from'); 313 const heroFilterFrom = filter.querySelector('.js_hero_filter_from');
314 const heroFilterTo = filter.querySelector('.js_hero_filter_to'); 314 const heroFilterTo = filter.querySelector('.js_hero_filter_to');
315 const heroFilterReset = filter.querySelector('.js_hero_filter_reset'); 315 const heroFilterReset = filter.querySelector('.js_hero_filter_reset');
316 316
317 heroFilterCurrent.addEventListener('click', () => { 317 heroFilterCurrent.addEventListener('click', () => {
318 318
319 if (filter.classList.contains('active')) { 319 if (filter.classList.contains('active')) {
320 320
321 filter.classList.remove('active'); 321 filter.classList.remove('active');
322 322
323 heroSearchBtns.forEach(btn => { 323 heroSearchBtns.forEach(btn => {
324 btn.disabled = false; 324 btn.disabled = false;
325 }); 325 });
326 326
327 } else { 327 } else {
328 328
329 heroFilters.forEach(filter => { 329 heroFilters.forEach(filter => {
330 filter.classList.remove('active'); 330 filter.classList.remove('active');
331 }); 331 });
332 332
333 filter.classList.add('active'); 333 filter.classList.add('active');
334 334
335 heroSearchBtns.forEach(btn => { 335 heroSearchBtns.forEach(btn => {
336 btn.disabled = true; 336 btn.disabled = true;
337 }); 337 });
338 338
339 } 339 }
340 340
341 }); 341 });
342 342
343 if (heroFilterItems.length) { 343 if (heroFilterItems.length) {
344 344
345 heroFilterItems.forEach(item => { 345 heroFilterItems.forEach(item => {
346 346
347 item.addEventListener('click', () => { 347 item.addEventListener('click', () => {
348 348
349 heroFilterCurrent.textContent = item.textContent; 349 heroFilterCurrent.textContent = item.textContent;
350 heroFilterInput.value = item.dataset.val; 350 heroFilterInput.value = item.dataset.val;
351 filter.classList.remove('active'); 351 filter.classList.remove('active');
352 352
353 heroSearchBtns.forEach(btn => { 353 heroSearchBtns.forEach(btn => {
354 btn.disabled = false; 354 btn.disabled = false;
355 }); 355 });
356 356
357 }); 357 });
358 358
359 }); 359 });
360 360
361 } 361 }
362 362
363 if (heroFilterFields.length) { 363 if (heroFilterFields.length) {
364 364
365 const heroFilterMin = heroFilterFrom.dataset.min; 365 const heroFilterMin = heroFilterFrom.dataset.min;
366 const heroFilterMax = heroFilterTo.dataset.max; 366 const heroFilterMax = heroFilterTo.dataset.max;
367 367
368 let heroFilterFromVal; 368 let heroFilterFromVal;
369 let heroFilterToVal; 369 let heroFilterToVal;
370 370
371 heroFilterFields.forEach(field => { 371 heroFilterFields.forEach(field => {
372 372
373 field.addEventListener('input', () => { 373 field.addEventListener('input', () => {
374 374
375 field.value = this.prettify(field.value); 375 field.value = this.prettify(field.value);
376 376
377 heroFilterReset.classList.remove('active'); 377 heroFilterReset.classList.remove('active');
378 378
379 heroFilterFields.forEach(field => { 379 heroFilterFields.forEach(field => {
380 380
381 if (field.value != "") { 381 if (field.value != "") {
382 heroFilterReset.classList.add('active'); 382 heroFilterReset.classList.add('active');
383 } 383 }
384 384
385 }); 385 });
386 386
387 }); 387 });
388 388
389 }); 389 });
390 390
391 heroFilterFrom.addEventListener('change', () => { 391 heroFilterFrom.addEventListener('change', () => {
392 392
393 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, ''); 393 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
394 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, ''); 394 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
395 395
396 if (heroFilterToVal != '' && heroFilterFromVal > heroFilterToVal) { 396 if (heroFilterToVal != '' && heroFilterFromVal > heroFilterToVal) {
397 397
398 heroFilterFrom.value = heroFilterTo.value; 398 heroFilterFrom.value = heroFilterTo.value;
399 399
400 } else if (heroFilterFromVal < +heroFilterMin) { 400 } else if (heroFilterFromVal < +heroFilterMin) {
401 401
402 heroFilterFrom.value = this.prettify(heroFilterMin); 402 heroFilterFrom.value = this.prettify(heroFilterMin);
403 403
404 } else if (heroFilterFromVal > +heroFilterMax) { 404 } else if (heroFilterFromVal > +heroFilterMax) {
405 405
406 heroFilterFrom.value = this.prettify(heroFilterMax); 406 heroFilterFrom.value = this.prettify(heroFilterMax);
407 407
408 } 408 }
409 409
410 }); 410 });
411 411
412 heroFilterTo.addEventListener('change', () => { 412 heroFilterTo.addEventListener('change', () => {
413 413
414 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, ''); 414 heroFilterFromVal = +heroFilterFrom.value.replace(/\s/g, '');
415 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, ''); 415 heroFilterToVal = +heroFilterTo.value.replace(/\s/g, '');
416 416
417 if (heroFilterFromVal != '' && heroFilterToVal < heroFilterFromVal) { 417 if (heroFilterFromVal != '' && heroFilterToVal < heroFilterFromVal) {
418 418
419 heroFilterTo.value = heroFilterFrom.value; 419 heroFilterTo.value = heroFilterFrom.value;
420 420
421 } else if (heroFilterToVal < +heroFilterMin) { 421 } else if (heroFilterToVal < +heroFilterMin) {
422 422
423 heroFilterTo.value = this.prettify(heroFilterMax); 423 heroFilterTo.value = this.prettify(heroFilterMax);
424 424
425 } else if (heroFilterToVal > +heroFilterMax) { 425 } else if (heroFilterToVal > +heroFilterMax) {
426 426
427 heroFilterTo.value = this.prettify(heroFilterMax); 427 heroFilterTo.value = this.prettify(heroFilterMax);
428 428
429 } 429 }
430 430
431 }); 431 });
432 432
433 heroFilterReset.addEventListener('click', () => { 433 heroFilterReset.addEventListener('click', () => {
434 434
435 heroFilterFields.forEach(field => { 435 heroFilterFields.forEach(field => {
436 field.value = ''; 436 field.value = '';
437 }); 437 });
438 438
439 heroFilterReset.classList.remove('active'); 439 heroFilterReset.classList.remove('active');
440 440
441 }); 441 });
442 } 442 }
443 443
444 }); 444 });
445 445
446 document.addEventListener('click', (e) => { 446 document.addEventListener('click', (e) => {
447 447
448 if (!e.target.closest('.js_hero_filter_dropdown') && !e.target.closest('.js_hero_filter_current')) { 448 if (!e.target.closest('.js_hero_filter_dropdown') && !e.target.closest('.js_hero_filter_current')) {
449 449
450 heroFilters.forEach(filter => { 450 heroFilters.forEach(filter => {
451 filter.classList.remove('active'); 451 filter.classList.remove('active');
452 }); 452 });
453 453
454 heroSearchBtns.forEach(btn => { 454 heroSearchBtns.forEach(btn => {
455 btn.disabled = false; 455 btn.disabled = false;
456 }); 456 });
457 457
458 } 458 }
459 459
460 }); 460 });
461 461
462 } 462 }
463 463
464 } 464 }
465 465
466 466
467 // открытие/закрытие типовых поп-апов 467 // открытие/закрытие типовых поп-апов
468 controlPopups() { 468 controlPopups() {
469 469
470 const popupShowBtns = document.querySelectorAll('[data-btn]'); 470 const popupShowBtns = document.querySelectorAll('[data-btn]');
471 const popups = document.querySelectorAll('[data-popup]'); 471 const popups = document.querySelectorAll('[data-popup]');
472 472
473 if (popupShowBtns.length) { 473 if (popupShowBtns.length) {
474 474
475 popupShowBtns.forEach(btn => { 475 popupShowBtns.forEach(btn => {
476 476
477 btn.addEventListener('click', (e) => { 477 btn.addEventListener('click', (e) => {
478 478
479 e.preventDefault(); 479 e.preventDefault();
480 480
481 popups.forEach(popup => { 481 popups.forEach(popup => {
482 482
483 popup.classList.remove('active'); // если какойто поп-ап открыт, то закрываем его; 483 popup.classList.remove('active'); // если какойто поп-ап открыт, то закрываем его;
484 this.unfixBodyPosition(); 484 this.unfixBodyPosition();
485 485
486 if (btn.dataset.btn == popup.dataset.popup) { 486 if (btn.dataset.btn == popup.dataset.popup) {
487 popup.classList.add('active'); 487 popup.classList.add('active');
488 this.fixBodyPosition(); 488 this.fixBodyPosition();
489 } 489 }
490 490
491 }); 491 });
492 492
493 493
494 }); 494 });
495 495
496 }); 496 });
497 497
498 popups.forEach(popup => { 498 popups.forEach(popup => {
499 499
500 const popupCloseBtns = popup.querySelectorAll('.js_popup_close'); 500 const popupCloseBtns = popup.querySelectorAll('.js_popup_close');
501 501
502 popupCloseBtns.forEach(btn => { 502 popupCloseBtns.forEach(btn => {
503 503
504 btn.addEventListener('click', (e) => { 504 btn.addEventListener('click', (e) => {
505 e.preventDefault(); 505 e.preventDefault();
506 popup.classList.remove('active'); 506 popup.classList.remove('active');
507 this.unfixBodyPosition(); 507 this.unfixBodyPosition();
508 }); 508 });
509 509
510 }); 510 });
511 511
512 popup.addEventListener('click', (e) => { 512 popup.addEventListener('click', (e) => {
513 513
514 if (e.target == popup) { 514 if (e.target == popup) {
515 515
516 popup.classList.remove('active'); 516 popup.classList.remove('active');
517 this.unfixBodyPosition(); 517 this.unfixBodyPosition();
518 } 518 }
519 519
520 }); 520 });
521 521
522 }); 522 });
523 523
524 } 524 }
525 } 525 }
526 526
527 527
528 // открытие/закрытие поп-апа 'обратный звонок' 528 // открытие/закрытие поп-апа 'обратный звонок'
529 controlContactUsPopup() { 529 controlContactUsPopup() {
530 530
531 const contactUsBtn = document.querySelector('.js_btn_contact_us'); 531 const contactUsBtn = document.querySelector('.js_btn_contact_us');
532 const contactUsPopup = document.querySelector('.js_contact_us'); 532 const contactUsPopup = document.querySelector('.js_contact_us');
533 533
534 if (contactUsPopup) { 534 if (contactUsPopup) {
535 535
536 const contactUsPopupCloseBtns = contactUsPopup.querySelectorAll('.js_contact_us_close'); 536 const contactUsPopupCloseBtns = contactUsPopup.querySelectorAll('.js_contact_us_close');
537 537
538 contactUsBtn.addEventListener('click', (e) => { 538 contactUsBtn.addEventListener('click', (e) => {
539 539
540 e.preventDefault(); 540 e.preventDefault();
541 541
542 if (contactUsPopup.classList.contains('active')) { 542 if (contactUsPopup.classList.contains('active')) {
543 contactUsPopup.classList.remove('active'); 543 contactUsPopup.classList.remove('active');
544 } else { 544 } else {
545 contactUsPopup.classList.add('active'); 545 contactUsPopup.classList.add('active');
546 } 546 }
547 547
548 }); 548 });
549 549
550 contactUsPopupCloseBtns.forEach(btn => { 550 contactUsPopupCloseBtns.forEach(btn => {
551 btn.addEventListener('click', () => { 551 btn.addEventListener('click', () => {
552 contactUsPopup.classList.remove('active'); 552 contactUsPopup.classList.remove('active');
553 }); 553 });
554 }); 554 });
555 555
556 556
557 document.addEventListener('click', (e) => { 557 document.addEventListener('click', (e) => {
558 558
559 if (!e.target.closest('.js_contact_us') && !e.target.closest('.js_btn_contact_us')) { 559 if (!e.target.closest('.js_contact_us') && !e.target.closest('.js_btn_contact_us')) {
560 contactUsPopup.classList.remove('active'); 560 contactUsPopup.classList.remove('active');
561 } 561 }
562 562
563 }); 563 });
564 564
565 } 565 }
566 566
567 } 567 }
568 568
569 569
570 // валидатор форм 570 // валидатор форм
571 validateForm(input) { 571 validateForm(input) {
572 572
573 // функция добавления ошибки 573 // функция добавления ошибки
574 const createError = (text) => { 574 const createError = (text) => {
575 575
576 input.classList.add('error'); 576 input.classList.add('error');
577 input.classList.remove('no-error'); 577 input.classList.remove('no-error');
578 578
579 if (input.closest('label').querySelector('span.error')) { 579 if (input.closest('label').querySelector('span.error')) {
580 input.closest('label').querySelector('span.error').remove(); 580 input.closest('label').querySelector('span.error').remove();
581 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`); 581 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
582 } else { 582 } else {
583 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`); 583 input.closest('label').insertAdjacentHTML('beforeend', `<span class="error">${text}</span>`);
584 } 584 }
585 585
586 } 586 }
587 587
588 // функция удаления ошибки 588 // функция удаления ошибки
589 const removeError = () => { 589 const removeError = () => {
590 590
591 input.classList.remove('error'); 591 input.classList.remove('error');
592 input.classList.add('no-error'); 592 input.classList.add('no-error');
593 593
594 if (input.closest('label').querySelector('span.error')) { 594 if (input.closest('label').querySelector('span.error')) {
595 input.closest('label').querySelector('span.error').remove(); 595 input.closest('label').querySelector('span.error').remove();
596 } 596 }
597 597
598 } 598 }
599 599
600 // проверяем на правильность заполнения поля 'Телефон' 600 // проверяем на правильность заполнения поля 'Телефон'
601 if (input.classList.contains('js_input_phone') && input.value == "") { 601 if (input.classList.contains('js_input_phone') && input.value == "") {
602 createError('Заполните, пожалуйста, поле'); 602 createError('Заполните, пожалуйста, поле');
603 } else if (input.classList.contains('js_input_phone') && input.value.search(this.patternPhone) == 0) { 603 } else if (input.classList.contains('js_input_phone') && input.value.search(this.patternPhone) == 0) {
604 removeError(); 604 removeError();
605 } else if (input.classList.contains('js_input_phone')) { 605 } else if (input.classList.contains('js_input_phone')) {
606 createError('Укажите, пожалуйста, корректный телефон'); 606 createError('Укажите, пожалуйста, корректный телефон');
607 } 607 }
608 608
609 // проверяем правильность заполнения поля 'Электронная почта' 609 // проверяем правильность заполнения поля 'Электронная почта'
610 if (input.classList.contains('js_input_email') && input.value == "") { 610 if (input.classList.contains('js_input_email') && input.value == "") {
611 createError('Заполните, пожалуйста, поле'); 611 createError('Заполните, пожалуйста, поле');
612 } else if (input.classList.contains('js_input_email') && input.value.search(this.patternEmail) == 0) { 612 } else if (input.classList.contains('js_input_email') && input.value.search(this.patternEmail) == 0) {
613 removeError(); 613 removeError();
614 } else if (input.classList.contains('js_input_email')) { 614 } else if (input.classList.contains('js_input_email')) {
615 createError('Укажите, пожалуйста, корректный e-mail'); 615 createError('Укажите, пожалуйста, корректный e-mail');
616 } 616 }
617 617
618 } 618 }
619 619
620 620
621 // отправка форм 621 // отправка форм
622 sendForm(formEl, url, success) { 622 sendForm(formEl, url, success) {
623 623
624 const form = document.querySelector(formEl); 624 const form = document.querySelector(formEl);
625 625
626 if (form) { 626 if (form) {
627 627
628 form.addEventListener('submit', async (e) => { 628 form.addEventListener('submit', async (e) => {
629 629
630 e.preventDefault(); 630 e.preventDefault();
631 631
632 const formInputs = form.querySelectorAll('input'); 632 const formInputs = form.querySelectorAll('input');
633 const formBtn = form.querySelector('.js_form_btn'); 633 const formBtn = form.querySelector('.js_form_btn');
634 634
635 formInputs.forEach(input => { // перебираем все инпуты в форме; 635 formInputs.forEach(input => { // перебираем все инпуты в форме;
636 636
637 this.validateForm(input); 637 this.validateForm(input);
638 638
639 input.addEventListener('input', () => { 639 input.addEventListener('input', () => {
640 this.validateForm(input); 640 this.validateForm(input);
641 }); 641 });
642 642
643 }); 643 });
644 644
645 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error); 645 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
646 646
647 // сюда пишем команды, которые должны сработать после успешной валидации; 647 // сюда пишем команды, которые должны сработать после успешной валидации;
648 648
649 console.log('validate'); 649 console.log('validate');
650 formBtn.classList.add('btn-animate'); 650 formBtn.classList.add('btn-animate');
651 formBtn.disabled = true; 651 formBtn.disabled = true;
652 652
653 const formData = new FormData(form); 653 const formData = new FormData(form);
654 654
655 // console.log(...formData); 655 // console.log(...formData);
656 656
657 const response = await fetch(url, { 657 const response = await fetch(url, {
658 method: "POST", 658 method: "POST",
659 body: formData 659 body: formData
660 }); 660 });
661 661
662 if (response.ok) { 662 if (response.ok) {
663 663
664 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его; 664 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
665 665
666 console.log('Отправлено'); 666 console.log('Отправлено');
667 formBtn.classList.remove('btn-animate'); 667 formBtn.classList.remove('btn-animate');
668 formBtn.disabled = false; 668 formBtn.disabled = false;
669 if (document.querySelector('[data-popup="feedback"]')) { 669 if (document.querySelector('[data-popup="feedback"]')) {
670 document.querySelector('[data-popup="feedback"]').classList.remove('active'); 670 document.querySelector('[data-popup="feedback"]').classList.remove('active');
671 } 671 }
672 if (document.querySelector('[data-popup="viewing"]')) { 672 if (document.querySelector('[data-popup="viewing"]')) {
673 document.querySelector('[data-popup="viewing"]').classList.remove('active'); 673 document.querySelector('[data-popup="viewing"]').classList.remove('active');
674 } 674 }
675 document.querySelector(success).classList.add('active'); 675 document.querySelector(success).classList.add('active');
676 this.fixBodyPosition(); 676 this.fixBodyPosition();
677 form.reset(); 677 form.reset();
678 678
679 formInputs.forEach(input => { 679 formInputs.forEach(input => {
680 input.classList.remove('no-error'); 680 input.classList.remove('no-error');
681 }); 681 });
682 682
683 }, 2000) 683 }, 2000)
684 684
685 } else { 685 } else {
686 formBtn.classList.remove('btn-animate'); 686 formBtn.classList.remove('btn-animate');
687 formBtn.disabled = false; 687 formBtn.disabled = false;
688 alert('Ошибка'); 688 alert('Ошибка');
689 } 689 }
690 690
691 } else { 691 } else {
692 console.log('no-validate'); 692 console.log('no-validate');
693 form.querySelector('.error').focus(); //фокус к полю с ошибкой; 693 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
694 } 694 }
695 695
696 }); 696 });
697 697
698 } 698 }
699 699
700 } 700 }
701 701
702 //отправка предложения по e-mail 702 //отправка предложения по e-mail
703 sendOffer() { 703 sendOffer() {
704 704
705 const form = document.querySelector('.js_popup_sending_form'); 705 const form = document.querySelector('.js_popup_sending_form');
706 706
707 if (form) { 707 if (form) {
708 708
709 form.addEventListener('submit', async (e) => { 709 form.addEventListener('submit', async (e) => {
710 710
711 e.preventDefault(); 711 e.preventDefault();
712 712
713 const formInputs = form.querySelectorAll('input'); 713 const formInputs = form.querySelectorAll('input');
714 const formBtn = form.querySelector('.js_form_btn'); 714 const formBtn = form.querySelector('.js_form_btn');
715 715
716 formInputs.forEach(input => { // перебираем все инпуты в форме; 716 formInputs.forEach(input => { // перебираем все инпуты в форме;
717 717
718 this.validateForm(input); 718 this.validateForm(input);
719 719
720 input.addEventListener('input', () => { 720 input.addEventListener('input', () => {
721 this.validateForm(input); 721 this.validateForm(input);
722 }); 722 });
723 723
724 }); 724 });
725 725
726 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error); 726 if (!form.querySelector('.error')) { //проверяем, чтоб все инпуты прошли валидацию (чтоб не было в форме ни одного элемента с класссом error);
727 727
728 // сюда пишем команды, которые должны сработать после успешной валидации; 728 // сюда пишем команды, которые должны сработать после успешной валидации;
729 729
730 console.log('validate'); 730 console.log('validate');
731 formBtn.classList.add('btn-animate'); 731 formBtn.classList.add('btn-animate');
732 formBtn.disabled = true; 732 formBtn.disabled = true;
733 733
734 const formData = new FormData(form); 734 const formData = new FormData(form);
735 735
736 // console.log(...formData); 736 // console.log(...formData);
737 737
738 const response = await fetch('server.php', { 738 const response = await fetch('server.php', {
739 method: "POST", 739 method: "POST",
740 body: formData 740 body: formData
741 }); 741 });
742 742
743 if (response.ok) { 743 if (response.ok) {
744 744
745 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его; 745 setTimeout(() => { // имитация отправки, когда отправка будет настроена, нужно достать всё из setTimeout() и удалить его;
746 746
747 console.log('Отправлено'); 747 console.log('Отправлено');
748 formBtn.classList.remove('btn-animate'); 748 formBtn.classList.remove('btn-animate');
749 formBtn.disabled = false; 749 formBtn.disabled = false;
750 if (document.querySelector('[data-popup="sending"]')) { 750 if (document.querySelector('[data-popup="sending"]')) {
751 document.querySelector('[data-popup="sending"]').classList.remove('active'); 751 document.querySelector('[data-popup="sending"]').classList.remove('active');
752 } 752 }
753 this.fixBodyPosition(); 753 this.fixBodyPosition();
754 form.reset(); 754 form.reset();
755 755
756 formInputs.forEach(input => { 756 formInputs.forEach(input => {
757 input.classList.remove('no-error'); 757 input.classList.remove('no-error');
758 }); 758 });
759 759
760 }, 2000) 760 }, 2000)
761 761
762 } else { 762 } else {
763 formBtn.classList.remove('btn-animate'); 763 formBtn.classList.remove('btn-animate');
764 formBtn.disabled = false; 764 formBtn.disabled = false;
765 alert('Ошибка'); 765 alert('Ошибка');
766 } 766 }
767 767
768 } else { 768 } else {
769 console.log('no-validate'); 769 console.log('no-validate');
770 form.querySelector('.error').focus(); //фокус к полю с ошибкой; 770 form.querySelector('.error').focus(); //фокус к полю с ошибкой;
771 } 771 }
772 772
773 }); 773 });
774 774
775 } 775 }
776 776
777 } 777 }
778 778
779 779
780 // карта на странице 'ЖК' 780 // карта на странице 'ЖК'
781 setComplexMap(id, coords, caption) { 781 setComplexMap(id, coords, caption) {
782 782
783 if (document.querySelector('#' + id)) { 783 if (document.querySelector('#' + id)) {
784 784
785 // Дождёмся загрузки API и готовности DOM. 785 // Дождёмся загрузки API и готовности DOM.
786 ymaps.ready(init); 786 ymaps.ready(init);
787 787
788 function init() { 788 function init() {
789 const map = new ymaps.Map(id, { 789 const map = new ymaps.Map(id, {
790 // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования. 790 // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования.
791 center: coords, 791 center: coords,
792 zoom: 16, 792 zoom: 16,
793 controls: [] 793 controls: []
794 }); 794 });
795 795
796 // Создаём макет содержимого. 796 // Создаём макет содержимого.
797 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass( 797 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
798 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>' 798 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
799 ); 799 );
800 800
801 // Создание макета содержимого хинта. 801 // Создание макета содержимого хинта.
802 // Макет создается через фабрику макетов с помощью текстового шаблона. 802 // Макет создается через фабрику макетов с помощью текстового шаблона.
803 const HintLayout = ymaps.templateLayoutFactory.createClass("<div class='my-hint'>" + 803 const HintLayout = ymaps.templateLayoutFactory.createClass("<div class='my-hint'>" +
804 "{{ properties.object }}" + "</div>", { 804 "{{ properties.object }}" + "</div>", {
805 // Определяем метод getShape, который 805 // Определяем метод getShape, который
806 // будет возвращать размеры макета хинта. 806 // будет возвращать размеры макета хинта.
807 // Это необходимо для того, чтобы хинт автоматически 807 // Это необходимо для того, чтобы хинт автоматически
808 // сдвигал позицию при выходе за пределы карты. 808 // сдвигал позицию при выходе за пределы карты.
809 getShape: function () { 809 getShape: function () {
810 let el = this.getElement(), 810 let el = this.getElement(),
811 result = null; 811 result = null;
812 if (el) { 812 if (el) {
813 var firstChild = el.firstChild; 813 var firstChild = el.firstChild;
814 result = new ymaps.shape.Rectangle( 814 result = new ymaps.shape.Rectangle(
815 new ymaps.geometry.pixel.Rectangle([ 815 new ymaps.geometry.pixel.Rectangle([
816 [0, 0], 816 [0, 0],
817 [firstChild.offsetWidth, firstChild.offsetHeight] 817 [firstChild.offsetWidth, firstChild.offsetHeight]
818 ]) 818 ])
819 ); 819 );
820 } 820 }
821 return result; 821 return result;
822 } 822 }
823 } 823 }
824 ); 824 );
825 825
826 // метка 826 // метка
827 const placemark = new ymaps.Placemark(coords, { 827 const placemark = new ymaps.Placemark(coords, {
828 // hintContent: caption, 828 // hintContent: caption,
829 // balloonContent: caption, 829 // balloonContent: caption,
830 iconContent: '1', 830 iconContent: '1',
831 // address: caption, 831 // address: caption,
832 object: caption 832 object: caption
833 }, { 833 }, {
834 iconLayout: 'default#imageWithContent', 834 iconLayout: 'default#imageWithContent',
835 iconImageHref: 'images/mark-complex.svg', 835 iconImageHref: 'images/mark-complex.svg',
836 iconImageSize: [52, 67], 836 iconImageSize: [52, 67],
837 iconImageOffset: [-26, -67], 837 iconImageOffset: [-26, -67],
838 iconContentOffset: [0, 17], 838 iconContentOffset: [0, 17],
839 iconContentLayout: MyIconContentLayout, 839 iconContentLayout: MyIconContentLayout,
840 hintLayout: HintLayout 840 hintLayout: HintLayout
841 }); 841 });
842 842
843 map.geoObjects.add(placemark); 843 map.geoObjects.add(placemark);
844 844
845 } 845 }
846 846
847 } 847 }
848 848
849 } 849 }
850 850
851 851
852 // фильтры и сортировка на странице 'каталог' 852 // фильтры и сортировка на странице 'каталог'
853 setCatalogSorts() { 853 setCatalogSorts() {
854 854
855 const sortGroups = document.querySelectorAll('.js_sort_group'); 855 const sortGroups = document.querySelectorAll('.js_sort_group');
856 856
857 if (sortGroups.length) { 857 if (sortGroups.length) {
858 858
859 sortGroups.forEach(group => { 859 sortGroups.forEach(group => {
860 860
861 const sortGroupInput = group.querySelector('.js_sort_group_input'); 861 const sortGroupInput = group.querySelector('.js_sort_group_input');
862 const sortGroupCurrent = group.querySelector('.js_sort_group_current'); 862 const sortGroupCurrent = group.querySelector('.js_sort_group_current');
863 const sortGroupList = group.querySelector('.js_sort_group_list'); 863 const sortGroupList = group.querySelector('.js_sort_group_list');
864 const sortGroupItems = group.querySelectorAll('.js_sort_group_item'); 864 const sortGroupItems = group.querySelectorAll('.js_sort_group_item');
865 865
866 const sendRequest = () => { 866 const sendRequest = () => {
867 867
868 const spinner = document.querySelector('.spinner'); // спиннер; 868 const spinner = document.querySelector('.spinner'); // спиннер;
869 869
870 spinner.classList.add('active'); 870 spinner.classList.add('active');
871 document.body.classList.add('overlay'); 871 document.body.classList.add('overlay');
872 //this.fixBodyPosition(); 872 //this.fixBodyPosition();
873 873
874 /* 874 /*
875 fetch('test.json') 875 fetch('test.json')
876 .then(response => response.json()) 876 .then(response => response.json())
877 .then(data => { 877 .then(data => {
878 878
879 console.log() 879 console.log()
880 880
881 setTimeout(() => { //имитация ответа сервера 881 setTimeout(() => { //имитация ответа сервера
882 882
883 spinner.classList.remove('active'); 883 spinner.classList.remove('active');
884 document.body.classList.remove('overlay'); 884 document.body.classList.remove('overlay');
885 this.unfixBodyPosition(); 885 this.unfixBodyPosition();
886 886
887 }, 3000); 887 }, 3000);
888 888
889 }) 889 })
890 .catch(err => { 890 .catch(err => {
891 console.log(err); 891 console.log(err);
892 }); 892 });
893 */ 893 */
894 spinner.classList.remove('active'); 894 spinner.classList.remove('active');
895 document.body.classList.remove('overlay'); 895 document.body.classList.remove('overlay');
896 //this.unfixBodyPosition(); 896 //this.unfixBodyPosition();
897 897
898 }; 898 };
899 899
900 sortGroupCurrent.addEventListener('click', () => { 900 sortGroupCurrent.addEventListener('click', () => {
901 901
902 if (group.classList.contains('active')) { 902 if (group.classList.contains('active')) {
903 903
904 group.classList.remove('active'); 904 group.classList.remove('active');
905 905
906 } else { 906 } else {
907 907
908 sortGroups.forEach(group => { 908 sortGroups.forEach(group => {
909 group.classList.remove('active'); 909 group.classList.remove('active');
910 }); 910 });
911 911
912 group.classList.add('active'); 912 group.classList.add('active');
913 913
914 } 914 }
915 915
916 }); 916 });
917 917
918 sortGroupItems.forEach(item => { 918 sortGroupItems.forEach(item => {
919 919
920 item.addEventListener('click', () => { 920 item.addEventListener('click', () => {
921 921
922 sortGroupItems.forEach(item => { 922 sortGroupItems.forEach(item => {
923 item.classList.remove('active'); 923 item.classList.remove('active');
924 }); 924 });
925 925
926 item.classList.add('active'); 926 item.classList.add('active');
927 sortGroupCurrent.textContent = item.textContent; 927 sortGroupCurrent.textContent = item.textContent;
928 sortGroupInput.value = item.dataset.val; 928 sortGroupInput.value = item.dataset.val;
929 group.classList.remove('active'); 929 group.classList.remove('active');
930 930
931 sendRequest(); 931 sendRequest();
932 932
933 }); 933 });
934 934
935 }); 935 });
936 936
937 }); 937 });
938 938
939 document.addEventListener('click', (e) => { 939 document.addEventListener('click', (e) => {
940 940
941 if (!e.target.closest('.js_sort_group_list') && !e.target.closest('.js_sort_group_current')) { 941 if (!e.target.closest('.js_sort_group_list') && !e.target.closest('.js_sort_group_current')) {
942 942
943 sortGroups.forEach(group => { 943 sortGroups.forEach(group => {
944 group.classList.remove('active'); 944 group.classList.remove('active');
945 }); 945 });
946 946
947 } 947 }
948 948
949 }); 949 });
950 950
951 } 951 }
952 952
953 } 953 }
954 954
955 955
956 // слайдер на странице жк и на странице предложения 956 // слайдер на странице жк и на странице предложения
957 initIntroSlider() { 957 initIntroSlider() {
958 958
959 let swiper3 = new Swiper('.intro__swiper', { 959 let swiper3 = new Swiper('.intro__swiper', {
960 navigation: { 960 navigation: {
961 nextEl: '.swiper-button-next', 961 nextEl: '.swiper-button-next',
962 prevEl: '.swiper-button-prev', 962 prevEl: '.swiper-button-prev',
963 }, 963 },
964 pagination: { 964 pagination: {
965 el: '.swiper-pagination', 965 el: '.swiper-pagination',
966 clickable: true, 966 clickable: true,
967 }, 967 },
968 slidesPerView: 1.1, 968 slidesPerView: 1.1,
969 spaceBetween: 20, 969 spaceBetween: 20,
970 breakpoints: { 970 breakpoints: {
971 480: { 971 480: {
972 slidesPerView: 1.5, 972 slidesPerView: 1.5,
973 }, 973 },
974 640: { 974 640: {
975 slidesPerView: 1.75, 975 slidesPerView: 1.75,
976 }, 976 },
977 780: { 977 780: {
978 slidesPerView: 2.15, 978 slidesPerView: 2.15,
979 }, 979 },
980 1024: { 980 1024: {
981 slidesPerView: 3.5, 981 slidesPerView: 3.5,
982 }, 982 },
983 1200: { 983 1200: {
984 slidesPerView: 1, 984 slidesPerView: 1,
985 } 985 }
986 } 986 }
987 }); 987 });
988 988
989 } 989 }
990 990
991 991
992 // табы на странице предложения 992 // табы на странице предложения
993 setTabs(tabs, items) { 993 setTabs(tabs, items) {
994 994
995 const offerSideTabs = document.querySelectorAll(tabs); 995 const offerSideTabs = document.querySelectorAll(tabs);
996 const offerSideItems = document.querySelectorAll(items); 996 const offerSideItems = document.querySelectorAll(items);
997 997
998 if (offerSideTabs) { 998 if (offerSideTabs) {
999 999
1000 offerSideTabs.forEach(tab => { 1000 offerSideTabs.forEach(tab => {
1001 1001
1002 tab.addEventListener('click', () => { 1002 tab.addEventListener('click', () => {
1003 1003
1004 offerSideTabs.forEach(tab => { 1004 offerSideTabs.forEach(tab => {
1005 tab.classList.remove('active'); 1005 tab.classList.remove('active');
1006 }); 1006 });
1007 1007
1008 tab.classList.add('active'); 1008 tab.classList.add('active');
1009 1009
1010 offerSideItems.forEach(item => { 1010 offerSideItems.forEach(item => {
1011 1011
1012 item.classList.remove('active', 'fade'); 1012 item.classList.remove('active', 'fade');
1013 1013
1014 if (tab.dataset.tab == item.dataset.item) { 1014 if (tab.dataset.tab == item.dataset.item) {
1015 item.classList.add('active', 'fade'); 1015 item.classList.add('active', 'fade');
1016 } 1016 }
1017 1017
1018 }); 1018 });
1019 1019
1020 }); 1020 });
1021 1021
1022 }); 1022 });
1023 1023
1024 } 1024 }
1025 1025
1026 } 1026 }
1027 1027
1028 1028
1029 // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения 1029 // логика открытия нужного таба при открытии поп-апа с планами объекат и этажа на странице предложения
1030 sontrolOfferSidePopup() { 1030 sontrolOfferSidePopup() {
1031 1031
1032 const offerSideItems = document.querySelectorAll('.js_offer_side_item'); 1032 const offerSideItems = document.querySelectorAll('.js_offer_side_item');
1033 const offerSidePopupTabs = document.querySelectorAll('.js_offer_side_popup_tab'); 1033 const offerSidePopupTabs = document.querySelectorAll('.js_offer_side_popup_tab');
1034 const offerSidePopupItems = document.querySelectorAll('.js_offer_side_popup_item'); 1034 const offerSidePopupItems = document.querySelectorAll('.js_offer_side_popup_item');
1035 1035
1036 if (offerSideItems) { 1036 if (offerSideItems) {
1037 1037
1038 offerSideItems.forEach(item => { 1038 offerSideItems.forEach(item => {
1039 1039
1040 const offerSideItemBtn = item.querySelector('.js_offer_side_item_btn'); 1040 const offerSideItemBtn = item.querySelector('.js_offer_side_item_btn');
1041 1041
1042 offerSideItemBtn.addEventListener('click', (e) => { 1042 offerSideItemBtn.addEventListener('click', (e) => {
1043 1043
1044 e.preventDefault(); 1044 e.preventDefault();
1045 1045
1046 offerSidePopupTabs.forEach(tab => { 1046 offerSidePopupTabs.forEach(tab => {
1047 1047
1048 tab.classList.remove('active'); 1048 tab.classList.remove('active');
1049 1049
1050 if (item.dataset.item == tab.dataset.tab) { 1050 if (item.dataset.item == tab.dataset.tab) {
1051 tab.classList.add('active'); 1051 tab.classList.add('active');
1052 } 1052 }
1053 1053
1054 }); 1054 });
1055 1055
1056 offerSidePopupItems.forEach(el => { 1056 offerSidePopupItems.forEach(el => {
1057 1057
1058 el.classList.remove('active', 'fade'); 1058 el.classList.remove('active', 'fade');
1059 1059
1060 if (item.dataset.item == el.dataset.item) { 1060 if (item.dataset.item == el.dataset.item) {
1061 el.classList.add('active', 'fade'); 1061 el.classList.add('active', 'fade');
1062 } 1062 }
1063 1063
1064 }); 1064 });
1065 1065
1066 }); 1066 });
1067 1067
1068 }); 1068 });
1069 1069
1070 } 1070 }
1071 1071
1072 } 1072 }
1073 1073
1074 1074
1075 // галлерея 1075 // галлерея
1076 setCustomGallery() { 1076 setCustomGallery() {
1077 1077
1078 let swiper4 = new Swiper(".img-viewer__thumbs-swiper", { 1078 let swiper4 = new Swiper(".img-viewer__thumbs-swiper", {
1079 slidesPerView: 3, 1079 slidesPerView: 3,
1080 spaceBetween: 8, 1080 spaceBetween: 8,
1081 // freeMode: true, 1081 // freeMode: true,
1082 observer: true, 1082 observer: true,
1083 observeParents: true, 1083 observeParents: true,
1084 observeSlideChildren: true, 1084 observeSlideChildren: true,
1085 breakpoints: { 1085 breakpoints: {
1086 640: { 1086 640: {
1087 spaceBetween: 10, 1087 spaceBetween: 10,
1088 }, 1088 },
1089 }, 1089 },
1090 }); 1090 });
1091 1091
1092 let swiper5 = new Swiper(".img-viewer__slider .swiper", { 1092 let swiper5 = new Swiper(".img-viewer__slider .swiper", {
1093 navigation: { 1093 navigation: {
1094 nextEl: ".img-viewer__slider .swiper-button-next", 1094 nextEl: ".img-viewer__slider .swiper-button-next",
1095 prevEl: ".img-viewer__slider .swiper-button-prev", 1095 prevEl: ".img-viewer__slider .swiper-button-prev",
1096 }, 1096 },
1097 slidesPerView: 1, 1097 slidesPerView: 1,
1098 spaceBetween: 20, 1098 spaceBetween: 20,
1099 thumbs: { 1099 thumbs: {
1100 swiper: swiper4 1100 swiper: swiper4
1101 }, 1101 },
1102 observer: true, 1102 observer: true,
1103 observeParents: true, 1103 observeParents: true,
1104 observeSlideChildren: true, 1104 observeSlideChildren: true,
1105 }); 1105 });
1106 1106
1107 if (document.querySelector('.js_intro_item_btn')) { 1107 if (document.querySelector('.js_intro_item_btn')) {
1108 1108
1109 const imgViewer = document.querySelector('.js_img_viewer'); 1109 const imgViewer = document.querySelector('.js_img_viewer');
1110 const imgViewerCloses = imgViewer.querySelectorAll('.js_img_viewer_close'); 1110 const imgViewerCloses = imgViewer.querySelectorAll('.js_img_viewer_close');
1111 const imgViewerCaption = imgViewer.querySelector('.js_img_viewer_caption'); 1111 const imgViewerCaption = imgViewer.querySelector('.js_img_viewer_caption');
1112 1112
1113 const imgViewerSliderSwiper = imgViewer.querySelector('.js_img_viewer_slider_swiper'); 1113 const imgViewerSliderSwiper = imgViewer.querySelector('.js_img_viewer_slider_swiper');
1114 const imgViewerSliderSwiperWrap = imgViewerSliderSwiper.querySelector('.js_img_viewer_slider_swiper .swiper-wrapper'); 1114 const imgViewerSliderSwiperWrap = imgViewerSliderSwiper.querySelector('.js_img_viewer_slider_swiper .swiper-wrapper');
1115 1115
1116 const imgViewerThumbsSwiper = imgViewer.querySelector('.js_img_viewer_thumbs_swiper'); 1116 const imgViewerThumbsSwiper = imgViewer.querySelector('.js_img_viewer_thumbs_swiper');
1117 const imgViewerThumbsSwiperWrap = imgViewerThumbsSwiper.querySelector('.js_img_viewer_thumbs_swiper .swiper-wrapper'); 1117 const imgViewerThumbsSwiperWrap = imgViewerThumbsSwiper.querySelector('.js_img_viewer_thumbs_swiper .swiper-wrapper');
1118 1118
1119 const introItemBtns = document.querySelectorAll('.js_intro_item_btn'); 1119 const introItemBtns = document.querySelectorAll('.js_intro_item_btn');
1120 1120
1121 introItemBtns.forEach((btn, i) => { 1121 introItemBtns.forEach((btn, i) => {
1122 1122
1123 btn.addEventListener('click', (e) => { 1123 btn.addEventListener('click', (e) => {
1124 1124
1125 e.preventDefault(); 1125 e.preventDefault();
1126 1126
1127 imgViewer.classList.add('active'); 1127 imgViewer.classList.add('active');
1128 this.fixBodyPosition(); 1128 this.fixBodyPosition();
1129 1129
1130 imgViewerSliderSwiperWrap.innerHTML = ''; 1130 imgViewerSliderSwiperWrap.innerHTML = '';
1131 imgViewerThumbsSwiperWrap.innerHTML = ''; 1131 imgViewerThumbsSwiperWrap.innerHTML = '';
1132 imgViewerCaption.textContent = ''; 1132 imgViewerCaption.textContent = '';
1133 1133
1134 1134
1135 introItemBtns.forEach(btn => { 1135 introItemBtns.forEach(btn => {
1136 1136
1137 imgViewerSliderSwiperWrap.insertAdjacentHTML('beforeend', ` 1137 imgViewerSliderSwiperWrap.insertAdjacentHTML('beforeend', `
1138 <div class="swiper-slide"> 1138 <div class="swiper-slide">
1139 <img src="${btn.getAttribute('href')}" alt=""> 1139 <img src="${btn.getAttribute('href')}" alt="">
1140 </div>` 1140 </div>`
1141 ); 1141 );
1142 1142
1143 imgViewerThumbsSwiperWrap.insertAdjacentHTML('beforeend', ` 1143 imgViewerThumbsSwiperWrap.insertAdjacentHTML('beforeend', `
1144 <div class="swiper-slide"> 1144 <div class="swiper-slide">
1145 <img src="${btn.getAttribute('href')}" alt=""> 1145 <img src="${btn.getAttribute('href')}" alt="">
1146 </div>` 1146 </div>`
1147 ); 1147 );
1148 1148
1149 }); 1149 });
1150 1150
1151 swiper4.update(); 1151 swiper4.update();
1152 swiper5.update(); 1152 swiper5.update();
1153 swiper5.slideTo(i); 1153 swiper5.slideTo(i);
1154 imgViewerCaption.textContent = btn.dataset.caption; 1154 imgViewerCaption.textContent = btn.dataset.caption;
1155 1155
1156 }); 1156 });
1157 1157
1158 }); 1158 });
1159 1159
1160 swiper5.on('slideChange', function () { 1160 swiper5.on('slideChange', function () {
1161 imgViewerCaption.textContent = introItemBtns[swiper5.realIndex].dataset.caption; 1161 imgViewerCaption.textContent = introItemBtns[swiper5.realIndex].dataset.caption;
1162 }); 1162 });
1163 1163
1164 imgViewerCloses.forEach(close => { 1164 imgViewerCloses.forEach(close => {
1165 1165
1166 close.addEventListener('click', () => { 1166 close.addEventListener('click', () => {
1167 1167
1168 imgViewer.classList.remove('active'); 1168 imgViewer.classList.remove('active');
1169 this.unfixBodyPosition(); 1169 this.unfixBodyPosition();
1170 1170
1171 }); 1171 });
1172 1172
1173 }); 1173 });
1174 1174
1175 } 1175 }
1176 1176
1177 } 1177 }
1178 1178
1179 1179
1180 // куки 1180 // куки
1181 setCookies() { 1181 setCookies() {
1182 1182
1183 const cookies = document.querySelector('.js_cookies'); 1183 const cookies = document.querySelector('.js_cookies');
1184 const cookiesBtn = document.querySelector('.js_cookies_confirm'); 1184 const cookiesBtn = document.querySelector('.js_cookies_confirm');
1185 const cookiesTrigger = document.querySelector('.js_btn_cookies'); 1185 const cookiesTrigger = document.querySelector('.js_btn_cookies');
1186 1186
1187 if (cookiesTrigger) { 1187 if (cookiesTrigger) {
1188 1188
1189 cookiesTrigger.addEventListener('click', () => { 1189 cookiesTrigger.addEventListener('click', () => {
1190 cookies.classList.add('active'); 1190 cookies.classList.add('active');
1191 }); 1191 });
1192 1192
1193 }; 1193 };
1194 1194
1195 if (cookies) { 1195 if (cookies) {
1196 1196
1197 cookiesBtn.addEventListener('click', () => { 1197 cookiesBtn.addEventListener('click', () => {
1198 cookies.classList.remove('active'); 1198 cookies.classList.remove('active');
1199 }); 1199 });
1200 1200
1201 }; 1201 };
1202 1202
1203 } 1203 }
1204 1204
1205 1205
1206 // карта на странице карт; 1206 // карта на странице карт;
1207 setGeneralMap() { 1207 setGeneralMap() {
1208 1208
1209 if (document.querySelector('#general-map')) { 1209 if (document.querySelector('#general-map')) {
1210 1210
1211 ymaps.ready(init); // Дождёмся загрузки API и готовности DOM; 1211 ymaps.ready(init); // Дождёмся загрузки API и готовности DOM;
1212 1212
1213 function init() { 1213 function init() {
1214 1214
1215 const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id; 1215 const myMap = new ymaps.Map('general-map', { // Создание экземпляра карты и его привязка к контейнеру с заданным id;
1216 center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования; 1216 center: [55.752933963675126, 37.52233749962665], // При инициализации карты обязательно нужно указать её центр и коэффициент масштабирования;
1217 zoom: 10, 1217 zoom: 10,
1218 controls: [] // Скрываем элементы управления на карте; 1218 controls: [] // Скрываем элементы управления на карте;
1219 }); 1219 });
1220 1220
1221 // Создаём макет содержимого. 1221 // Создаём макет содержимого.
1222 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass( 1222 const MyIconContentLayout = ymaps.templateLayoutFactory.createClass(
1223 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>' 1223 '<div style="color: #FFFFFF; font-weight: bold;">$[properties.iconContent]</div>'
1224 ); 1224 );
1225 1225
1226 let collection = new ymaps.GeoObjectCollection(null, { // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива); 1226 let collection = new ymaps.GeoObjectCollection(null, {
1227 // Создаём коллекцию, в которую будемпомещать метки (что-то типа массива);
1227 // preset: 'islands#yellowIcon' 1228 // preset: 'islands#yellowIcon'
1228 }); 1229 });
1229 1230
1230 let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте); 1231 let collectionCoords = [ // Создаём массив с координатами (координаты должны располагаться в том же порядке, что и адреса в списке на сайте);
1231 [55.867783219108354, 37.392867499999916], 1232 [55.867783219108354, 37.392867499999916],
1232 [55.728043075486504, 37.73937949999994], 1233 [55.728043075486504, 37.73937949999994],
1233 [55.72624100423305, 37.476078499999964], 1234 [55.72624100423305, 37.476078499999964],
1234 [55.80751105044832, 37.449622999999974], 1235 [55.80751105044832, 37.449622999999974],
1235 [55.601783098948836, 37.36700499999998], 1236 [55.601783098948836, 37.36700499999998],
1236 [55.86086502152225, 37.540348999999964], 1237 [55.86086502152225, 37.540348999999964],
1237 [55.784961528728715, 37.56188599999996], 1238 [55.784961528728715, 37.56188599999996],
1238 [55.63910010399773, 37.319407999999996], 1239 [55.63910010399773, 37.319407999999996],
1239 [55.55819256767507, 37.55711549999994], 1240 [55.55819256767507, 37.55711549999994],
1240 [55.79829252928473, 37.52063549999999], 1241 [55.79829252928473, 37.52063549999999],
1241 ]; 1242 ];
1242 1243
1243 for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию; 1244 for (let i = 0, l = collectionCoords.length; i < l; i++) { // C помощью цикла добавляем все метки в коллекцию;
1244 collection.add(new ymaps.Placemark(collectionCoords[i])); 1245 collection.add(new ymaps.Placemark(collectionCoords[i]));
1245 collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent'; 1246 collection.get(i).properties.set('iconContent', `${i + 1}`); // Добавляем каждой метке порядковый номер, записываем его в свойство 'iconContent';
1246 } 1247 }
1247 1248
1248 myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту; 1249 myMap.geoObjects.add(collection); // Добавляем коллекцию с метками на карту;
1249 1250
1250 collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета; 1251 collection.options.set('iconLayout', 'default#imageWithContent'); // Необходимо указать данный тип макета;
1251 collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки; 1252 collection.options.set('iconImageHref', 'images/mark-complex.svg'); // Своё изображение иконки метки;
1252 collection.options.set('iconImageSize', [52, 67]); // Размеры метки; 1253 collection.options.set('iconImageSize', [52, 67]); // Размеры метки;
1253 collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); 1254 collection.options.set('iconImageOffset', [-26, -67]); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1254 collection.options.set('iconContentOffset', [0, 17]); 1255 collection.options.set('iconContentOffset', [0, 17]);
1255 collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки); 1256 collection.options.set('iconContentLayout', MyIconContentLayout); // Смещение левого верхнего угла иконки относительно её "ножки" (точки привязки);
1256 1257
1257 const pageMapBar = document.querySelector('.js_page_map_bar'); 1258 const pageMapBar = document.querySelector('.js_page_map_bar');
1258 const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn'); 1259 const pageMapBarBtn = pageMapBar.querySelector('.js_page_map_bar_btn');
1259 const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list'); 1260 const pageMapBarList = pageMapBar.querySelector('.js_page_map_bar_list');
1260 const pageMapBarCards = pageMapBar.querySelectorAll('.card-news'); 1261 const pageMapBarCards = pageMapBar.querySelectorAll('.card-news');
1261 1262
1262 const showCard = (i) => { 1263 const showCard = (i) => {
1263 1264
1264 pageMapBarCards.forEach((card, k) => { 1265 pageMapBarCards.forEach((card, k) => {
1265 1266
1266 card.classList.remove('active'); 1267 card.classList.remove('active');
1267 1268
1268 if (i == k) { 1269 if (i == k) {
1269 card.classList.add('active'); 1270 card.classList.add('active');
1270 } 1271 }
1271 1272
1272 }); 1273 });
1273 1274
1274 }; 1275 };
1275 1276
1276 const hidecard = () => { 1277 const hidecard = () => {
1277 1278
1278 pageMapBarCards.forEach(card => { 1279 pageMapBarCards.forEach(card => {
1279 card.classList.remove('active'); 1280 card.classList.remove('active');
1280 }); 1281 });
1281 1282
1282 } 1283 }
1283 1284
1284 let pageMapBarItems; 1285 let pageMapBarItems;
1285 1286
1286 pageMapBarBtn.addEventListener('click', () => { 1287 pageMapBarBtn.addEventListener('click', () => {
1287 pageMapBar.classList.toggle('active'); 1288 pageMapBar.classList.toggle('active');
1288 }); 1289 });
1289 1290
1290 pageMapBarList.addEventListener('click', (e) => { 1291 pageMapBarList.addEventListener('click', (e) => {
1291 1292
1292 if (e.target.closest('.page-map-bar__item')) { 1293 if (e.target.closest('.page-map-bar__item')) {
1293 1294
1294 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); 1295 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1295 1296
1296 pageMapBarItems.forEach((item, i) => { 1297 pageMapBarItems.forEach((item, i) => {
1297 1298
1298 if (e.target == item && e.target.classList.contains('active')) { 1299 if (e.target == item && e.target.classList.contains('active')) {
1299 1300
1300 item.classList.remove('active'); 1301 item.classList.remove('active');
1301 1302
1302 hidecard(); 1303 hidecard();
1303 1304
1304 } else if (e.target == item) { 1305 } else if (e.target == item) {
1305 1306
1306 pageMapBarItems.forEach(item => { 1307 pageMapBarItems.forEach(item => {
1307 item.classList.remove('active'); 1308 item.classList.remove('active');
1308 }); 1309 });
1309 1310
1310 item.classList.add('active'); 1311 item.classList.add('active');
1311 1312
1312 let offsetCoords = collection.get(i).geometry.getCoordinates(); 1313 let offsetCoords = collection.get(i).geometry.getCoordinates();
1313 1314
1314 offsetCoords = [ 1315 offsetCoords = [
1315 offsetCoords[0] - 0.0025, 1316 offsetCoords[0] - 0.0025,
1316 offsetCoords[1] 1317 offsetCoords[1]
1317 ]; 1318 ];
1318 1319
1319 myMap.setZoom(16); 1320 myMap.setZoom(16);
1320 // myMap.setCenter(collection.get(i).geometry.getCoordinates()); 1321 // myMap.setCenter(collection.get(i).geometry.getCoordinates());
1321 myMap.setCenter(offsetCoords); 1322 myMap.setCenter(offsetCoords);
1322 1323
1323 showCard(i); 1324 showCard(i);
1324 1325
1325 } 1326 }
1326 1327
1327 }); 1328 });
1328 } 1329 }
1329 1330
1330 }); 1331 });
1331 1332
1332 collection.events.add('click', function (e) { 1333 collection.events.add('click', function (e) {
1333 1334
1334 for (let i = 0, l = collection.getLength(); i < l; i++) { 1335 for (let i = 0, l = collection.getLength(); i < l; i++) {
1335 1336
1336 if (e.get('target') == collection.get(i)) { 1337 if (e.get('target') == collection.get(i)) {
1337 1338
1338 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item'); 1339 pageMapBarItems = pageMapBarList.querySelectorAll('.page-map-bar__item');
1339 1340
1340 pageMapBarItems.forEach((item) => { 1341 pageMapBarItems.forEach((item) => {
1341 pageMapBar.classList.add('active'); 1342 pageMapBar.classList.add('active');
1342 item.classList.remove('active'); 1343 item.classList.remove('active');
1343 }); 1344 });
1344 1345
1345 pageMapBarItems[i].classList.add('active'); 1346 pageMapBarItems[i].classList.add('active');
1346 1347
1347 showCard(i); 1348 showCard(i);
1348 1349
1349 } 1350 }
1350 1351
1351 } 1352 }
1352 1353
1353 }); 1354 });
1354 1355
1355 } 1356 }
1356 1357
1357 } 1358 }
1358 1359
1359 }; 1360 };
1360 1361
1361 1362
1362 // аккордеон в футере 1363 // аккордеон в футере
1363 setFooterSpoilers() { 1364 setFooterSpoilers() {
1364 1365
1365 const items = document.querySelectorAll('.js_footer_col'); 1366 const items = document.querySelectorAll('.js_footer_col');
1366 1367
1367 items.forEach(item => { 1368 items.forEach(item => {
1368 1369
1369 const itemTitle = item.querySelector('.js_footer_caption'); 1370 const itemTitle = item.querySelector('.js_footer_caption');
1370 const itemContent = item.querySelector('.js_footer_block'); 1371 const itemContent = item.querySelector('.js_footer_block');
1371 1372
1372 const blockToggle = (block, duration) => { 1373 const blockToggle = (block, duration) => {
1373 1374
1374 if (window.getComputedStyle(block).display == "none" && !block.classList.contains('smooth')) { 1375 if (window.getComputedStyle(block).display == "none" && !block.classList.contains('smooth')) {
1375 1376
1376 block.style.display = "block"; 1377 block.style.display = "block";
1377 1378
1378 const blockHeight = block.offsetHeight; 1379 const blockHeight = block.offsetHeight;
1379 1380
1380 block.style.height = 0; 1381 block.style.height = 0;
1381 block.style.overflow = "hidden"; 1382 block.style.overflow = "hidden";
1382 block.style.transition = `height ${duration}ms ease`; 1383 block.style.transition = `height ${duration}ms ease`;
1383 block.classList.add('smooth'); 1384 block.classList.add('smooth');
1384 block.offsetHeight; 1385 block.offsetHeight;
1385 block.style.height = `${blockHeight}px`; 1386 block.style.height = `${blockHeight}px`;
1386 1387
1387 setTimeout(() => { 1388 setTimeout(() => {
1388 1389
1389 block.classList.remove('smooth'); 1390 block.classList.remove('smooth');
1390 block.style.height = ''; 1391 block.style.height = '';
1391 block.style.transition = ''; 1392 block.style.transition = '';
1392 block.style.overflow = ''; 1393 block.style.overflow = '';
1393 1394
1394 }, duration); 1395 }, duration);
1395 1396
1396 } else if (!block.classList.contains('smooth')) { 1397 } else if (!block.classList.contains('smooth')) {
1397 1398
1398 block.style.height = `${block.offsetHeight}px`; 1399 block.style.height = `${block.offsetHeight}px`;
1399 block.offsetHeight; 1400 block.offsetHeight;
1400 block.style.height = 0; 1401 block.style.height = 0;
1401 block.style.overflow = "hidden"; 1402 block.style.overflow = "hidden";
1402 block.style.transition = `height ${duration}ms ease`; 1403 block.style.transition = `height ${duration}ms ease`;
1403 block.classList.add('smooth'); 1404 block.classList.add('smooth');
1404 1405
1405 setTimeout(() => { 1406 setTimeout(() => {
1406 1407
1407 block.classList.remove('smooth'); 1408 block.classList.remove('smooth');
1408 block.style.display = "none"; 1409 block.style.display = "none";
1409 block.style.height = ''; 1410 block.style.height = '';
1410 block.style.transition = ''; 1411 block.style.transition = '';
1411 block.style.overflow = ''; 1412 block.style.overflow = '';
1412 1413
1413 }, duration); 1414 }, duration);
1414 1415
1415 } 1416 }
1416 1417
1417 }; 1418 };
1418 1419
1419 itemTitle.addEventListener('click', (e) => { 1420 itemTitle.addEventListener('click', (e) => {
1420 itemTitle.classList.toggle('active'); 1421 itemTitle.classList.toggle('active');
1421 blockToggle(itemContent, 300); 1422 blockToggle(itemContent, 300);
1422 }); 1423 });
1423 1424
1424 }); 1425 });
1425 1426
1426 } 1427 }
1427 1428
1428 1429
1429 // слайдер с партнёрами; 1430 // слайдер с партнёрами;
1430 initPartnerslSlider() { 1431 initPartnerslSlider() {
1431 1432
1432 const slider = document.querySelector('.partners__swiper'); 1433 const slider = document.querySelector('.partners__swiper');
1433 1434
1434 if (slider) { 1435 if (slider) {
1435 1436
1436 let swiper6; 1437 let swiper6;
1437 1438
1438 const initSlider = () => { 1439 const initSlider = () => {
1439 1440
1440 swiper6 = new Swiper(slider, { 1441 swiper6 = new Swiper(slider, {
1441 // scrollbar: { 1442 // scrollbar: {
1442 // el: '.swiper-scrollbar', 1443 // el: '.swiper-scrollbar',
1443 // draggable: true, 1444 // draggable: true,
1444 // }, 1445 // },
1445 slidesPerView: 0.275, 1446 slidesPerView: 0.275,
1446 loop: true, 1447 loop: true,
1447 spaceBetween: 20, 1448 spaceBetween: 20,
1448 freeMode: true, 1449 freeMode: true,
1449 allowTouchMove: true, 1450 allowTouchMove: true,
1450 breakpoints: { 1451 breakpoints: {
1451 480: { 1452 480: {
1452 slidesPerView: 0.4, 1453 slidesPerView: 0.4,
1453 }, 1454 },
1454 640: { 1455 640: {
1455 slidesPerView: 0.65, 1456 slidesPerView: 0.65,
1456 }, 1457 },
1457 780: { 1458 780: {
1458 slidesPerView: 0.65, 1459 slidesPerView: 0.65,
1459 }, 1460 },
1460 1024: { 1461 1024: {
1461 slidesPerView: 0.8, 1462 slidesPerView: 0.8,
1462 }, 1463 },
1463 1200: { 1464 1200: {
1464 slidesPerView: 1, 1465 slidesPerView: 1,
1465 loop: false, 1466 loop: false,
1466 allowTouchMove: false, 1467 allowTouchMove: false,
1467 } 1468 }
1468 } 1469 }
1469 }); 1470 });
1470 1471
1471 }; 1472 };
1472 1473
1473 initSlider(); 1474 initSlider();
1474 1475
1475 const updateSlider = () => { 1476 const updateSlider = () => {
1476 swiper6.destroy(); 1477 swiper6.destroy();
1477 initSlider(); 1478 initSlider();
1478 } 1479 }
1479 1480
1480 window.addEventListener('resize', () => { 1481 window.addEventListener('resize', () => {
1481 1482
1482 if (window.innerWidth <= 1200 && slider.dataset.mobile == 'false') { 1483 if (window.innerWidth <= 1200 && slider.dataset.mobile == 'false') {
1483 slider.dataset.mobile = 'true'; 1484 slider.dataset.mobile = 'true';
1484 updateSlider(); 1485 updateSlider();
1485 } 1486 }
1486 1487
1487 if (window.innerWidth > 1200 && slider.dataset.mobile == 'true') { 1488 if (window.innerWidth > 1200 && slider.dataset.mobile == 'true') {
1488 slider.dataset.mobile = 'false'; 1489 slider.dataset.mobile = 'false';
1489 updateSlider(); 1490 updateSlider();
1490 } 1491 }
1491 1492
1492 }); 1493 });
1493 1494
1494 } 1495 }
1495 1496
1496 } 1497 }
1497 1498
1498 } 1499 }
1499 1500
1500 1501
1501 document.addEventListener('DOMContentLoaded', () => { 1502 document.addEventListener('DOMContentLoaded', () => {
1502 1503
1503 const app = new App(); 1504 const app = new App();
1504 app.init(); 1505 app.init();
1505 1506
1506 }); 1507 });
1507 1508
resources/views/about.blade.php
1 @extends('layout.site', ['title' => 'Избранное RentTorg']) 1 @extends('layout.site', ['title' => 'О компании RentTorg'])
2 2
3 @section('content') 3 @section('content')
4 <section class="about" style="background-image:url({{ asset('images/about-bg.jpg') }})"> 4 <section class="about" style="background-image:url({{ asset('images/about-bg.jpg') }})">
5 <div class="container"> 5 <div class="container">
6 <div class="about__wrap"> 6 <div class="about__wrap">
7 <div class="breadcrumbs"> 7 <div class="breadcrumbs">
8 <ul class="breadcrumbs__list"> 8 <ul class="breadcrumbs__list">
9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="#">Главная</a></li> 9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Главная</a></li>
10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">О компании</span></li> 10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">О компании</span></li>
11 </ul> 11 </ul>
12 </div> 12 </div>
13 <div class="about__cnt"> 13 <div class="about__cnt">
14 <h1 class="about__title title-main"><strong>Renttorg</strong> лидер на рынке аренды и продажи недвижимости для&nbsp;бизнеса.</h1> 14 <h1 class="about__title title-main"><strong>Renttorg</strong> лидер на рынке аренды и продажи недвижимости для&nbsp;бизнеса.</h1>
15 <p class="about__descr">В Москве, Новой Москве и Подмосковье</p> 15 <p class="about__descr">В Москве, Новой Москве и Подмосковье</p>
16 <p class="about__subdescr">Наши специалисты имеют огромный стаж работы и азартно подходят к решению даже самых сложных задач. Держа руку на пульсе, удается оперативно перехватывать лакомые кусочки в наиболее рентабельных для рабочих помещений районах. Мы любим бросать вызов самим себе и добиваться поставленных целей во благо клиентов!</p> 16 <p class="about__subdescr">Наши специалисты имеют огромный стаж работы и азартно подходят к решению даже самых сложных задач. Держа руку на пульсе, удается оперативно перехватывать лакомые кусочки в наиболее рентабельных для рабочих помещений районах. Мы любим бросать вызов самим себе и добиваться поставленных целей во благо клиентов!</p>
17 </div> 17 </div>
18 </div> 18 </div>
19 </div> 19 </div>
20 </section> 20 </section>
21 <section class="experience"> 21 <section class="experience">
22 <div class="container"> 22 <div class="container">
23 <h2 class="experience__title"><span>12</span>Лет опыта мы имеем на рынке коммерческой недвижимости в Москве</h2> 23 <h2 class="experience__title"><span>{{ $items_contact[0]->year }}</span>Лет опыта мы имеем на рынке коммерческой недвижимости в Москве</h2>
24 <div class="experience__inner"> 24 <div class="experience__inner">
25 <div class="experience__cnt"> 25 <div class="experience__cnt">
26 <h3 class="experience__subtitle">Гарантия надежности и безупречности сделки !</h3> 26 <h3 class="experience__subtitle">Гарантия надежности и безупречности сделки !</h3>
27 <div class="experience__descr"> 27 <div class="experience__descr">
28 <p class="experience__text">Сотрудничая с нами, Вы получите оптимальные условия продажи и аренды без посредников, а значит, сможете выгодно инвестировать капитал в развитие Вашего бизнеса. Если Вы решили открыть собственное дело или Ваш текущий проект требует расширения, у нас есть предложения, которые могут Вас заинтересовать. </p> 28 <p class="experience__text">Сотрудничая с нами, Вы получите оптимальные условия продажи и аренды без посредников, а значит, сможете выгодно инвестировать капитал в развитие Вашего бизнеса. Если Вы решили открыть собственное дело или Ваш текущий проект требует расширения, у нас есть предложения, которые могут Вас заинтересовать. </p>
29 <p class="experience__text">Продажа и аренда нежилых помещений напрямую от собственника, без посредников — это Ваша возможность выгодно разместить офис, отделение банка, аптеку, салон, магазин, кафе, торговую точку практически в любом районе города. Актуальный формат коммерческой недвижимости — street retail, представленной на нашем сайте — это максимально выгодное использование арендуемых площадей.</p> 29 <p class="experience__text">Продажа и аренда нежилых помещений напрямую от собственника, без посредников — это Ваша возможность выгодно разместить офис, отделение банка, аптеку, салон, магазин, кафе, торговую точку практически в любом районе города. Актуальный формат коммерческой недвижимости — street retail, представленной на нашем сайте — это максимально выгодное использование арендуемых площадей.</p>
30 </div> 30 </div>
31 </div> 31 </div>
32 <div class="experience__img"><img src="images/experience-img.svg" alt=""></div> 32 <div class="experience__img"><img src="{{ asset('images/experience-img.svg') }}" alt=""></div>
33 </div> 33 </div>
34 </div> 34 </div>
35 </section> 35 </section>
36 <section class="benefits"> 36 <section class="benefits">
37 <div class="container"> 37 <div class="container">
38 <div class="benefits__wrap"> 38 <div class="benefits__wrap">
39 <h2 class="benefits__title title">Преимущества Renttorg</h2> 39 <h2 class="benefits__title title">Преимущества Renttorg</h2>
40 <div class="benefits__items"> 40 <div class="benefits__items">
41 <div class="benefits-item"> 41 <div class="benefits-item">
42 <div class="benefits-item__top"> 42 <div class="benefits-item__top">
43 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-1.svg" alt="Опыт"></div> 43 <div class="benefits-item__img"><img src="{{ asset('images/benefits/benefits-item-img-1.svg') }}" alt="Опыт"></div>
44 <h3 class="benefits-item__title">Опыт работы наших сотрудников более 15 лет</h3> 44 <h3 class="benefits-item__title">{{ $items_contact[0]->title1 }}</h3>
45 </div> 45 </div>
46 <p class="benefits-item__descr">Профессиональные риелторы нашего агентства Помогут Вам продать или купить недвижимость в кратчайшие сроки.</p> 46 <p class="benefits-item__descr">{{ $items_contact[0]->text1 }}</p>
47 </div> 47 </div>
48 <div class="benefits-item"> 48 <div class="benefits-item">
49 <div class="benefits-item__top"> 49 <div class="benefits-item__top">
50 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-2.svg" alt="Агенство"></div> 50 <div class="benefits-item__img"><img src="{{ asset('images/benefits/benefits-item-img-2.svg') }}" alt="Агенство"></div>
51 <h3 class="benefits-item__title">Самое амбициозное агентство на рынке</h3> 51 <h3 class="benefits-item__title">{{ $items_contact[0]->title2 }}</h3>
52 </div> 52 </div>
53 <p class="benefits-item__descr">Благодаря огромной базе и множеству довольных клиентов, именно к нам первым делом попадают актуальные предложения.</p> 53 <p class="benefits-item__descr">{{ $items_contact[0]->text2 }}</p>
54 </div> 54 </div>
55 <div class="benefits-item"> 55 <div class="benefits-item">
56 <div class="benefits-item__top"> 56 <div class="benefits-item__top">
57 <div class="benefits-item__img"><img src="images/benefits/benefits-item-img-3.svg" alt="Предложения"></div> 57 <div class="benefits-item__img"><img src="{{ asset('images/benefits/benefits-item-img-3.svg') }}" alt="Предложения"></div>
58 <h3 class="benefits-item__title">Исключительно актуальные предложения</h3> 58 <h3 class="benefits-item__title">{{ $items_contact[0]->title3 }}</h3>
59 </div> 59 </div>
60 <p class="benefits-item__descr">Наша база содержит исключительно актуальные предложения, с нами Вам не придется долго ждать освобождения этажа или целого здания.</p> 60 <p class="benefits-item__descr">{{ $items_contact[0]->text3 }}</p>
61 </div> 61 </div>
62 </div> 62 </div>
63 </div> 63 </div>
64 </div> 64 </div>
65 </section> 65 </section>
66
67 <!-- ПАРТНЕРЫ -->
68 @if ($partners->count())
66 <section class="partners"> 69 <section class="partners">
67 <div class="container"> 70 <div class="container">
68 <h2 class="partners__title title">Партнеры нашей компании</h2> 71 <h2 class="partners__title title">Партнеры нашей компании</h2>
69 <div class="partners__swiper swiper" data-mobile="false"> 72 <div class="partners__swiper swiper" data-mobile="false">
70 <div class="swiper-wrapper"> 73 <div class="swiper-wrapper">
71 <div class="swiper-slide"> 74 <div class="swiper-slide">
72 <div class="partners__inner"> 75 <div class="partners__inner">
76 @foreach ($partners as $partner)
77 <div class="partners-item"><img src="{{ $partner->foto }}" alt="{{ $partner->name }}" loading="lazy"></div>
78 @endforeach
79 <!--<div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
73 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 80 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
74 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 81 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
75 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 82 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
76 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 83 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
77 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 84 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
78 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 85 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
79 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 86 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
80 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 87 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
81 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 88 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
82 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 89 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
83 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 90 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
84 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 91 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
85 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 92 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
86 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 93 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
87 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 94 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
88 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 95 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
89 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div> 96 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>-->
90 <div class="partners-item"><img src="images/partners/partners-item-img-3.png" alt="Лого партнера" loading="lazy"></div>
91 </div> 97 </div>
92 </div> 98 </div>
93 </div> 99 </div>
94 <div class="swiper-scrollbar"></div> 100 <div class="swiper-scrollbar"></div>
95 </div> 101 </div>
96 </div> 102 </div>
97 </section> 103 </section>
104 @endif
105 <!-- НОВОСТИ -->
98 <section class="slider"> 106 <section class="slider">
99 <div class="container"> 107 <div class="container">
100 <div class="slider__wrap"> 108 <div class="slider__wrap">
101 <div class="slider__top"> 109 <div class="slider__top">
102 <h2 class="slider__title title">Новости</h2> 110 <h2 class="slider__title title">Новости</h2>
103 <div class="slider__control"> 111 <div class="slider__control">
104 <div class="swiper-button-prev"> 112 <div class="swiper-button-prev">
105 <svg width="10" height="17"> 113 <svg width="10" height="17">
106 <use xlink:href="images/sprite.svg#slider-arrow"></use> 114 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
107 </svg> 115 </svg>
108 </div> 116 </div>
109 <div class="swiper-button-next"> 117 <div class="swiper-button-next">
110 <svg width="10" height="17"> 118 <svg width="10" height="17">
111 <use xlink:href="images/sprite.svg#slider-arrow"></use> 119 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
112 </svg> 120 </svg>
113 </div> 121 </div>
114 </div> 122 </div>
115 </div> 123 </div>
116 <div class="slider__swiper swiper"> 124 <div class="slider__swiper swiper">
117 <div class="swiper-wrapper"> 125 <div class="swiper-wrapper">
118 <div class="swiper-slide"> 126 @if ($news->count())
127 @foreach($news as $new)
128 @include('catalogs.new', ['new' => $new])
129 @endforeach
130 @else
131 <h3>Пока здесь нет новостей!</h3>
132 @endif
133 <!--<div class="swiper-slide">
119 <div class="card-news"> 134 <div class="card-news">
120 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 135 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
121 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div> 136 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div>
122 </div> 137 </div>
123 <div class="card-news__cnt"> 138 <div class="card-news__cnt">
124 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее 139 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее
125 <svg width="17" height="12"> 140 <svg width="17" height="12">
126 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 141 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
127 </svg></a> 142 </svg></a>
128 </div> 143 </div>
129 </div> 144 </div>
130 </div> 145 </div>
131 <div class="swiper-slide"> 146 <div class="swiper-slide">
132 <div class="card-news"> 147 <div class="card-news">
133 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 148 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
134 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div> 149 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div>
135 </div> 150 </div>
136 <div class="card-news__cnt"> 151 <div class="card-news__cnt">
137 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее 152 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее
138 <svg width="17" height="12"> 153 <svg width="17" height="12">
139 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 154 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
140 </svg></a> 155 </svg></a>
141 </div> 156 </div>
142 </div> 157 </div>
143 </div> 158 </div>
144 <div class="swiper-slide"> 159 <div class="swiper-slide">
145 <div class="card-news"> 160 <div class="card-news">
146 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 161 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
147 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div> 162 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div>
148 </div> 163 </div>
149 <div class="card-news__cnt"> 164 <div class="card-news__cnt">
150 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее 165 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее
151 <svg width="17" height="12"> 166 <svg width="17" height="12">
152 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 167 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
153 </svg></a> 168 </svg></a>
154 </div> 169 </div>
155 </div> 170 </div>
156 </div> 171 </div>
157 <div class="swiper-slide"> 172 <div class="swiper-slide">
158 <div class="card-news"> 173 <div class="card-news">
159 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 174 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
160 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div> 175 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div>
161 </div> 176 </div>
162 <div class="card-news__cnt"> 177 <div class="card-news__cnt">
163 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее 178 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее
164 <svg width="17" height="12"> 179 <svg width="17" height="12">
165 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 180 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
166 </svg></a> 181 </svg></a>
167 </div> 182 </div>
168 </div> 183 </div>
169 </div> 184 </div>
170 <div class="swiper-slide"> 185 <div class="swiper-slide">
171 <div class="card-news"> 186 <div class="card-news">
172 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy"> 187 <div class="card-news__top"><img src="images/card/card-img-5.jpg" alt="Превью к новости" loading="lazy">
173 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div> 188 <div class="card-news__date"><span>15</span><span>Декабря 2022</span></div>
174 </div> 189 </div>
175 <div class="card-news__cnt"> 190 <div class="card-news__cnt">
176 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее 191 <p class="card-news__descr">Компания Renttorg продолжает активно сотрудничать с площадкой Сбера Portal DA</p><a class="card-news__link" href="#">Подробнее
177 <svg width="17" height="12"> 192 <svg width="17" height="12">
178 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 193 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
179 </svg></a> 194 </svg></a>
180 </div> 195 </div>
181 </div> 196 </div>
182 </div> 197 </div>
183 <div class="swiper-slide"> 198 <div class="swiper-slide">
184 <div class="card-news"> 199 <div class="card-news">
185 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy"> 200 <div class="card-news__top"><img src="images/card/card-img-6.jpg" alt="Превью к новости" loading="lazy">
186 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div> 201 <div class="card-news__date"><span>23</span><span>Октября 2022</span></div>
187 </div> 202 </div>
188 <div class="card-news__cnt"> 203 <div class="card-news__cnt">
189 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее 204 <p class="card-news__descr">Про надежность торговых арендаторов</p><a class="card-news__link" href="#">Подробнее
190 <svg width="17" height="12"> 205 <svg width="17" height="12">
191 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 206 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
192 </svg></a> 207 </svg></a>
193 </div> 208 </div>
194 </div> 209 </div>
195 </div> 210 </div>
196 <div class="swiper-slide"> 211 <div class="swiper-slide">
197 <div class="card-news"> 212 <div class="card-news">
198 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy"> 213 <div class="card-news__top"><img src="images/card/card-img-7.jpg" alt="Превью к новости" loading="lazy">
199 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div> 214 <div class="card-news__date"><span>19</span><span>Ноября 2022</span></div>
200 </div> 215 </div>
201 <div class="card-news__cnt"> 216 <div class="card-news__cnt">
202 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее 217 <p class="card-news__descr">Кто развивается быстрее всех из арендаторов</p><a class="card-news__link" href="#">Подробнее
203 <svg width="17" height="12"> 218 <svg width="17" height="12">
204 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 219 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
205 </svg></a> 220 </svg></a>
206 </div> 221 </div>
207 </div> 222 </div>
208 </div> 223 </div>
209 <div class="swiper-slide"> 224 <div class="swiper-slide">
210 <div class="card-news"> 225 <div class="card-news">
211 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy"> 226 <div class="card-news__top"><img src="images/card/card-img-8.jpg" alt="Превью к новости" loading="lazy">
212 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div> 227 <div class="card-news__date"><span>31</span><span>Декабря 2022</span></div>
213 </div> 228 </div>
214 <div class="card-news__cnt"> 229 <div class="card-news__cnt">
215 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее 230 <p class="card-news__descr">Помещение с окупаемостью 6-7 лет, насколько реально купить?</p><a class="card-news__link" href="#">Подробнее
216 <svg width="17" height="12"> 231 <svg width="17" height="12">
217 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use> 232 <use xlink:href="images/sprite.svg#card-news-link-arrow"></use>
218 </svg></a> 233 </svg></a>
219 </div> 234 </div>
220 </div> 235 </div>
221 </div> 236 </div>-->
222 </div> 237 </div>
223 </div> 238 </div>
224 <div class="swiper-pagination"></div> 239 <div class="swiper-pagination"></div>
225 </div> 240 </div>
226 </div> 241 </div>
227 </section> 242 </section>
228 @endsection 243 @endsection
229 244
230 @section('form_feedback') 245 @section('form_feedback')
231 <!-- Форма обратной связи --> 246 <!-- Форма обратной связи -->
232 @include('form.form_feedback') 247 @include('form.form_feedback')
233 @endsection 248 @endsection
234 249
resources/views/ajax/complex/favorite.blade.php
File was created 1 @if ($houses->count())
2 @foreach ($houses as $house1)
3 @include('catalogs.house_mini', ['house' => $house1])
4 @endforeach
5
6 @else
7 <h3>Здесь пока что нет предложений</h3>
8 @endif
9
10 <div class="pagination">
11 <?=$houses->appends($_GET)->links('catalogs.paginate');?>
12 </div>
13
14
resources/views/catalog.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.catalog') 4 @include('part.filter.catalog')
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> 9 <script>
10 /*
11 $(window).load(function() {
12 var url_str = "<?=url()->full();?>";
13 var url = new URL(url_str);
14 var searchParams = new URLSearchParams(url.search.substring(1));
15
16 var area = searchParams.get("area"),
17 type_area = searchParams.get("type_area"),
18 format_area= searchParams.get("format_area"),
19 address= searchParams.get("address");
20
21 var area_name = $('#area_name');
22 var type_area_name = $('#type_area_name');
23 var format_area_name = $('#format_area_name');
24 var address_name = $('#address');
25
26 if ((area !== "") || (type_area !== "") || (format_area !== "") || (address !== ""))
27 {
28 $.ajax({
29 type: "GET",
30 url: "{{ route('catalog_ajax_filter') }}",
31 data: "area=" + area + "&type_area=" + type_area + "&format_area=" + format_area + "&address=" + address + "",
32 success: function (data) {
33 console.log('Фильтры данных были переданы ');
34 data = JSON.parse(data);
35 console.log(data);
36
37 if (area !== "") {
38 area_name.html(data[0]);
39 }
40 if (type_area !== "") {
41 type_area_name.html(data[1]);
42 }
43 if (format_area !== "") {
44 format_area_name.html(data[2]);
45 }
46 if (address !== "") {
47 address_name.html(data[3]);
48 }
49
50 },
51 headers: {
52 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
53 },
54 error: function (data) {
55 console.log('Error: ' + data);
56 }
57 });
58 }
59 });
60 */
61 $(document).on('click', '.js_sort_group_item', function() { 10 $(document).on('click', '.js_sort_group_item', function() {
62 var val = $(this).data('val'); 11 var val = $(this).data('val');
63 var sort_price_val = ''; 12 var sort_price_val = '';
64 var sort_area_val = ''; 13 var sort_area_val = '';
65 var sort_new_val = ''; 14 var sort_new_val = '';
66 15
67 $('.sort-price').each(function() { 16 $('.sort-price').each(function() {
68 var this_ = $(this); 17 var this_ = $(this);
69 var v = $(this).data('val'); 18 var v = $(this).data('val');
70 if (this_.hasClass('active')) 19 if (this_.hasClass('active'))
71 sort_price_val = v; 20 sort_price_val = v;
72 }); 21 });
73 22
74 $('.sort-new').each(function() { 23 $('.sort-new').each(function() {
75 var v = $(this).data('val'); 24 var v = $(this).data('val');
76 var this_ = $(this); 25 var this_ = $(this);
77 if (this_.hasClass('active')) 26 if (this_.hasClass('active'))
78 sort_new_val = v; 27 sort_new_val = v;
79 }); 28 });
80 29
81 $('.sort-area').each(function() { 30 $('.sort-area').each(function() {
82 var v = $(this).data('val'); 31 var v = $(this).data('val');
83 var this_ = $(this); 32 var this_ = $(this);
84 if (this_.hasClass('active')) 33 if (this_.hasClass('active'))
85 sort_area_val = v; 34 sort_area_val = v;
86 35
87 }); 36 });
88 37
89 console.log('-------------------'); 38 console.log('-------------------');
90 $.ajax({ 39 $.ajax({
91 type: "GET", 40 type: "GET",
92 url: "{{ route('catalog') }}", 41 url: "{{ route('catalog') }}",
93 data: "view=arenda&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+ 42 data: "view=arenda&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+
94 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+ 43 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+
95 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+ 44 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+
96 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>", 45 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>",
97 success: function(data) { 46 success: function(data) {
98 console.log('Успешно обновлены данные АРЕНДА таблиц '); 47 console.log('Успешно обновлены данные АРЕНДА таблиц ');
99 $('#arenda_block').html(data); 48 $('#arenda_block').html(data);
100 }, 49 },
101 headers: { 50 headers: {
102 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 51 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
103 }, 52 },
104 error: function(data) { 53 error: function(data) {
105 console.log('Error: '+ data); 54 console.log('Error: '+ data);
106 } 55 }
107 }); 56 });
108 57
109 $.ajax({ 58 $.ajax({
110 type: "GET", 59 type: "GET",
111 url: "{{ route('catalog') }}", 60 url: "{{ route('catalog') }}",
112 data: "view=prodaja&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+ 61 data: "view=prodaja&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+
113 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+ 62 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+
114 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+ 63 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+
115 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>", 64 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>",
116 success: function(data) { 65 success: function(data) {
117 console.log('Успешно обновлены данные ПРОДАЖА таблиц '); 66 console.log('Успешно обновлены данные ПРОДАЖА таблиц ');
118 $('#prodaja_block').html(data); 67 $('#prodaja_block').html(data);
119 }, 68 },
120 headers: { 69 headers: {
121 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 70 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
122 }, 71 },
123 error: function(data) { 72 error: function(data) {
124 console.log('Error: '+ data); 73 console.log('Error: '+ data);
125 } 74 }
126 }); 75 });
127 76
128 $.ajax({ 77 $.ajax({
129 type: "GET", 78 type: "GET",
130 url: "{{ route('catalog') }}", 79 url: "{{ route('catalog') }}",
131 data: "view=bissnes&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+ 80 data: "view=bissnes&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+
132 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+ 81 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+
133 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+ 82 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+
134 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>", 83 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>",
135 success: function(data) { 84 success: function(data) {
136 console.log('Успешно обновлены данные БИЗНЕС таблиц '); 85 console.log('Успешно обновлены данные БИЗНЕС таблиц ');
137 $('#bissnes_block').html(data); 86 $('#bissnes_block').html(data);
138 }, 87 },
139 headers: { 88 headers: {
140 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 89 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
141 }, 90 },
142 error: function(data) { 91 error: function(data) {
143 console.log('Error: '+ data); 92 console.log('Error: '+ data);
144 } 93 }
145 }); 94 });
146 95
147 $.ajax({ 96 $.ajax({
148 type: "GET", 97 type: "GET",
149 url: "{{ route('catalog') }}", 98 url: "{{ route('catalog') }}",
150 data: "view=arendovannie&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+ 99 data: "view=arendovannie&sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+""+
151 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+ 100 "&area=<?if (isset($_GET['area'])) echo $_GET['area'];?>&type_area=<?if (isset($_GET['type_area'])) echo $_GET['type_area'];?>&format_area=<? if (isset($_GET['format_area'])) echo $_GET['format_area'];?>"+
152 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+ 101 "&area_m2_min=<? if (isset($_GET['area_m2_min'])) echo $_GET['area_m2_min'];?>&area_m2_max=<? if (isset($_GET['area_m2_max'])) echo $_GET['area_m2_max'];?>"+
153 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>", 102 "&price_min=<? if (isset($_GET['price_min'])) echo $_GET['price_min'];?>&price_max=<? if (isset($_GET['price_max'])) echo $_GET['price_max'];?>&address=<? if (isset($_GET['address'])) echo $_GET['address'];?>",
154 success: function(data) { 103 success: function(data) {
155 console.log('Успешно обновлены данные таблиц '); 104 console.log('Успешно обновлены данные таблиц ');
156 $('#arendovannie_block').html(data); 105 $('#arendovannie_block').html(data);
157 //.append(data); 106 //.append(data);
158 }, 107 },
159 headers: { 108 headers: {
160 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 109 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
161 }, 110 },
162 error: function(data) { 111 error: function(data) {
163 console.log('Error: '+ data); 112 console.log('Error: '+ data);
164 } 113 }
165 }); 114 });
166 115
167 } 116 }
168 ); 117 );
169 </script> 118 </script>
170 @endsection 119 @endsection
171 120
172 @section('content') 121 @section('content')
173 <section class="catalog"> 122 <section class="catalog">
174 <div class="container"> 123 <div class="container">
175 <div class="catalog__top top-catalog"> 124 <div class="catalog__top top-catalog">
176 <div class="top-catalog__inner"> 125 <div class="top-catalog__inner">
177 <h2 class="top-catalog__title title">Каталог коммерческой недвижимости</h2> 126 <h2 class="top-catalog__title title">Каталог коммерческой недвижимости</h2>
178 <div class="top-catalog__result">Найдено объектов по Вашему запросу: <span><?=$house_arenda->count()+$house_prodaja->count()+$house_bissnes->count()+$house_arendovannie->count(); ?></span></div> 127 <div class="top-catalog__result">Найдено объектов по Вашему запросу: <span><?=$house_arenda->count()+$house_prodaja->count()+$house_bissnes->count()+$house_arendovannie->count(); ?></span></div>
179 </div> 128 </div>
180 <form class="top-catalog__sorts"> 129 <form class="top-catalog__sorts">
181 <div class="top-catalog__sort-group sort-group js_sort_group"> 130 <div class="top-catalog__sort-group sort-group js_sort_group">
182 <input class="js_sort_group_input" type="hidden"> 131 <input class="js_sort_group_input" type="hidden">
183 <div class="sort-group__current js_sort_group_current">Сначала дешевле</div> 132 <div class="sort-group__current js_sort_group_current">Сначала дешевле</div>
184 <ul class="sort-group__list js_sort_group_list"> 133 <ul class="sort-group__list js_sort_group_list">
185 <li class="sort-price sort-group__item js_sort_group_item active" data-val="1">Сначала дешевле</li> 134 <li class="sort-price sort-group__item js_sort_group_item active" data-val="1">Сначала дешевле</li>
186 <li class="sort-price sort-group__item js_sort_group_item" data-val="2">Сначала дороже</li> 135 <li class="sort-price sort-group__item js_sort_group_item" data-val="2">Сначала дороже</li>
187 </ul> 136 </ul>
188 </div> 137 </div>
189 <div class="top-catalog__sort-group sort-group js_sort_group"> 138 <div class="top-catalog__sort-group sort-group js_sort_group">
190 <input class="js_sort_group_input" type="hidden"> 139 <input class="js_sort_group_input" type="hidden">
191 <div class="sort-group__current js_sort_group_current">Сначала новые</div> 140 <div class="sort-group__current js_sort_group_current">Сначала новые</div>
192 <ul class="sort-group__list js_sort_group_list"> 141 <ul class="sort-group__list js_sort_group_list">
193 <li class="sort-new sort-group__item js_sort_group_item active" data-val="1">Сначала новые</li> 142 <li class="sort-new sort-group__item js_sort_group_item active" data-val="1">Сначала новые</li>
194 <li class="sort-new sort-group__item js_sort_group_item" data-val="2">Сначала старые</li> 143 <li class="sort-new sort-group__item js_sort_group_item" data-val="2">Сначала старые</li>
195 </ul> 144 </ul>
196 </div> 145 </div>
197 <div class="top-catalog__sort-group sort-group sort-group--wide js_sort_group"> 146 <div class="top-catalog__sort-group sort-group sort-group--wide js_sort_group">
198 <input class="js_sort_group_input" type="hidden"> 147 <input class="js_sort_group_input" type="hidden">
199 <div class="sort-group__current js_sort_group_current">Сначала с большей площадью</div> 148 <div class="sort-group__current js_sort_group_current">Сначала с большей площадью</div>
200 <ul class="sort-group__list js_sort_group_list"> 149 <ul class="sort-group__list js_sort_group_list">
201 <li class="sort-area sort-group__item js_sort_group_item active" data-val="1">Сначала с большей площадью</li> 150 <li class="sort-area sort-group__item js_sort_group_item active" data-val="1">Сначала с большей площадью</li>
202 <li class="sort-area sort-group__item js_sort_group_item" data-val="2">Сначала с меньшей площадью</li> 151 <li class="sort-area sort-group__item js_sort_group_item" data-val="2">Сначала с меньшей площадью</li>
203 </ul> 152 </ul>
204 </div> 153 </div>
205 </form> 154 </form>
206 </div> 155 </div>
207 </div> 156 </div>
208 <div class="complex__sliders"> 157 <div class="complex__sliders">
209 <section class="slider"> 158 <section class="slider">
210 <div class="container"> 159 <div class="container">
211 <div class="slider__wrap"> 160 <div class="slider__wrap">
212 <div class="slider__top"> 161 <div class="slider__top">
213 <h2 class="slider__title title">Аренда торговых помещений</h2><a class="slider__more" href="#">Показать все объекты</a> 162 <h2 class="slider__title title">Аренда торговых помещений</h2><a class="slider__more" href="#">Показать все объекты</a>
214 <div class="slider__control"> 163 <div class="slider__control">
215 <div class="swiper-button-prev"> 164 <div class="swiper-button-prev">
216 <svg width="10" height="17"> 165 <svg width="10" height="17">
217 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 166 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
218 </svg> 167 </svg>
219 </div> 168 </div>
220 <div class="swiper-button-next"> 169 <div class="swiper-button-next">
221 <svg width="10" height="17"> 170 <svg width="10" height="17">
222 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 171 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
223 </svg> 172 </svg>
224 </div> 173 </div>
225 </div> 174 </div>
226 </div> 175 </div>
227 <div class="slider__swiper swiper"> 176 <div class="slider__swiper swiper">
228 <div class="swiper-wrapper" id="arenda_block"> 177 <div class="swiper-wrapper" id="arenda_block">
229 @if ($house_arenda->count()) 178 @if ($house_arenda->count())
230 @foreach ($house_arenda as $house1) 179 @foreach ($house_arenda as $house1)
231 @include('catalogs.elemhouse', ['house' => $house1]) 180 @include('catalogs.elemhouse', ['house' => $house1])
232 @endforeach 181 @endforeach
233 @else 182 @else
234 <h3>Здесь пока что нет предложений</h3> 183 <h3>Здесь пока что нет предложений</h3>
235 @endif 184 @endif
236 185
237 </div> 186 </div>
238 </div> 187 </div>
239 <div class="swiper-pagination"></div> 188 <div class="swiper-pagination"></div>
240 </div> 189 </div>
241 </div> 190 </div>
242 </section> 191 </section>
243 <section class="slider"> 192 <section class="slider">
244 <div class="container"> 193 <div class="container">
245 <div class="slider__wrap"> 194 <div class="slider__wrap">
246 <div class="slider__top"> 195 <div class="slider__top">
247 <h2 class="slider__title title">Продажа торговых помещений</h2><a class="slider__more" href="#">Показать все объекты</a> 196 <h2 class="slider__title title">Продажа торговых помещений</h2><a class="slider__more" href="#">Показать все объекты</a>
248 <div class="slider__control"> 197 <div class="slider__control">
249 <div class="swiper-button-prev"> 198 <div class="swiper-button-prev">
250 <svg width="10" height="17"> 199 <svg width="10" height="17">
251 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 200 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
252 </svg> 201 </svg>
253 </div> 202 </div>
254 <div class="swiper-button-next"> 203 <div class="swiper-button-next">
255 <svg width="10" height="17"> 204 <svg width="10" height="17">
256 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 205 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
257 </svg> 206 </svg>
258 </div> 207 </div>
259 </div> 208 </div>
260 </div> 209 </div>
261 <div class="slider__swiper swiper"> 210 <div class="slider__swiper swiper">
262 <div class="swiper-wrapper" id="prodaja_block"> 211 <div class="swiper-wrapper" id="prodaja_block">
263 @if ($house_prodaja->count()) 212 @if ($house_prodaja->count())
264 @foreach ($house_prodaja as $house2) 213 @foreach ($house_prodaja as $house2)
265 @include('catalogs.elemhouse', ['house' => $house2]) 214 @include('catalogs.elemhouse', ['house' => $house2])
266 @endforeach 215 @endforeach
267 @else 216 @else
268 <h3>Здесь пока что нет предложений</h3> 217 <h3>Здесь пока что нет предложений</h3>
269 @endif 218 @endif
270 </div> 219 </div>
271 </div> 220 </div>
272 <div class="swiper-pagination"></div> 221 <div class="swiper-pagination"></div>
273 </div> 222 </div>
274 </div> 223 </div>
275 </section> 224 </section>
276 <section class="slider"> 225 <section class="slider">
277 <div class="container"> 226 <div class="container">
278 <div class="slider__wrap"> 227 <div class="slider__wrap">
279 <div class="slider__top"> 228 <div class="slider__top">
280 <h2 class="slider__title title">Арендный бизнес</h2><a class="slider__more" href="#">Показать все объекты</a> 229 <h2 class="slider__title title">Арендный бизнес</h2><a class="slider__more" href="#">Показать все объекты</a>
281 <div class="slider__control"> 230 <div class="slider__control">
282 <div class="swiper-button-prev"> 231 <div class="swiper-button-prev">
283 <svg width="10" height="17"> 232 <svg width="10" height="17">
284 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 233 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
285 </svg> 234 </svg>
286 </div> 235 </div>
287 <div class="swiper-button-next"> 236 <div class="swiper-button-next">
288 <svg width="10" height="17"> 237 <svg width="10" height="17">
289 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 238 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
290 </svg> 239 </svg>
291 </div> 240 </div>
292 </div> 241 </div>
293 </div> 242 </div>
294 <div class="slider__swiper swiper"> 243 <div class="slider__swiper swiper">
295 <div class="swiper-wrapper" id="bissnes_block"> 244 <div class="swiper-wrapper" id="bissnes_block">
296 @if ($house_bissnes->count()) 245 @if ($house_bissnes->count())
297 @foreach ($house_bissnes as $house3) 246 @foreach ($house_bissnes as $house3)
298 @include('catalogs.elemhouse', ['house' => $house3]) 247 @include('catalogs.elemhouse', ['house' => $house3])
299 @endforeach 248 @endforeach
300 @else 249 @else
301 <h3>Здесь пока что нет предложений</h3> 250 <h3>Здесь пока что нет предложений</h3>
302 @endif 251 @endif
303 </div> 252 </div>
304 </div> 253 </div>
305 <div class="swiper-pagination"></div> 254 <div class="swiper-pagination"></div>
306 </div> 255 </div>
307 </div> 256 </div>
308 </section> 257 </section>
309 <section class="slider"> 258 <section class="slider">
310 <div class="container"> 259 <div class="container">
311 <div class="slider__wrap"> 260 <div class="slider__wrap">
312 <div class="slider__top"> 261 <div class="slider__top">
313 <h2 class="slider__title title">Арендованные</h2><a class="slider__more" href="#">Показать все объекты</a> 262 <h2 class="slider__title title">Арендованные</h2><a class="slider__more" href="#">Показать все объекты</a>
314 <div class="slider__control"> 263 <div class="slider__control">
315 <div class="swiper-button-prev"> 264 <div class="swiper-button-prev">
316 <svg width="10" height="17"> 265 <svg width="10" height="17">
317 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 266 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
318 </svg> 267 </svg>
319 </div> 268 </div>
320 <div class="swiper-button-next"> 269 <div class="swiper-button-next">
321 <svg width="10" height="17"> 270 <svg width="10" height="17">
322 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use> 271 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow') }}"></use>
323 </svg> 272 </svg>
324 </div> 273 </div>
325 </div> 274 </div>
326 </div> 275 </div>
327 <div class="slider__swiper swiper"> 276 <div class="slider__swiper swiper">
328 <div class="swiper-wrapper" id="arendovannie_block"> 277 <div class="swiper-wrapper" id="arendovannie_block">
329 @if ($house_arendovannie->count()) 278 @if ($house_arendovannie->count())
330 @foreach ($house_arendovannie as $house1) 279 @foreach ($house_arendovannie as $house1)
331 @include('catalogs.elemhouse', ['house' => $house1]) 280 @include('catalogs.elemhouse', ['house' => $house1])
332 @endforeach 281 @endforeach
333 @else 282 @else
334 <h3>Здесь пока что нет предложений</h3> 283 <h3>Здесь пока что нет предложений</h3>
335 @endif 284 @endif
336 285
337 </div> 286 </div>
338 </div> 287 </div>
339 <div class="swiper-pagination"></div> 288 <div class="swiper-pagination"></div>
340 </div> 289 </div>
341 </div> 290 </div>
342 </section> 291 </section>
343 </div> 292 </div>
344 </section> 293 </section>
345 @endsection 294 @endsection
346 295
347 @section('form_feedback') 296 @section('form_feedback')
348 <!-- Форма обратной связи --> 297 <!-- Форма обратной связи -->
349 @include('form.form_feedback') 298 @include('form.form_feedback')
350 @endsection 299 @endsection
351 300
352 301
resources/views/catalogs/elemhouse.blade.php
1 <div class="swiper-slide"> 1 <div class="swiper-slide">
2 <div class="card"> 2 <div class="card">
3 <div class="card__top"> 3 <div class="card__top">
4 @if (empty($house->foto_main)) 4 @if (empty($house->foto_main))
5 5
6 @else 6 @else
7 <img src="{{ asset($house->foto_main) }}" alt="{{ $house->title }}" loading="lazy"/> 7 <img src="{{ asset($house->foto_main) }}" alt="{{ $house->title }}" loading="lazy"/>
8 @endif; 8 @endif;
9 9
10 <h3 class="card__title">{{$house->typearea->name_type }}</h3> 10 <h3 class="card__title">{{$house->typearea->name_type }}</h3>
11 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 11 <div class="card__labels">
12 <svg width="18" height="18"> 12 <span class="card__label card__label-favorites js_card_favorites <?=\App\Classes\RusDate::selected_item($house->id);?>" data-val="{{$house->id}}" id="card_favorite{{$house->id}}" name="card_favorite{{$house->id}}">
13 <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use> 13 <svg width="18" height="18">
14 </svg> 14 <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use>
15 <svg width="18" height="18"> 15 </svg>
16 <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use> 16 <svg width="18" height="18">
17 </svg></span><a class="card__label card__label-messenger" href="#"> 17 <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use>
18 </svg>
19 </span>
20 <a class="card__label card__label-messenger" href="#">
18 <svg width="25" height="25"> 21 <svg width="25" height="25">
19 <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use> 22 <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use>
20 </svg></a></div> 23 </svg></a></div>
21 </div> 24 </div>
22 <div class="card__cnt"> 25 <div class="card__cnt">
23 <div class="card__info"> 26 <div class="card__info">
24 <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address> 27 <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address>
25 <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address> 28 <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address>
26 <address class="card__line">{{$house->address }}</address> 29 <address class="card__line">{{$house->address }}</address>
27 <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div> 30 <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div>
28 <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div> 31 <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div>
29 </div> 32 </div>
30 <? switch ($house->format_house) { 33 <? switch ($house->format_house) {
31 case 'Аренда': 34 case 'Аренда':
32 $comment = "<span>в месяц</span>"; 35 $comment = "<span>в месяц</span>";
33 break; 36 break;
34 case 'Продажа': 37 case 'Продажа':
35 $comment = ""; 38 $comment = "";
36 break; 39 break;
37 case 'Бизнес': 40 case 'Бизнес':
38 $comment= "<span>в месяц</span>"; 41 $comment= "<span>в месяц</span>";
39 break; 42 break;
40 case 'Арендованные': 43 case 'Арендованные':
41 $comment = "<span>в месяц</span>"; 44 $comment = "<span>в месяц</span>";
42 break; 45 break;
43 } 46 }
44 ?> 47 ?>
45 <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?> 48 <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?>
46 </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a> 49 </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a>
47 </div> 50 </div>
48 </div> 51 </div>
49 </div> 52 </div>
50 53
resources/views/catalogs/house_mini.blade.php
1 <div class="card"> 1 <div class="card">
2 <div class="card__top"> 2 <div class="card__top">
3 @if (empty($house->foto_main)) 3 @if (empty($house->foto_main))
4 4
5 @else 5 @else
6 <img src="{{ asset($house->foto_main) }}" alt="{{ $house->title }}" loading="lazy"/> 6 <img src="{{ asset($house->foto_main) }}" alt="{{ $house->title }}" loading="lazy"/>
7 @endif; 7 @endif;
8 8
9 <h3 class="card__title">{{$house->typearea->name_type }}</h3> 9 <h3 class="card__title">{{$house->typearea->name_type }}</h3>
10 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites"> 10 <div class="card__labels"><span class="card__label card__label-favorites js_card_favorites <?=\App\Classes\RusDate::selected_item($house->id);?>" data-val="{{$house->id}}" id="card_favorite{{$house->id}}" name="card_favorite{{$house->id}}">
11 <svg width="18" height="18"> 11 <svg width="18" height="18">
12 <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use> 12 <use xlink:href="{{ asset('images/sprite.svg#card-favorites-empty') }}"></use>
13 </svg> 13 </svg>
14 <svg width="18" height="18"> 14 <svg width="18" height="18">
15 <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use> 15 <use xlink:href="{{ asset('images/sprite.svg#card-favorites') }}"></use>
16 </svg></span><a class="card__label card__label-messenger" href="#"> 16 </svg></span><a class="card__label card__label-messenger" href="#">
17 <svg width="25" height="25"> 17 <svg width="25" height="25">
18 <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use> 18 <use xlink:href="{{ asset('images/sprite.svg#card-messenger') }}"></use>
19 </svg></a></div> 19 </svg></a></div>
20 </div> 20 </div>
21 <div class="card__cnt"> 21 <div class="card__cnt">
22 <div class="card__info"> 22 <div class="card__info">
23 <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address> 23 <address class="card__line card__line-complex">{{ $house->areas->name_area }}</address>
24 <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address> 24 <address class="card__line">{{$house->metro}} ({{$house->description_metro }})<span style="background-color: #FFC955;"></span></address>
25 <address class="card__line">{{$house->address }}</address> 25 <address class="card__line">{{$house->address }}</address>
26 <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div> 26 <div class="card__line">Площадь: <b>{{$house->area}} м2</b></div>
27 <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div> 27 <div class="card__line">Цена за м<sup>2</sup>: <b>{{ $house->price_m2 }}₽</b></div>
28 </div> 28 </div>
29 <? switch ($house->format_house) { 29 <? switch ($house->format_house) {
30 case 'Аренда': 30 case 'Аренда':
31 $comment = "<span>в месяц</span>"; 31 $comment = "<span>в месяц</span>";
32 break; 32 break;
33 case 'Продажа': 33 case 'Продажа':
34 $comment = ""; 34 $comment = "";
35 break; 35 break;
36 case 'Бизнес': 36 case 'Бизнес':
37 $comment= "<span>в месяц</span>"; 37 $comment= "<span>в месяц</span>";
38 break; 38 break;
39 case 'Арендованные': 39 case 'Арендованные':
40 $comment = "<span>в месяц</span>"; 40 $comment = "<span>в месяц</span>";
41 break; 41 break;
42 } 42 }
43 ?> 43 ?>
44 <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?> 44 <div class="card__price"><span>{{ $house->price }} ₽ </span><? echo $comment; ?>
45 </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a> 45 </div><a class="card__btn btn btn--bordered" href="{{ route('offer', ['house' => $house->id]) }}">Подробнее</a>
46 </div> 46 </div>
47 </div> 47 </div>
48 48
49 49
resources/views/cookies.blade.php
1 @extends('layout.site', ['title' => 'Избранное RentTorg']) 1 @extends('layout.site', ['title' => 'Мы используем cookies'])
2 2
3 @section('content') 3 @section('content')
4 <section class="favorites"> 4 <section class="page-cookies">
5 <div class="favorites-top"> 5 <div class="page-cookies-top">
6 <div class="container"> 6 <div class="container">
7 <div class="breadcrumbs"> 7 <div class="breadcrumbs">
8 <ul class="breadcrumbs__list"> 8 <ul class="breadcrumbs__list">
9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="#">Главная</a></li> 9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Главная</a></li>
10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">Избранное </span></li> 10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">Мы используем cookie файлы</span></li>
11 </ul> 11 </ul>
12 </div> 12 </div>
13 <h1 class="favorites__title title-main">Тут пока что ничего нет...</h1><a class="favorites-top__link" href="#">Выберите идеальную недвижимость </a> 13 <h1 class="page-cookies__title title-main">Мы используем cookie файлы</h1>
14 <p class="favorites__descr">Здесь вы можете ознакомиться с недвижимостью которая вам понравилось</p>
15 </div> 14 </div>
16 </div> 15 </div>
17 <div class="favorites-cnt"> 16 <div class="page-cookies-cnt">
18 <div class="container"> 17 <div class="container">
19 <div class="favorites__items"> 18 <div class="page-cookies__inner">
20 <div class="favorites-item"> 19 <p>Когда вы посещаете сайт, Renttorg может использовать общеотраслевую технологию, называемую cookie. Файлы cookie представляют собой небольшие фрагменты данных, которые временно сохраняются на вашем компьютере или мобильном устройстве и обеспечивают более эффективную работу сайта. Renttorg для сбора статистики использует подсистему «Цифровая культура». На основе этих данных мы делаем наш сайт лучше и эффективнее для пользователей. Продолжая пользоваться этим сайтом, вы соглашаетесь на использование cookie и обработку данных в соответствии с Политикой сайта в области обработки и защиты персональных данных. Если вы не хотите использовать cookie, вы можете отключить их в настройках безопасности вашего браузера. Отключение cookie следует выполнить для каждого браузера и устройства, с помощью которого осуществляется вход на сайт. Обратите внимание, что в случае, если использование сайтом cookie-файлов отключено, некоторые возможности и услуги сайта могут быть недоступны. Согласие на обработку персональных данных посетителей сайта Настоящим, свободно, своей волей и в своем интересе выражаю свое согласие [адрес учреждения – собственника сайта] (далее – Оператор) на автоматизированную обработку моих персональных данных в соответствии со следующим перечнем персональных данных:</p>
21 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> 20 <ul>
22 <p class="favorites-item__descr"><a href="#">Найдите</a> идеальную планировку на сайте Renttorg</p> 21 <li>Опционально: обучение заказчиков заказчиков.</li>
23 </div> 22 <li>Системная информация, данные из моего браузера.</li>
24 <div class="favorites-item"> 23 <li>Системная информация, данные из моего браузера.</li>
25 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> 24 <li>Мой IP-адрес.</li>
26 <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> 25 <li>Установленные на моем устройстве операционные системы.</li>
27 </div> 26 <li>Установленные на моем устройстве типы браузеров.</li>
28 <div class="favorites-item"> 27 <li>Установленные на моем устройстве расширения и настройки цвета экрана.</li>
29 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> 28 <li>Установленные и используемые на моем устройстве языки.</li>
30 <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> 29 <li>Версии Flash и поддержка JavaScript.</li>
31 </div> 30 <li>Типы мобильных устройств, используемых мной, если применимо.</li>
32 </div> 31 <li>Географическое положение.</li>
32 <li>Типы мобильных устройств, используемых мной, если применимо.</li>
33 <li>Количество посещений сайта и просмотров страниц.</li>
34 <li>Длительность пребывания на сайте.</li>
35 <li>Запросы, использованные мной при переходе на сайт.</li>
36 <li>Страницы, с которых были совершены переходы.</li>
37 </ul>
38 <p>Для целей сбора статистики о посетителях сайта Оператор вправе осуществлять обработку моих персональных данных следующими способами: сбор, систематизация, накопление, хранение, обновление, изменение, использование. Оператор может обрабатывать файлы cookie самостоятельно или с привлечением иных сервисов. Настоящее согласие вступает в силу с момента моего перехода на сайт Оператора и действует до момента его отзыва. Согласие действует на период: 1 год. Согласие на обработку персональных данных может быть отозвано мною путем письменного уведомления по указанному адресу об этом не менее чем за один месяц до даты фактического прекращения обработки моих персональных данных Оператором.</p>
39 </div><a class="page-cookies__btn btn btn--main" href="#">Принять и продолжить</a>
33 </div> 40 </div>
34 </div> 41 </div>
35 </section> 42 </section>
36 @endsection 43 @endsection
37 44
38 @section('form_feedback') 45 @section('form_feedback')
39 <!-- Форма обратной связи --> 46 <!-- Форма обратной связи -->
40 @include('form.form_feedback') 47 @include('form.form_feedback')
41 @endsection 48 @endsection
42 49
resources/views/favorite.blade.php
1 @extends('layout.site', ['title' => 'Избранное RentTorg']) 1 @extends('layout.site', ['title' => 'Избранное RentTorg'])
2 2
3 @section('content') 3 @section('content')
4 <section class="favorites"> 4 <section class="favorites">
5 <div class="favorites-top"> 5 <div class="favorites-top">
6 <div class="container"> 6 <div class="container">
7 <div class="breadcrumbs"> 7 <div class="breadcrumbs">
8 <ul class="breadcrumbs__list"> 8 <ul class="breadcrumbs__list">
9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Главная</a></li> 9 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Главная</a></li>
10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">Избранное </span></li> 10 <li class="breadcrumbs__item"><span class="breadcrumbs__link">Избранное </span></li>
11 </ul> 11 </ul>
12 </div> 12 </div>
13 <h1 class="favorites__title title-main">Тут пока что ничего нет...</h1><a class="favorites-top__link" href=" {{ route('catalog') }}">Выберите идеальную недвижимость </a> 13 <h1 class="favorites__title title-main">Тут пока что ничего нет...</h1><a class="favorites-top__link" href=" {{ route('catalog') }}">Выберите идеальную недвижимость </a>
14 <p class="favorites__descr">Здесь вы можете ознакомиться с недвижимостью которая вам понравилось</p> 14 <p class="favorites__descr">Здесь вы можете ознакомиться с недвижимостью которая вам понравилось
15 </p>
15 </div> 16 </div>
16 </div> 17 </div>
17 <div class="favorites-cnt"> 18 <div class="favorites-cnt">
18 <div class="container"> 19 <div class="container">
19 <div class="favorites__items"> 20 <div class="favorites__items">
20 <div class="favorites-item"> 21 <div class="favorites-item">
21 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> 22 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div>
22 <p class="favorites-item__descr"><a href="{{ route('catalog') }}">Найдите</a> идеальную планировку на сайте Renttorg</p> 23 <p class="favorites-item__descr"><a href="{{ route('catalog') }}">Найдите</a> идеальную планировку на сайте Renttorg</p>
23 </div> 24 </div>
24 <div class="favorites-item"> 25 <div class="favorites-item">
25 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> 26 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div>
26 <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> 27 <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p>
27 </div> 28 </div>
28 <div class="favorites-item"> 29 <div class="favorites-item">
29 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> 30 <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div>
30 <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> 31 <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p>
31 </div> 32 </div>
32 </div> 33 </div>
33 </div> 34 </div>
34 </div> 35 </div>
35 </section> 36 </section>
36 @endsection 37 @endsection
37 38
38 @section('form_feedback') 39 @section('form_feedback')
39 <!-- Форма обратной связи --> 40 <!-- Форма обратной связи -->
40 @include('form.form_feedback') 41 @include('form.form_feedback')
41 @endsection 42 @endsection
42 43
resources/views/favorite_data.blade.php
File was created 1 @extends('layout.site', ['title' => 'Избранное RentTorg'])
2
3 @section('custom_js')
4 <script>
5 $(document).on('click', '.js_sort_group_item', function() {
6 var val = $(this).data('val');
7 var sort_price_val = '';
8 var sort_area_val = '';
9 var sort_new_val = '';
10
11 $('.sort-price').each(function() {
12 var this_ = $(this);
13 var v = $(this).data('val');
14 if (this_.hasClass('active'))
15 sort_price_val = v;
16 });
17
18 $('.sort-new').each(function() {
19 var v = $(this).data('val');
20 var this_ = $(this);
21 if (this_.hasClass('active'))
22 sort_new_val = v;
23 });
24
25 $('.sort-area').each(function() {
26 var v = $(this).data('val');
27 var this_ = $(this);
28 if (this_.hasClass('active'))
29 sort_area_val = v;
30
31 });
32
33 console.log('-------------------');
34 $.ajax({
35 type: "GET",
36 url: "{{ route('favorite') }}",
37 data: "sort_price="+sort_price_val+"&sort_new="+sort_new_val+"&sort_area="+sort_area_val+"",
38 success: function(data) {
39 console.log('Сортировка данных обновлена '+data);
40 $('#house_block').html(data);
41 },
42 headers: {
43 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
44 },
45 error: function(data) {
46 console.log('Error: '+ data);
47 }
48 });
49 }
50 );
51 </script>
52 @endsection
53
54 @section('content')
55 <section class="favorites">
56 <div class="favorites-top">
57 <div class="container">
58 <div class="breadcrumbs">
59 <ul class="breadcrumbs__list">
60 <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Главная</a></li>
61 <li class="breadcrumbs__item"><span class="breadcrumbs__link">Избранное </span></li>
62 </ul>
63 </div>
64 <h1 class="favorites__title title-main">Избранное</h1>
65 <p class="favorites__descr">Здесь вы можете ознакомиться с недвижимостью которая вам понравилось</p>
66 </div>
67 </div>
68 <div class="favorites-cnt">
69 <div class="container">
70 <form class="favorites__sorts">
71 <div class="favorites__sort-group sort-group js_sort_group">
72 <input class="js_sort_group_input" type="hidden">
73 <div class="sort-group__current js_sort_group_current">Сначала дешевле</div>
74 <ul class="sort-group__list js_sort_group_list">
75 <li class="sort-price sort-group__item js_sort_group_item active" data-val="1">Сначала дешевле</li>
76 <li class="sort-price sort-group__item js_sort_group_item" data-val="2">Сначала дороже</li>
77 </ul>
78 </div>
79 <div class="favorites__sort-group sort-group js_sort_group">
80 <input class="js_sort_group_input" type="hidden">
81 <div class="sort-group__current js_sort_group_current">Сначала новые</div>
82 <ul class="sort-group__list js_sort_group_list">
83 <li class="sort-new sort-group__item js_sort_group_item active" data-val="1">Сначала новые</li>
84 <li class="sort-new sort-group__item js_sort_group_item" data-val="2">Сначала старые</li>
85 </ul>
86 </div>
87 <div class="favorites__sort-group sort-group sort-group--wide js_sort_group">
88 <input class="js_sort_group_input" type="hidden">
89 <div class="sort-group__current js_sort_group_current">Сначала с большей площадью</div>
90 <ul class="sort-group__list js_sort_group_list">
91 <li class="sort-area sort-group__item js_sort_group_item active" data-val="1">Сначала с большей площадью</li>
92 <li class="sort-area sort-group__item js_sort_group_item" data-val="2">Сначала с меньшей площадью</li>
93 </ul>
94 </div>
95 </form>
96 <div class="favorites__grid" id="house_block">
97 @if ($houses->count())
98 @foreach ($houses as $house1)
99 @include('catalogs.house_mini', ['house' => $house1])
100 @endforeach
101 @else
102 <h3>Здесь пока что нет предложений</h3>
103 @endif
104 </div>
105 </div>
106 </div>
107 </section>
108 @endsection
109
110 @section('form_feedback')
111 <!-- Форма обратной связи -->
112 @include('form.form_feedback')
113 @endsection
114
resources/views/form/form_feedback.blade.php
1 <div class="footer-top"> 1 <div class="footer-top">
2 <div class="container"> 2 <div class="container">
3 <div class="footer-feedback"> 3 <div class="footer-feedback">
4 <div class="footer-feedback__cnt"> 4 <div class="footer-feedback__cnt">
5 <h2 class="footer-feedback__title title">Оставьте заявку</h2> 5 <h2 class="footer-feedback__title title">Оставьте заявку</h2>
6 <p class="footer-feedback__descr">и мы подберем для вас лучшее предложение!</p> 6 <p class="footer-feedback__descr">и мы подберем для вас лучшее предложение!</p>
7 </div> 7 </div>
8 <form class="footer-feedback__form js_footer_feedback_form"> 8 <form class="footer-feedback__form js_footer_feedback_form" action="{{ route('main_form') }}" method="POST">
9 <div class="footer-feedback__row"> 9 <div class="footer-feedback__row">
10 <div class="footer-feedback__col"> 10 <div class="footer-feedback__col">
11 <label class="footer-feedback__field field"> 11 <label class="footer-feedback__field field">
12 <input type="text" placeholder="Ваше имя" name="Имя"> 12 <input type="text" placeholder="Ваше имя" name="Имя">
13 </label> 13 </label>
14 <label class="footer-feedback__field field"> 14 <label class="footer-feedback__field field">
15 <input class="js_input_phone" type="text" placeholder="Номер телефона" name="Телефона"> 15 <input class="js_input_phone" type="text" placeholder="Номер телефона" name="Телефона">
16 </label> 16 </label>
17 </div> 17 </div>
18 <div class="footer-feedback__col"> 18 <div class="footer-feedback__col">
19 <label class="footer-feedback__field field"> 19 <label class="footer-feedback__field field">
20 <textarea placeholder="Ваше сообщение" name="Сообщение"></textarea> 20 <textarea placeholder="Ваше сообщение" name="Сообщение"></textarea>
21 </label> 21 </label>
22 </div> 22 </div>
23 </div> 23 </div>
24 <div class="footer-feedback__control"> 24 <div class="footer-feedback__control">
25 <button class="footer-feedback__btn btn btn--main js_form_btn">Отправить</button> 25 <button class="footer-feedback__btn btn btn--main js_form_btn">Отправить</button>
26 <p class="footer-feedback__privacy">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 26 <p class="footer-feedback__privacy">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
27 </div> 27 </div>
28 </form> 28 </form>
29 </div> 29 </div>
30 </div> 30 </div>
31 </div> 31 </div>
32 32
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="{{ $partner->foto }}" alt="{{ $partner->name }}" loading="lazy"></div> 308 <div class="partners-item"><img src="{{ $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="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="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/js/cookies_favorite.blade.php
File was created 1 <script>
2 $(document).ready(function() {
3 $(document).on('click', '.js_card_favorites', function () {
4 var _this = $(this);
5 var id_house = _this.attr('data-val');
6
7 if (_this.hasClass('active')) {
8 add_in_array(id_house);
9 console.log('Добавлено в избранное id=' + id_house);
10 } else {
11 delete_in_array(id_house);
12 console.log('Удалено из избранных id='+id_house)
13 }
14
15 var str = $.cookie('favorite_house');
16 console.log("Вывод куков "+str);
17
18 });
19 });
20
21 //помеченный элемент
22 function selected_item(obj) {
23 var arr = read_array();
24 var index = arr.indexOf(obj);
25
26 if (index > 0)
27 return "active";
28 else
29 return "";
30 }
31
32 // запись элемента массива в cookie
33 function add_in_array(obj){
34 var arr = read_array();//получаем текущее состояние массива
35 arr[arr.length]=obj; //добавляем элемент в конец
36 //var str = JSON.stringify(arr);//конвертируем в строку
37 //$.cookie('arr',str);//записываем массив в куки
38 $.cookie('favorite_house', JSON.stringify(arr));
39 }
40
41 // удаление элемента из массива в cookie
42 function delete_in_array(obj) {
43 var arr = read_array();
44 var index = arr.indexOf(obj);
45 arr.splice(index, 1);
46 //var str = JSON.stringify(arr);//конвертируем в строку
47 //$.cookie('arr',str);//записываем массив в куки
48 $.cookie('favorite_house', JSON.stringify(arr));
49 }
50
51 function read_array(){
52 var dataArr=$.cookie('favorite_house');//считываем данные из куков
53 //если массив не был обнаружен, иницилизируем его
54 if(dataArr===null){
55 dataArr = init_array(); //возвращаем инициализированный пустой маасив
56 }
57 //возвращаем полученный массив
58 //return JSON.parse(dataArr);
59 return JSON.parse(dataArr);
60 }
61
62 //другими словами создаем пустой массив
63 function init_array(){
64 //var str = JSON.stringify(new Array());//конвертируем в строку
65 var str = JSON.stringify(new Array());
66 $.cookie('favorite_house',str);//записываем массив в куки
67 return str;
68 }
69 </script>
70
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>0</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="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="#">Новая Москва</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>
172
173 <!--<li class="footer__item"><a class="footer__link" href="#">Новая Москва</a></li>
171 <li class="footer__item"><a class="footer__link" href="#">Подмосковье</a></li> 174 <li class="footer__item"><a class="footer__link" href="#">Подмосковье</a></li>
172 <li class="footer__item"><a class="footer__link" href="#">Москва</a></li> 175 <li class="footer__item"><a class="footer__link" href="#">Москва</a></li>
173 <li class="footer__item"><a class="footer__link" href="#">Тип недвижимости</a></li> 176 <li class="footer__item"><a class="footer__link" href="#">Тип недвижимости</a></li>-->
174 </ul> 177 </ul>
175 </div> 178 </div>
176 </div> 179 </div>
177 <div class="footer__col footer__col-contacts"> 180 <div class="footer__col footer__col-contacts">
178 <h3 class="footer__caption js_footer_caption">Контакты</h3> 181 <h3 class="footer__caption js_footer_caption">Контакты</h3>
179 <ul class="footer__list"> 182 <ul class="footer__list">
180 <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>
181 <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>
182 </ul> 185 </ul>
183 <div class="footer__social social"> 186 <div class="footer__social social">
184 <ul class="social__list"> 187 <ul class="social__list">
185 <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>
186 <li class="social__item"><a class="social__link" href="#" target="_blank"> 189 <li class="social__item"><a class="social__link" href="#" target="_blank">
187 <svg width="40" height="40"> 190 <svg width="40" height="40">
188 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use> 191 <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use>
189 </svg></a></li> 192 </svg></a></li>
190 </ul> 193 </ul>
191 </div> 194 </div>
192 </div> 195 </div>
193 </div> 196 </div>
194 </div> 197 </div>
195 </div> 198 </div>
196 199
197 <div class="footer-bottom"> 200 <div class="footer-bottom">
198 <div class="container"> 201 <div class="container">
199 <div class="footer-bottom__wrap"> 202 <div class="footer-bottom__wrap">
200 <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>
201 </div> 204 </div>
202 </div> 205 </div>
203 </div> 206 </div>
204 </footer> 207 </footer>
205 </div> 208 </div>
206 209
207 <!-- Вплывающие окна --> 210 <!-- Вплывающие окна -->
208 <div class="popup popup-feedback" data-popup="feedback"> 211 <div class="popup popup-feedback" data-popup="feedback">
209 <div class="popup__wrap"> 212 <div class="popup__wrap">
210 <button class="popup__close js_popup_close" type="button"> 213 <button class="popup__close js_popup_close" type="button">
211 <svg width="20" height="20"> 214 <svg width="20" height="20">
212 <use xlink:href="images/sprite.svg#popup-close"></use> 215 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
213 </svg> 216 </svg>
214 </button> 217 </button>
215 <form class="popup-feedback__form js_popup_feedback_form"> 218 <form class="popup-feedback__form js_popup_feedback_form">
216 <div class="popup-feedback__title">Как с вами связаться</div> 219 <div class="popup-feedback__title">Как с вами связаться</div>
217 <div class="popup-feedback__fields"> 220 <div class="popup-feedback__fields">
218 <label class="popup-feedback__field field"> 221 <label class="popup-feedback__field field">
219 <input type="text" placeholder="Имя" name="Имя"> 222 <input type="text" placeholder="Имя" name="Имя">
220 </label> 223 </label>
221 <label class="popup-feedback__field field"> 224 <label class="popup-feedback__field field">
222 <input class="js_input_phone" type="text" placeholder="Телефон" name="Телефон"> 225 <input class="js_input_phone" type="text" placeholder="Телефон" name="Телефон">
223 </label> 226 </label>
224 </div> 227 </div>
225 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 228 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
226 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 229 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
227 </form> 230 </form>
228 </div> 231 </div>
229 </div> 232 </div>
230 <div class="popup popup-feedback" data-popup="viewing"> 233 <div class="popup popup-feedback" data-popup="viewing">
231 <div class="popup__wrap"> 234 <div class="popup__wrap">
232 <button class="popup__close js_popup_close" type="button"> 235 <button class="popup__close js_popup_close" type="button">
233 <svg width="20" height="20"> 236 <svg width="20" height="20">
234 <use xlink:href="images/sprite.svg#popup-close"></use> 237 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
235 </svg> 238 </svg>
236 </button> 239 </button>
237 <form class="popup-feedback__form js_popup_viewing_form"> 240 <form class="popup-feedback__form js_popup_viewing_form">
238 <div class="popup-feedback__title">Записаться на просмотр</div> 241 <div class="popup-feedback__title">Записаться на просмотр</div>
239 <div class="popup-feedback__fields"> 242 <div class="popup-feedback__fields">
240 <label class="popup-feedback__field field"> 243 <label class="popup-feedback__field field">
241 <input type="text" placeholder="Имя" name="Имя"> 244 <input type="text" placeholder="Имя" name="Имя">
242 </label> 245 </label>
243 <label class="popup-feedback__field field"> 246 <label class="popup-feedback__field field">
244 <input class="js_input_phone" type="text" placeholder="Телефон" name="Телефон"> 247 <input class="js_input_phone" type="text" placeholder="Телефон" name="Телефон">
245 </label> 248 </label>
246 </div> 249 </div>
247 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 250 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
248 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 251 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
249 </form> 252 </form>
250 </div> 253 </div>
251 </div> 254 </div>
252 <div class="popup popup-success" data-popup="success"> 255 <div class="popup popup-success" data-popup="success">
253 <div class="popup__wrap"> 256 <div class="popup__wrap">
254 <button class="popup__close js_popup_close" type="button"> 257 <button class="popup__close js_popup_close" type="button">
255 <svg width="20" height="20"> 258 <svg width="20" height="20">
256 <use xlink:href="images/sprite.svg#popup-close"></use> 259 <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use>
257 </svg> 260 </svg>
258 </button> 261 </button>
259 <div class="popup-success__inner"> 262 <div class="popup-success__inner">
260 <div class="popup-success__logo"> 263 <div class="popup-success__logo">
261 <svg width="48" height="39"> 264 <svg width="48" height="39">
262 <use xlink:href="images/sprite.svg#popup-success-logo"></use> 265 <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use>
263 </svg> 266 </svg>
264 </div> 267 </div>
265 <div class="popup-success__title">Спасибо за заявку</div> 268 <div class="popup-success__title">Спасибо за заявку</div>
266 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p> 269 <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p>
267 </div> 270 </div>
268 </div> 271 </div>
269 </div> 272 </div>
270 <div class="popup popup-feedback" data-popup="sending"> 273 <div class="popup popup-feedback" data-popup="sending">
271 <div class="popup__wrap"> 274 <div class="popup__wrap">
272 <button class="popup__close js_popup_close" type="button"> 275 <button class="popup__close js_popup_close" type="button">
273 <svg width="20" height="20"> 276 <svg width="20" height="20">
274 <use xlink:href="images/sprite.svg#popup-close"></use> 277 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
275 </svg> 278 </svg>
276 </button> 279 </button>
277 <form class="popup-feedback__form js_popup_sending_form"> 280 <form class="popup-feedback__form js_popup_sending_form">
278 <div class="popup-feedback__title">Отправить на почту</div> 281 <div class="popup-feedback__title">Отправить на почту</div>
279 <div class="popup-feedback__fields"> 282 <div class="popup-feedback__fields">
280 <label class="popup-feedback__field field"> 283 <label class="popup-feedback__field field">
281 <input class="js_input_email" type="text" placeholder="Электронная почта" name="Электронная почта"> 284 <input class="js_input_email" type="text" placeholder="Электронная почта" name="Электронная почта">
282 </label> 285 </label>
283 </div> 286 </div>
284 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> 287 <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button>
285 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> 288 <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p>
286 </form> 289 </form>
287 </div> 290 </div>
288 </div> 291 </div>
289 <div class="contact-us js_contact_us"> 292 <div class="contact-us js_contact_us">
290 <div class="contact-us__top"> 293 <div class="contact-us__top">
291 <button class="contact-us__close js_contact_us_close" type="button"> 294 <button class="contact-us__close js_contact_us_close" type="button">
292 <svg width="20" height="20"> 295 <svg width="20" height="20">
293 <use xlink:href="images/sprite.svg#popup-close"></use> 296 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
294 </svg> 297 </svg>
295 </button> 298 </button>
296 <div class="contact-us__title">Свяжитесь с нами</div> 299 <div class="contact-us__title">Свяжитесь с нами</div>
297 </div> 300 </div>
298 <div class="contact-us__body"> 301 <div class="contact-us__body">
299 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" href="#"> 302 <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" href="#">
300 <div class="contact-us-item__icon"> 303 <div class="contact-us-item__icon">
301 <svg width="34" height="34"> 304 <svg width="34" height="34">
302 <use xlink:href="images/sprite.svg#contact-us-phone"></use> 305 <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use>
303 </svg> 306 </svg>
304 </div> 307 </div>
305 <div class="contact-us-item__name">Позвонить</div></a><a class="contact-us-item js_contact_us_close" href="#"> 308 <div class="contact-us-item__name">Позвонить</div></a><a class="contact-us-item js_contact_us_close" href="#">
306 <div class="contact-us-item__icon"> 309 <div class="contact-us-item__icon">
307 <svg width="44" height="44"> 310 <svg width="44" height="44">
308 <use xlink:href="images/sprite.svg#contact-us-email"></use> 311 <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use>
309 </svg> 312 </svg>
310 </div> 313 </div>
311 <div class="contact-us-item__name">Написать</div></a><a class="contact-us-item js_contact_us_close" href="#"> 314 <div class="contact-us-item__name">Написать</div></a><a class="contact-us-item js_contact_us_close" href="#">
312 <div class="contact-us-item__icon"> 315 <div class="contact-us-item__icon">
313 <svg width="34" height="34"> 316 <svg width="34" height="34">
314 <use xlink:href="images/sprite.svg#contact-us-chat"></use> 317 <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use>
315 </svg> 318 </svg>
316 </div> 319 </div>
317 <div class="contact-us-item__name">Онлайн-чат</div></a></div> 320 <div class="contact-us-item__name">Онлайн-чат</div></a></div>
318 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 321 <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
319 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="images/contact-us-tg.svg" alt=""></div> 322 <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div>
320 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> 323 <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank">
321 <div class="contact-us-social__icon contact-us-social__icon-wa"> 324 <div class="contact-us-social__icon contact-us-social__icon-wa">
322 <svg width="31" height="31"> 325 <svg width="31" height="31">
323 <use xlink:href="images/sprite.svg#contact-us-wa"></use> 326 <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use>
324 </svg> 327 </svg>
325 </div> 328 </div>
326 <div class="contact-us-social__name">WhatsApp</div></a></div> 329 <div class="contact-us-social__name">WhatsApp</div></a></div>
327 </div> 330 </div>
328 </div> 331 </div>
329 <div class="offer-side-popup" data-popup="offer-side-popup"> 332 <div class="offer-side-popup" data-popup="offer-side-popup">
330 <div class="offer-side-popup__wrap"> 333 <div class="offer-side-popup__wrap">
331 <button class="offer-side-popup__close js_popup_close" type="button"> 334 <button class="offer-side-popup__close js_popup_close" type="button">
332 <svg width="20" height="20"> 335 <svg width="20" height="20">
333 <use xlink:href="images/sprite.svg#popup-close"></use> 336 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
334 </svg> 337 </svg>
335 </button> 338 </button>
336 <div class="offer-side-popup__cnt"> 339 <div class="offer-side-popup__cnt">
337 <div class="offer-side-popup__item js_offer_side_popup_item active" data-item="1"><img src="images/offer-side-item-img-1.jpg" alt="План объекта"></div> 340 <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>
338 <div class="offer-side-popup__item js_offer_side_popup_item" data-item="2"><img src="images/offer-side-item-img-2.jpg" alt="План этажа"></div> 341 <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>
339 </div> 342 </div>
340 <div class="offer-side-popup__tabs"> 343 <div class="offer-side-popup__tabs">
341 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button> 344 <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button>
342 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button> 345 <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button>
343 </div> 346 </div>
344 <button class="offer-side-popup__sizeoff js_popup_close" type="button"> 347 <button class="offer-side-popup__sizeoff js_popup_close" type="button">
345 <svg width="18" height="18"> 348 <svg width="18" height="18">
346 <use xlink:href="images/sprite.svg#popup-sizeoff"></use> 349 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use>
347 </svg> 350 </svg>
348 </button> 351 </button>
349 </div> 352 </div>
350 </div> 353 </div>
351 <div class="img-viewer js_img_viewer"> 354 <div class="img-viewer js_img_viewer">
352 <div class="img-viewer__wrap"> 355 <div class="img-viewer__wrap">
353 <button class="img-viewer__close js_img_viewer_close" type="button"> 356 <button class="img-viewer__close js_img_viewer_close" type="button">
354 <svg width="20" height="20"> 357 <svg width="20" height="20">
355 <use xlink:href="images/sprite.svg#popup-close"></use> 358 <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use>
356 </svg> 359 </svg>
357 </button> 360 </button>
358 <div class="img-viewer__thumbs js_img_viewer_thumbs"> 361 <div class="img-viewer__thumbs js_img_viewer_thumbs">
359 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper"> 362 <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper">
360 <div class="swiper-wrapper"></div> 363 <div class="swiper-wrapper"></div>
361 </div> 364 </div>
362 </div> 365 </div>
363 <div class="img-viewer__slider"> 366 <div class="img-viewer__slider">
364 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper"> 367 <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper">
365 <div class="swiper-wrapper"></div> 368 <div class="swiper-wrapper"></div>
366 </div> 369 </div>
367 <div class="swiper-button-prev"> 370 <div class="swiper-button-prev">
368 <svg width="10" height="17"> 371 <svg width="10" height="17">
369 <use xlink:href="images/sprite.svg#slider-arrow"></use> 372 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
370 </svg> 373 </svg>
371 </div> 374 </div>
372 <div class="swiper-button-next"> 375 <div class="swiper-button-next">
373 <svg width="10" height="17"> 376 <svg width="10" height="17">
374 <use xlink:href="images/sprite.svg#slider-arrow"></use> 377 <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use>
375 </svg> 378 </svg>
376 </div> 379 </div>
377 </div> 380 </div>
378 <div class="img-viewer__caption js_img_viewer_caption"></div> 381 <div class="img-viewer__caption js_img_viewer_caption"></div>
379 <button class="img-viewer__sizeoff js_img_viewer_close" type="button"> 382 <button class="img-viewer__sizeoff js_img_viewer_close" type="button">
380 <svg width="18" height="18"> 383 <svg width="18" height="18">
381 <use xlink:href="images/sprite.svg#popup-sizeoff"></use> 384 <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use>
382 </svg> 385 </svg>
383 </button> 386 </button>
384 </div> 387 </div>
385 </div> 388 </div>
386 <div class="cookies js_cookies"> 389 <div class="cookies js_cookies">
387 <div class="container"> 390 <div class="container">
388 <div class="cookies__wrap"> 391 <div class="cookies__wrap">
389 <div class="cookies__top"> 392 <div class="cookies__top">
390 <div class="cookies__img"><img src="images/cookies.svg" alt="cookies"></div> 393 <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div>
391 <div class="cookies__title">Cookies</div> 394 <div class="cookies__title">Cookies</div>
392 </div> 395 </div>
393 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p> 396 <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p>
394 <div class="cookies__buttons"> 397 <div class="cookies__buttons">
395 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="page-cookies.html">Подробнее</a> 398 <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a>
396 </div> 399 </div>
397 </div> 400 </div>
398 </div> 401 </div>
399 </div> 402 </div>
400 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script> 403 <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script>
401 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script> 404 <script src="{{ asset('js/swiper-bundle.min.js') }}"></script>
402 <script src="{{ asset('js/main.js') }}"></script> 405 <script src="{{ asset('js/main.js') }}"></script>
403 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script> 406 <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script>
407 <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script>
404 @yield('custom_js') 408 @yield('custom_js')
409 @include('js.cookies_favorite')
405 </body> 410 </body>
406 </html> 411 </html>
407 412
1 <?php 1 <?php
2 2
3 use Illuminate\Support\Facades\Auth; 3 use Illuminate\Support\Facades\Auth;
4 use Illuminate\Support\Facades\Route; 4 use Illuminate\Support\Facades\Route;
5 use App\Http\Controllers\MainController; 5 use App\Http\Controllers\MainController;
6 use App\Http\Controllers\RegisterController; 6 use App\Http\Controllers\RegisterController;
7 use App\Http\Controllers\LoginController; 7 use App\Http\Controllers\LoginController;
8 use App\Http\Controllers\AdminController; 8 use App\Http\Controllers\AdminController;
9 /* 9 /*
10 |-------------------------------------------------------------------------- 10 |--------------------------------------------------------------------------
11 | Web Routes 11 | Web Routes
12 |-------------------------------------------------------------------------- 12 |--------------------------------------------------------------------------
13 | 13 |
14 | Here is where you can register web routes for your application. These 14 | Here is where you can register web routes for your application. These
15 | routes are loaded by the RouteServiceProvider within a group which 15 | routes are loaded by the RouteServiceProvider within a group which
16 | contains the "web" middleware group. Now create something great! 16 | contains the "web" middleware group. Now create something great!
17 | 17 |
18 */ 18 */
19 19
20 //Главная страница 20 //Главная страница
21 Route::get('/',[MainController::class, 'index'])->name('index'); 21 Route::get('/',[MainController::class, 'index'])->name('index');
22 22
23 //Страница Избранные 23 //Страница Избранные
24 Route::get('favorite',[MainController::class, 'favorite'])->name('favorite'); 24 Route::get('favorite',[MainController::class, 'favorite'])->name('favorite');
25 25
26 //Страница контакты 26 //Страница контакты
27 Route::get('contact',[MainController::class, 'contact'])->name('contact'); 27 Route::get('contact',[MainController::class, 'contact'])->name('contact');
28 28
29 //Страница каталог 29 //Страница каталог
30 Route::get('catalog',[MainController::class, 'catalog'])->name('catalog'); 30 Route::get('catalog',[MainController::class, 'catalog'])->name('catalog');
31 31
32 //Страница новости 32 //Страница новости
33 Route::get('news',[MainController::class, 'news'])->name('news'); 33 Route::get('news',[MainController::class, 'news'])->name('news');
34 34
35 //Страница о компании 35 //Страница о компании
36 Route::get('about',[MainController::class, 'about'])->name('about'); 36 Route::get('about',[MainController::class, 'about'])->name('about');
37 37
38 //Страница объекты на карте 38 //Страница объекты на карте
39 Route::get('maps',[MainController::class, 'mapsobj'])->name('maps'); 39 Route::get('maps',[MainController::class, 'mapsobj'])->name('maps');
40 40
41 // Политика конфедициальности 41 // Политика конфедициальности
42 Route::get('conf', function () { 42 Route::get('conf', function () {
43 return view('conf'); 43 return view('conf');
44 })->name('conf'); 44 })->name('conf');
45 45
46 //Детальная страница предложения недвижимости 46 //Детальная страница предложения недвижимости
47 Route::get('offer/{house:id}', [MainController::class, 'offer'])->name('offer'); 47 Route::get('offer/{house:id}', [MainController::class, 'offer'])->name('offer');
48 48
49 //Детальная страница новостей 49 //Детальная страница новостей
50 Route::get('detail-new/{news:id}', [MainController::class, 'DetailNew'])->name('new'); 50 Route::get('detail-new/{news:id}', [MainController::class, 'DetailNew'])->name('new');
51 51
52 //Страница ЖилойКомплекс 52 //Страница ЖилойКомплекс
53 Route::get('complex/{area:id}', [MainController::class, 'complex'])->name('complex'); 53 Route::get('complex/{area:id}', [MainController::class, 'complex'])->name('complex');
54 54
55 // ajax-фильтры каталога 55 // ajax-фильтры каталога
56 Route::get('catalog_ajax_filter', [MainController::class, 'catalog_ajax_filter'])->name('catalog_ajax_filter'); 56 Route::get('catalog_ajax_filter', [MainController::class, 'catalog_ajax_filter'])->name('catalog_ajax_filter');
57 57
58 //Категория 58 //Категория
59 Route::get('category/{cat}', [MainController::class, 'Category'])->name('category'); 59 Route::get('category/{cat}', [MainController::class, 'Category'])->name('category');
60 60
61 //Категория ajax 61 //Категория ajax
62 Route::get('category_ajax/{cat}', [MainController::class, 'category_ajax'])->name('category_ajax'); 62 Route::get('category_ajax/{cat}', [MainController::class, 'category_ajax'])->name('category_ajax');
63 63
64 //Страница куков
65 Route::get('cookies', function () {
66 return view('cookies');
67 })->name('cookies');
68
69 //Форма обратной связи в футере
70 Route::post('main_form', [MainController::class, 'main_form'])->name('main_form');
64 71
65 Route::group([ 72 Route::group([
66 'as' => 'auth.', // имя маршрута, например auth.index 73 'as' => 'auth.', // имя маршрута, например auth.index
67 'prefix' => 'auth', // префикс маршрута, например auth/index 74 'prefix' => 'auth', // префикс маршрута, например auth/index
68 ], function () { 75 ], function () {
69 // Форма регистрации 76 // Форма регистрации
70 Route::get('register', [RegisterController::class, 'register'])->name('register'); 77 Route::get('register', [RegisterController::class, 'register'])->name('register');
71 78
72 // Создание пользователя 79 // Создание пользователя
73 Route::post('register', [RegisterController::class, 'create'])->name('create'); 80 Route::post('register', [RegisterController::class, 'create'])->name('create');
74 //Форма входа 81 //Форма входа
75 Route::get('login', [LoginController::class, 'login'])->name('login'); 82 Route::get('login', [LoginController::class, 'login'])->name('login');
76 83
77 // аутентификация 84 // аутентификация
78 Route::post('login', [LoginController::class, 'autenticate'])->name('auth'); 85 Route::post('login', [LoginController::class, 'autenticate'])->name('auth');
79 86
80 // выход 87 // выход
81 Route::get('logout', [LoginController::class, 'logout'])->name('logout'); 88 Route::get('logout', [LoginController::class, 'logout'])->name('logout');
82 }); 89 });
83 90
84 /* 91 /*
85 * Личный кабинет пользователя 92 * Личный кабинет пользователя
86 */ 93 */
87 Route::group([ 94 Route::group([
88 'as' => 'user.', // имя маршрута, например user.index 95 'as' => 'user.', // имя маршрута, например user.index
89 'prefix' => 'user', // префикс маршрута, например user/index 96 'prefix' => 'user', // префикс маршрута, например user/index
90 //'namespace' => 'User', // пространство имен контроллеров 97 //'namespace' => 'User', // пространство имен контроллеров
91 'middleware' => ['auth'] // один или несколько посредников 98 'middleware' => ['auth'] // один или несколько посредников
92 ], function () { 99 ], function () {
93 // главная страница 100 // главная страница
94 Route::get('index', [AdminController::class, 'index'])->name('index'); 101 Route::get('index', [AdminController::class, 'index'])->name('index');
95 }); 102 });
96 103