Commit 3646d2a475cf69a5f6e1594c4a864b7a9ff5e6ea
1 parent
5e41e3567e
Exists in
master
Механизм избранные карточки и форма обратной связи
Showing 20 changed files with 1987 additions and 137 deletions Inline Diff
- app/Classes/RusDate.php
- app/Http/Controllers/MainController.php
- app/Providers/ComposerServiceProvider.php
- public/js/jquery.cookie.js
- public/js/jquery.cookie.zip
- public/js/main \342\200\224 \320\272\320\276\320\277\320\270\321\217.js
- public/js/main.js
- resources/views/about.blade.php
- resources/views/ajax/complex/favorite.blade.php
- resources/views/catalog.blade.php
- resources/views/catalogs/elemhouse.blade.php
- resources/views/catalogs/house_mini.blade.php
- resources/views/cookies.blade.php
- resources/views/favorite.blade.php
- resources/views/favorite_data.blade.php
- resources/views/form/form_feedback.blade.php
- resources/views/index.blade.php
- resources/views/js/cookies_favorite.blade.php
- resources/views/layout/site.blade.php
- routes/web.php
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
public/js/main.js
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> лидер на рынке аренды и продажи недвижимости для бизнеса.</h1> | 14 | <h1 class="about__title title-main"><strong>Renttorg</strong> лидер на рынке аренды и продажи недвижимости для бизнеса.</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">×</span> | 91 | <span aria-hidden="true">×</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">×</span> | 102 | <span aria-hidden="true">×</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 |
routes/web.php
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 |