Commit 7c115bff1b6da3dd756680c7026e2086c20b26c3
1 parent
3a94dc815e
Exists in
master
Админка - объекты недвижимости
Showing 15 changed files with 366 additions and 42 deletions Inline Diff
- app/Classes/RusDate.php
- app/Http/Controllers/Admin/AreaController.php
- app/Http/Controllers/AdminController.php
- app/Http/Requests/AreasRequest.php
- app/Models/Area.php
- database/migrations/2023_03_01_072712_create_areas_table.php
- resources/views/admin/area/create.blade.php
- resources/views/admin/area/edit.blade.php
- resources/views/admin/area/form.blade.php
- resources/views/admin/area/index.blade.php
- resources/views/admin/area/view.blade.php
- resources/views/admin/index.blade.php
- resources/views/auth/vefiry-message.blade.php
- resources/views/layout/admin.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 | 47 | ||
48 | public static function selected_item($item) { | 48 | public static function selected_item($item) { |
49 | if (empty($_COOKIE['favorite_house'])) | 49 | if (empty($_COOKIE['favorite_house'])) |
50 | return ""; | 50 | return ""; |
51 | else { | 51 | else { |
52 | $Str = json_decode($_COOKIE['favorite_house'], true); | 52 | $Str = json_decode($_COOKIE['favorite_house'], true); |
53 | //$Arr = explode(",", $Str); | 53 | //$Arr = explode(",", $Str); |
54 | if (in_array($item, $Str)) | 54 | if (in_array($item, $Str)) |
55 | return " active "; | 55 | return " active "; |
56 | else | 56 | else |
57 | return ""; | 57 | return ""; |
58 | } | 58 | } |
59 | } | 59 | } |
60 | 60 | ||
61 | public static function count_item_fav() { | 61 | public static function count_item_fav() { |
62 | if (empty($_COOKIE['favorite_house'])) | 62 | if (empty($_COOKIE['favorite_house'])) |
63 | return 0; | 63 | return 0; |
64 | else { | 64 | else { |
65 | $Arr = json_decode($_COOKIE['favorite_house'], true); | 65 | $Arr = json_decode($_COOKIE['favorite_house'], true); |
66 | return count($Arr); | 66 | return count($Arr); |
67 | } | 67 | } |
68 | } | 68 | } |
69 | 69 | ||
70 | public static function clear_items() { | 70 | public static function clear_items() { |
71 | unset($_COOKIE['favorite_house']); | 71 | if (!empty($_COOKIE['favorite_house'])) |
72 | unset($_COOKIE['favorite_house']); | ||
72 | //print_r($_COOKIE['arr']); | 73 | //print_r($_COOKIE['arr']); |
73 | } | 74 | } |
74 | } | 75 | } |
75 | 76 |
app/Http/Controllers/Admin/AreaController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers\Admin; | 3 | namespace App\Http\Controllers\Admin; |
4 | 4 | ||
5 | use App\Http\Controllers\Controller; | 5 | use App\Http\Controllers\Controller; |
6 | use App\Http\Requests\AreasRequest; | ||
6 | use App\Models\Area; | 7 | use App\Models\Area; |
7 | use Illuminate\Http\Request; | 8 | use Illuminate\Http\Request; |
9 | use Illuminate\Support\Facades\Storage; | ||
8 | 10 | ||
9 | class AreaController extends Controller | 11 | class AreaController extends Controller |
10 | { | 12 | { |
11 | /** | 13 | /** |
12 | * Display a listing of the resource. | 14 | * Display a listing of the resource. |
13 | * | 15 | * |
14 | * @return \Illuminate\Http\Response | 16 | * @return \Illuminate\Http\Response |
15 | */ | 17 | */ |
16 | public function index() | 18 | public function index() |
17 | { | 19 | { |
18 | $areas = Area::query()->orderByDesc('created_at')->paginate(5); | 20 | $areas = Area::query()->orderByDesc('created_at')->paginate(5); |
19 | return view('admin.area.index', compact('areas')); | 21 | return view('admin.area.index', compact('areas')); |
20 | } | 22 | } |
21 | 23 | ||
22 | /** | 24 | /** |
23 | * Show the form for creating a new resource. | 25 | * Show the form for creating a new resource. |
24 | * | 26 | * Форма создания объекта |
25 | * @return \Illuminate\Http\Response | 27 | * @return \Illuminate\Http\Response |
26 | */ | 28 | */ |
27 | public function create() | 29 | public function create() |
28 | { | 30 | { |
29 | // | 31 | return view('admin.area.create'); |
30 | } | 32 | } |
31 | 33 | ||
32 | 34 | ||
33 | public function area_category() { | 35 | public function area_category() { |
34 | 36 | ||
35 | } | 37 | } |
36 | 38 | ||
37 | /** | 39 | /** |
38 | * Store a newly created resource in storage. | 40 | * Store a newly created resource in storage. |
39 | * | 41 | * |
40 | * @param \Illuminate\Http\Request $request | 42 | * @param \Illuminate\Http\Request $request |
41 | * @return \Illuminate\Http\Response | 43 | * @return \Illuminate\Http\Response |
42 | */ | 44 | */ |
43 | public function store(Request $request) | 45 | public function store(AreasRequest $request) |
44 | { | 46 | { |
45 | // | 47 | $params = $request->all(); |
48 | //unset($params['foto_main']); | ||
49 | |||
50 | if ($request->has('foto_main')) { | ||
51 | $params['foto_main'] = $request->file('foto_main')->store('areas', 'public'); | ||
52 | } | ||
53 | |||
54 | Area::create($params); | ||
55 | return redirect()->route('admin.area.index'); | ||
46 | } | 56 | } |
47 | 57 | ||
48 | /** | 58 | /** |
49 | * Display the specified resource. | 59 | * Display the specified resource. |
50 | * | 60 | * Просмотр объекта недвижимости |
51 | * @param \App\Models\Area $area | 61 | * @param \App\Models\Area $area |
52 | * @return \Illuminate\Http\Response | 62 | * @return \Illuminate\Http\Response |
53 | */ | 63 | */ |
54 | public function show(Area $area) | 64 | public function show(Area $area) |
55 | { | 65 | { |
56 | // | 66 | return view('admin.area.view', compact('area')); |
57 | } | 67 | } |
58 | 68 | ||
59 | /** | 69 | /** |
60 | * Show the form for editing the specified resource. | 70 | * Show the form for editing the specified resource. |
61 | * | 71 | * Форма редактирования объекта |
62 | * @param \App\Models\Area $area | 72 | * @param \App\Models\Area $area |
63 | * @return \Illuminate\Http\Response | 73 | * @return \Illuminate\Http\Response |
64 | */ | 74 | */ |
65 | public function edit(Area $area) | 75 | public function edit(Area $area) |
66 | { | 76 | { |
67 | // | 77 | return view('admin.area.edit', compact('area')); |
68 | } | 78 | } |
69 | 79 | ||
70 | /** | 80 | /** |
71 | * Update the specified resource in storage. | 81 | * Update the specified resource in storage. |
72 | * | 82 | * Обновление-сохранение объекта недвижимости |
73 | * @param \Illuminate\Http\Request $request | 83 | * @param \Illuminate\Http\Request $request |
74 | * @param \App\Models\Area $area | 84 | * @param \App\Models\Area $area |
75 | * @return \Illuminate\Http\Response | 85 | * @return \Illuminate\Http\Response |
76 | */ | 86 | */ |
77 | public function update(Request $request, Area $area) | 87 | public function update(AreasRequest $request, Area $area) |
78 | { | 88 | { |
79 | // | 89 | $params = $request->all(); |
90 | unset($params['foto_main']); | ||
91 | if ($request->has('foto_main')) { | ||
92 | Storage::delete($area->foto_main); | ||
93 | $params['foto_main'] = $request->file('foto_main')->store('areas', 'public'); | ||
94 | } | ||
95 | |||
96 | $area->update($params); | ||
97 | return redirect()->route('admin.area.index'); | ||
80 | } | 98 | } |
81 | 99 | ||
82 | /** | 100 | /** |
83 | * Remove the specified resource from storage. | 101 | * Remove the specified resource from storage. |
84 | * | 102 | * Удаление объекта недвижимости |
85 | * @param \App\Models\Area $area | 103 | * @param \App\Models\Area $area |
86 | * @return \Illuminate\Http\Response | 104 | * @return \Illuminate\Http\Response |
87 | */ | 105 | */ |
88 | public function destroy(Area $area) | 106 | public function destroy(Area $area) |
89 | { | 107 | { |
90 | // | 108 | if (!empty($area->foto_main)) { |
109 | Storage::delete($area->foto_main); | ||
110 | } | ||
111 | $area->delete(); | ||
112 | return redirect()->route('admin.area.index'); | ||
91 | } | 113 | } |
92 | } | 114 | } |
93 | 115 |
app/Http/Controllers/AdminController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers; | 3 | namespace App\Http\Controllers; |
4 | 4 | ||
5 | use Illuminate\Http\Request; | 5 | use Illuminate\Http\Request; |
6 | 6 | ||
7 | class AdminController extends Controller | 7 | class AdminController extends Controller |
8 | { | 8 | { |
9 | // главная страница административного раздела | 9 | // главная страница административного раздела |
10 | public function index() { | 10 | public function index() { |
11 | return view('admin.index'); | 11 | return view('admin.index'); |
12 | } | 12 | } |
13 | |||
14 | // страница | ||
15 | } | 13 | } |
16 | 14 |
app/Http/Requests/AreasRequest.php
File was created | 1 | <?php | |
2 | |||
3 | namespace App\Http\Requests; | ||
4 | |||
5 | use Illuminate\Foundation\Http\FormRequest; | ||
6 | |||
7 | class AreasRequest extends FormRequest | ||
8 | { | ||
9 | /** | ||
10 | * Determine if the user is authorized to make this request. | ||
11 | * | ||
12 | * @return bool | ||
13 | */ | ||
14 | public function authorize() | ||
15 | { | ||
16 | return true; | ||
17 | } | ||
18 | |||
19 | /** | ||
20 | * Get the validation rules that apply to the request. | ||
21 | * | ||
22 | * @return array<string, mixed> | ||
23 | */ | ||
24 | public function rules() | ||
25 | { | ||
26 | return [ | ||
27 | 'name_area' => 'required|min:3|max:255', | ||
28 | 'description' => 'required|min:5', | ||
29 | ]; | ||
30 | } | ||
31 | |||
32 | public function messages() { | ||
33 | return [ | ||
34 | 'required' => 'Поле :attribute обязательно для ввода', | ||
35 | 'min' => 'Поле :attribute должно иметь минимум :min символов', | ||
36 | 'max' => 'Поле :attribute должно содержать не более :max символов' | ||
37 | ]; | ||
38 | } | ||
39 | |||
40 | } | ||
41 |
app/Models/Area.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Models; | 3 | namespace App\Models; |
4 | 4 | ||
5 | use Illuminate\Database\Eloquent\Factories\HasFactory; | 5 | use Illuminate\Database\Eloquent\Factories\HasFactory; |
6 | use Illuminate\Database\Eloquent\Model; | 6 | use Illuminate\Database\Eloquent\Model; |
7 | 7 | ||
8 | class Area extends Model | 8 | class Area extends Model |
9 | { | 9 | { |
10 | use HasFactory; | 10 | use HasFactory; |
11 | 11 | ||
12 | protected $fillable = ['name_area', 'description', 'foto_main', 'coord_x', 'coord_y']; | ||
13 | |||
14 | |||
12 | /* | 15 | /* |
13 | * Связь Объектов недвижимости с офисами | 16 | * Связь Объектов недвижимости с офисами |
14 | */ | 17 | */ |
15 | public function house() { | 18 | public function house() { |
16 | return $this->hasMany(House::class); | 19 | return $this->hasMany(House::class); |
17 | } | 20 | } |
18 | 21 | ||
19 | /* | 22 | /* |
20 | * Связь объектов недвижимости с фотогалереей | 23 | * Связь объектов недвижимости с фотогалереей |
21 | */ | 24 | */ |
22 | public function fotos() { | 25 | public function fotos() { |
23 | return $this->hasMany(foto_area::class); | 26 | return $this->hasMany(foto_area::class); |
24 | } | 27 | } |
25 | 28 | ||
26 | } | 29 | } |
27 | 30 |
database/migrations/2023_03_01_072712_create_areas_table.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | use Illuminate\Database\Migrations\Migration; | 3 | use Illuminate\Database\Migrations\Migration; |
4 | use Illuminate\Database\Schema\Blueprint; | 4 | use Illuminate\Database\Schema\Blueprint; |
5 | use Illuminate\Support\Facades\Schema; | 5 | use Illuminate\Support\Facades\Schema; |
6 | 6 | ||
7 | return new class extends Migration | 7 | return new class extends Migration |
8 | { | 8 | { |
9 | /** | 9 | /** |
10 | * Run the migrations. | 10 | * Run the migrations. |
11 | * | 11 | * |
12 | * @return void | 12 | * @return void |
13 | */ | 13 | */ |
14 | public function up() | 14 | public function up() |
15 | { | 15 | { |
16 | Schema::create('areas', function (Blueprint $table) { | 16 | Schema::create('areas', function (Blueprint $table) { |
17 | $table->id(); | 17 | $table->id(); |
18 | $table->string('name_area', 255); | 18 | $table->string('name_area', 255)->nullable(); |
19 | $table->string('slug', 255)->unique(); | 19 | $table->string('slug', 255)->unique()->nullable(); |
20 | $table->text('description'); | 20 | $table->text('description')->nullable(); |
21 | $table->string('map_coord')->default(''); | 21 | $table->string('map_coord')->default(''); |
22 | $table->float('coord_x')->default(0.0); | 22 | $table->integer('coord_x')->default(0); |
23 | $table->float('coord_y')->default(0.0); | 23 | $table->integer('coord_y')->default(0); |
24 | $table->string('foto_main', 255); | 24 | $table->string('foto_main', 255)->nullable(); |
25 | $table->timestamps(); | 25 | $table->timestamps(); |
26 | }); | 26 | }); |
27 | } | 27 | } |
28 | 28 | ||
29 | /** | 29 | /** |
30 | * Reverse the migrations. | 30 | * Reverse the migrations. |
31 | * | 31 | * |
32 | * @return void | 32 | * @return void |
33 | */ | 33 | */ |
34 | public function down() | 34 | public function down() |
35 | { | 35 | { |
36 | Schema::dropIfExists('areas'); | 36 | Schema::dropIfExists('areas'); |
37 | } | 37 | } |
38 | }; | 38 | }; |
39 | 39 |
resources/views/admin/area/create.blade.php
File was created | 1 | @extends('layout.admin', ['title' => 'Создание нового объекта']) | |
2 | |||
3 | @section('content') | ||
4 | <section class="favorites"> | ||
5 | <div class="favorites-top"> | ||
6 | <div class="container"> | ||
7 | <div class="breadcrumbs"> | ||
8 | <ul class="breadcrumbs__list"> | ||
9 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('user.index') }}">Главная</a></li> | ||
10 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('admin.area.index') }}">Объекты недвижимости </a></li> | ||
11 | <li class="breadcrumbs__item"><span class="breadcrumbs__link">Создание объекта недвижимости </span></li> | ||
12 | </ul> | ||
13 | </div> | ||
14 | <h1 class="favorites__title title-main">Создание объекта недвижимости</h1> | ||
15 | </div> | ||
16 | </div> | ||
17 | <div class="favorites-cnt"> | ||
18 | <div class="container"> | ||
19 | <form method="post" enctype="multipart/form-data" action="{{ route('admin.area.store') }}" style="width:100%"> | ||
20 | @include('admin.area.form') | ||
21 | </form> | ||
22 | </div> | ||
23 | </div> | ||
24 | </section> | ||
25 | @endsection | ||
26 |
resources/views/admin/area/edit.blade.php
File was created | 1 | @extends('layout.admin', ['title' => 'Изменение объекта']) | |
2 | |||
3 | @section('content') | ||
4 | <section class="favorites"> | ||
5 | <div class="favorites-top"> | ||
6 | <div class="container"> | ||
7 | <div class="breadcrumbs"> | ||
8 | <ul class="breadcrumbs__list"> | ||
9 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('user.index') }}">Главная</a></li> | ||
10 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('admin.area.index') }}">Объекты недвижимости </a></li> | ||
11 | <li class="breadcrumbs__item"><span class="breadcrumbs__link">Изменение объекта недвижимости </span></li> | ||
12 | </ul> | ||
13 | </div> | ||
14 | <h1 class="favorites__title title-main">Изменение объекта недвижимости</h1> | ||
15 | </div> | ||
16 | </div> | ||
17 | <div class="favorites-cnt"> | ||
18 | <div class="container"> | ||
19 | <form method="post" enctype="multipart/form-data" action="{{ route('admin.area.update', ['area' => $area->id]) }}" style="width:100%"> | ||
20 | @include('admin.area.form') | ||
21 | </form> | ||
22 | </div> | ||
23 | </div> | ||
24 | </section> | ||
25 | @endsection | ||
26 | |||
27 |
resources/views/admin/area/form.blade.php
File was created | 1 | @csrf | |
2 | |||
3 | @isset($area) | ||
4 | @method('PUT') | ||
5 | @endisset | ||
6 | |||
7 | <label for="name_area">Название объекта: <span class="req">*</span></label> | ||
8 | @error('name_area') | ||
9 | <div class="alert alert-danger">{{ $message }}</div> | ||
10 | @enderror | ||
11 | <input type="text" class="form-control_ txt" name="name_area" placeholder="Название объекта" | ||
12 | required maxlength="100" style="width: 80%" value="{{ old('name_area') ?? $area->name_area ?? '' }}"><br> | ||
13 | |||
14 | <label for="description">Описание объекта: <span class="req">*</span></label> | ||
15 | @error('description') | ||
16 | <div class="alert alert-danger">{{ $message }}</div> | ||
17 | @enderror | ||
18 | <textarea class="form-control_ txtarea ckeditor" name="description" placeholder="Описание" required | ||
19 | rows="10" style="width: 80%">{{ old('description') ?? $area->description ?? '' }}</textarea><br> | ||
20 | |||
21 | <label for="coord_X">Коорд. X: </label> | ||
22 | <input type="text" class="form-control_ txt" name="coord_X" placeholder="Координаты X" | ||
23 | required maxlength="100" value="{{ old('coord_x') ?? $area->coord_x ?? '' }}"><br> | ||
24 | |||
25 | <label for="coord_Y">Коорд. Y: </label> | ||
26 | <input type="text" class="form-control_ txt" name="coord_Y" placeholder="Координаты Y" | ||
27 | required maxlength="100" value="{{ old('coord_y') ?? $area->coord_y ?? '' }}"><br> | ||
28 | |||
29 | |||
30 | <label for="foto_main">Файл-картинка:</label> | ||
31 | <input type="file" class="form-control-file txt" name="foto_main" id="foto_main" accept="image/png, image/jpeg"> | ||
32 | |||
33 | @isset($area->foto_main) | ||
34 | <div class="form-group form-check"> | ||
35 | <img src="<?=asset(Storage::url($area->foto_main))?>" width="100px"/> | ||
36 | <input type="checkbox" class="form-check-input" name="remove" id="remove"> | ||
37 | <label class="form-check-label" for="remove"> | ||
38 | Удалить загруженное изображение | ||
39 | </label> | ||
40 | </div> | ||
41 | @endisset | ||
42 | <br><br> | ||
43 | <button type="submit" class="btn hero-search__btn btn--main">Сохранить</button> | ||
44 | |||
45 | |||
46 |
resources/views/admin/area/index.blade.php
1 | @extends('layout.admin', ['title' => 'Объекты недвижимости']) | 1 | @extends('layout.admin', ['title' => 'Объекты недвижимости']) |
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('user.index') }}">Главная</a></li> | 9 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('user.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> | 13 | <h1 class="favorites__title title-main">Объекты недвижимости</h1> |
14 | </div> | 14 | </div> |
15 | </div> | 15 | </div> |
16 | <div class="favorites-cnt"> | 16 | <div class="favorites-cnt"> |
17 | <div class="container"> | 17 | <div class="container"> |
18 | <a href="{{ route('admin.area.create') }}" class="btn hero-search__btn btn--main"> | ||
19 | Создать объект | ||
20 | </a><br><br> | ||
18 | <table class="table" style="width: 100%"> | 21 | <table class="table" style="width: 100%"> |
19 | <thead> | 22 | <thead> |
20 | <tr> | 23 | <tr> |
21 | <th>First Name</th> | 24 | <th>Фото</th> |
22 | <th>Last Name</th> | 25 | <th>ID</th> |
23 | <th>ZIP</th> | 26 | <th>Название объекта</th> |
24 | <th>Birthday</th> | 27 | <th>Координаты X</th> |
25 | <th>Points</th> | 28 | <th>Координаты Y</th> |
26 | <th>Average</th> | 29 | <th>Дата создания</th> |
27 | <th>Amount</th> | 30 | <th>Действия</th> |
28 | </tr> | 31 | </tr> |
29 | </thead> | 32 | </thead> |
30 | <tbody> | 33 | <tbody> |
31 | <tr> | 34 | @if ($areas->count()) |
32 | <td>Gloria</td> | 35 | @foreach($areas as $area) |
33 | <td>Reeves</td> | 36 | <tr> |
34 | <td>67439</td> | 37 | <td><? if (empty($area->foto_main)) {?>Нет фото<?} else {?><img src="<?=asset(Storage::url($area->foto_main))?>" width="100px"/><?}?></td> |
35 | <td>10/18/1985</td> | 38 | <td>{{ $area->id }}</td> |
36 | <td>4</td> | 39 | <td>{{ $area->name_area }}</td> |
37 | <td>0.1</td> | 40 | <td>{{ $area->coord_x }}</td> |
38 | <td>$50</td> | 41 | <td>{{ $area->coord_y }}</td> |
39 | </tr> | 42 | <td>{{ $area->created_at }}</td> |
40 | ... | 43 | <td> <form action="{{ route('admin.area.destroy', $area) }}" method="POST"> |
44 | <a style="color:green" href="{{ route('admin.area.show', ['area' => $area->id]) }}"> | ||
45 | Просмотр | ||
46 | </a> | | ||
47 | <a href="{{ route('admin.area.edit', ['area' => $area->id]) }}"> | ||
48 | Редактировать | ||
49 | </a> | | ||
50 | @csrf | ||
51 | @method('DELETE') | ||
52 | <input class=" btn-danger" type="submit" value="Удалить"> | ||
53 | </form> | ||
54 | </td> | ||
55 | </tr> | ||
56 | @endforeach | ||
57 | @else | ||
58 | <tr> | ||
59 | <td>-</td> | ||
60 | <td>-</td> | ||
61 | <td>-</td> | ||
62 | <td>-</td> | ||
63 | <td>-</td> | ||
64 | <td>-</td> | ||
65 | <td>-</td> | ||
66 | </tr> | ||
67 | @endif | ||
68 | |||
41 | </tbody> | 69 | </tbody> |
42 | </table> | 70 | </table> |
43 | 71 | {{ $areas->onEachSide(1)->links('catalogs.paginate') }} | |
44 | <div class="favorites__items"> | 72 | <div class="favorites__items"> |
45 | 73 | ||
46 | 74 | ||
47 | 75 | ||
48 | <!--<div class="favorites-item"> | 76 | <!--<div class="favorites-item"> |
49 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> | 77 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> |
50 | <p class="favorites-item__descr"><a href="#">Найдите</a> идеальную планировку на сайте Renttorg</p> | 78 | <p class="favorites-item__descr"><a href="#">Найдите</a> идеальную планировку на сайте Renttorg</p> |
51 | </div> | 79 | </div> |
52 | <div class="favorites-item"> | 80 | <div class="favorites-item"> |
53 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> | 81 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> |
54 | <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> | 82 | <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> |
55 | </div> | 83 | </div> |
56 | <div class="favorites-item"> | 84 | <div class="favorites-item"> |
57 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> | 85 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> |
58 | <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> | 86 | <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> |
59 | </div>--> | 87 | </div>--> |
60 | </div> | 88 | </div> |
61 | </div> | 89 | </div> |
62 | </div> | 90 | </div> |
63 | </section> | 91 | </section> |
64 | @endsection | 92 | @endsection |
65 | 93 |
resources/views/admin/area/view.blade.php
File was created | 1 | @extends('layout.admin', ['title' => 'Просмотр объекта']) | |
2 | |||
3 | @section('content') | ||
4 | <section class="favorites"> | ||
5 | <div class="favorites-top"> | ||
6 | <div class="container"> | ||
7 | <div class="breadcrumbs"> | ||
8 | <ul class="breadcrumbs__list"> | ||
9 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('user.index') }}">Главная</a></li> | ||
10 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('admin.area.index') }}">Объекты недвижимости </a></li> | ||
11 | <li class="breadcrumbs__item"><span class="breadcrumbs__link">Просмотр объекта недвижимости </span></li> | ||
12 | </ul> | ||
13 | </div> | ||
14 | <h1 class="favorites__title title-main">Просмотр объекта недвижимости</h1> | ||
15 | </div> | ||
16 | </div> | ||
17 | <div class="favorites-cnt"> | ||
18 | <div class="container"> | ||
19 | <label for="name_area">Название объекта: <span class="req">*</span></label><br> | ||
20 | <input type="text" class="form-control_ txt" name="name_area" placeholder="Название объекта" | ||
21 | required maxlength="100" style="width: 80%" value="{{ old('name_area') ?? $area->name_area ?? '' }}"><br><br> | ||
22 | |||
23 | <label for="description">Описание объекта: <span class="req">*</span></label><br> | ||
24 | <textarea class="form-control_ txtarea ckeditor" name="description" placeholder="Описание" required | ||
25 | rows="10" style="width: 80%">{{ old('description') ?? $area->description ?? '' }}</textarea><br><br> | ||
26 | |||
27 | <label for="coord_X">Коорд. X: </label><br> | ||
28 | <input type="text" class="form-control_ txt" name="coord_X" placeholder="Координаты X" | ||
29 | required maxlength="100" value="{{ old('coord_x') ?? $area->coord_x ?? '' }}"><br><br> | ||
30 | |||
31 | <label for="coord_Y">Коорд. Y: </label><br> | ||
32 | <input type="text" class="form-control_ txt" name="coord_Y" placeholder="Координаты Y" | ||
33 | required maxlength="100" value="{{ old('coord_y') ?? $area->coord_y ?? '' }}"><br><br> | ||
34 | |||
35 | |||
36 | <label for="foto_main">Файл-картинка:</label><br> | ||
37 | @isset($area->foto_main) | ||
38 | <div class="form-group form-check"> | ||
39 | <img src="<?=asset(Storage::url($area->foto_main))?>" width="100px"/> | ||
40 | </div> | ||
41 | @endisset | ||
42 | <br> | ||
43 | <a href="{{ route('admin.area.index') }}" class="btn hero-search__btn btn--main">Вернуться к объектам</a> | ||
44 | </div> | ||
45 | </div> | ||
46 | </section> | ||
47 | @endsection | ||
48 | |||
49 |
resources/views/admin/index.blade.php
1 | @extends('layout.site', ['title' => 'Личный кабинет']) | 1 | @extends('layout.site', ['title' => 'Личный кабинет']) |
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> | 13 | <h1 class="favorites__title title-main">Личный кабинет</h1> |
14 | <p class="favorites__descr"> | 14 | <p class="favorites__descr"> |
15 | Добрый день {{ auth()->user()->name }}!<br> | 15 | Добрый день {{ auth()->user()->name }}!<br> |
16 | Это личный кабинет пользователя сайта.<br> | 16 | Это личный кабинет пользователя сайта.<br> |
17 | <a class="btn btn-success" href="{{ route('auth.logout') }}">Выйти из системы</a><br> | 17 | <a class="btn btn-success" href="{{ route('auth.logout') }}">Выйти из системы</a><br> |
18 | </p> | 18 | </p> |
19 | <h2>Меню</h2> | 19 | <h2>Меню</h2> |
20 | <ul class="breadcrumbs__list"> | 20 | <ul class="breadcrumbs__list"> |
21 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Сайт</a></li> | 21 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('index') }}">Сайт</a></li> |
22 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('user.index') }}">Главная (админкв) </a></li> | 22 | <li class="breadcrumbs__item"><a class="breadcrumbs__link" href="{{ route('admin.area.index') }}">Объекты </a></li> |
23 | </ul> | 23 | </ul> |
24 | </div> | 24 | </div> |
25 | </div> | 25 | </div> |
26 | <div class="favorites-cnt"> | 26 | <div class="favorites-cnt"> |
27 | <div class="container"> | 27 | <div class="container"> |
28 | <div class="favorites__items"> | 28 | <div class="favorites__items"> |
29 | <div class="favorites-item"> | 29 | <div class="favorites-item"> |
30 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> | 30 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-1.svg" alt=""></div> |
31 | <p class="favorites-item__descr"><a href="#">Найдите</a> идеальную планировку на сайте Renttorg</p> | 31 | <p class="favorites-item__descr"><a href="#">Найдите</a> идеальную планировку на сайте Renttorg</p> |
32 | </div> | 32 | </div> |
33 | <div class="favorites-item"> | 33 | <div class="favorites-item"> |
34 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> | 34 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-2.svg" alt=""></div> |
35 | <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> | 35 | <p class="favorites-item__descr">Нажмите на <img src="images/favorites-icon-mini.svg" alt=""> для добавления недвижемости в избранное</p> |
36 | </div> | 36 | </div> |
37 | <div class="favorites-item"> | 37 | <div class="favorites-item"> |
38 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> | 38 | <div class="favorites-item__img"><img src="images/favorites/favorites-item-img-3.svg" alt=""></div> |
39 | <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> | 39 | <p class="favorites-item__descr">Перейдите в избранное или сравнение для выбора планировки</p> |
40 | </div> | 40 | </div> |
41 | </div> | 41 | </div> |
42 | </div> | 42 | </div> |
43 | </div> | 43 | </div> |
44 | </section> | 44 | </section> |
45 | @endsection | 45 | @endsection |
46 | 46 | ||
47 | 47 |
resources/views/auth/vefiry-message.blade.php
File was created | 1 | @extends('layout.site', ['title' => 'Неудачный вход в личный кабинет']) | |
2 | |||
3 | @section('content') | ||
4 | <section class="favorites"> | ||
5 | <div class="favorites-top"> | ||
6 | <div class="container"> | ||
7 | |||
8 | <div class="footer-top"> | ||
9 | <div class="container"> | ||
10 | <div class="footer-feedback"> | ||
11 | <div class="footer-feedback__cnt"> | ||
12 | <h2 class="footer-feedback__title title">Вход в личный кабинет не удался!</h2> | ||
13 | <p class="footer-feedback__descr">Обратитесь к администратору за правами!</p> | ||
14 | </div> | ||
15 | |||
16 | </div> | ||
17 | </div> | ||
18 | </div> | ||
19 | |||
20 | </div> | ||
21 | </div> | ||
22 | </section> | ||
23 | @endsection | ||
24 |
resources/views/layout/admin.blade.php
1 | <!DOCTYPE html> | 1 | <!DOCTYPE html> |
2 | <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> | 2 | <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> |
3 | <head> | 3 | <head> |
4 | <meta charset="UTF-8"> | 4 | <meta charset="UTF-8"> |
5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
6 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 6 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
7 | <title>{{$title}}</title> | 7 | <title>{{$title}}</title> |
8 | <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin> | 8 | <link rel="preload" href="{{ asset('fonts/Manrope-ExtraLight.woff2') }}" as="font" type="font/woff2" crossorigin> |
9 | <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin> | 9 | <link rel="preload" href="{{ asset('fonts/Manrope-Light.woff2" as="font') }}" type="font/woff2" crossorigin> |
10 | <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin> | 10 | <link rel="preload" href="{{ asset('fonts/Manrope-Regular.woff2') }}" as="font" type="font/woff2" crossorigin> |
11 | <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin> | 11 | <link rel="preload" href="{{ asset('fonts/Manrope-Medium.woff2') }}" as="font" type="font/woff2" crossorigin> |
12 | <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin> | 12 | <link rel="preload" href="{{ asset('fonts/Manrope-SemiBold.woff2') }}" as="font" type="font/woff2" crossorigin> |
13 | <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin> | 13 | <link rel="preload" href="{{ asset('fonts/Manrope-Bold.woff2') }}" as="font" type="font/woff2" crossorigin> |
14 | <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin> | 14 | <link rel="preload" href="{{ asset('fonts/Manrope-ExtraBold.woff2') }}" as="font" type="font/woff2" crossorigin> |
15 | <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}"> | 15 | <link rel="stylesheet" href="{{ asset('css/swiper-bundle.min.css') }}"> |
16 | <link rel="stylesheet" href="{{ asset('css/style.css') }}"> | 16 | <link rel="stylesheet" href="{{ asset('css/style.css') }}"> |
17 | <link rel="stylesheet" href="{{ asset('css/style_table.css') }}"> | 17 | <link rel="stylesheet" href="{{ asset('css/style_table.css') }}"> |
18 | <style> | ||
19 | /* form styles */ | ||
20 | form .row { | ||
21 | display: block; | ||
22 | padding: 7px 8px; | ||
23 | margin-bottom: 7px; | ||
24 | } | ||
25 | form .row:hover { | ||
26 | background: #f1f7fa; | ||
27 | } | ||
28 | |||
29 | form label { | ||
30 | display: inline-block; | ||
31 | font-size: 1.2em; | ||
32 | font-weight: bold; | ||
33 | width: 120px; | ||
34 | padding: 6px 0; | ||
35 | color: #464646; | ||
36 | vertical-align: top; | ||
37 | } | ||
38 | form .req { color: #ca5354; } | ||
39 | |||
40 | form .note { | ||
41 | font-size: 1.2em; | ||
42 | line-height: 1.33em; | ||
43 | font-weight: normal; | ||
44 | padding: 2px 7px; | ||
45 | margin-bottom: 10px; | ||
46 | } | ||
47 | |||
48 | form input:focus, form textarea:focus { outline: none; } | ||
49 | |||
50 | /* placeholder styles: http://stackoverflow.com/a/2610741/477958 */ | ||
51 | ::-webkit-input-placeholder { color: #aaafbd; font-style: italic; } /* WebKit */ | ||
52 | :-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 4 to 18 */ | ||
53 | ::-moz-placeholder { color: #aaafbd; font-style: italic; } /* Mozilla Firefox 19+ */ | ||
54 | :-ms-input-placeholder { color: #aaafbd; font-style: italic; } /* Internet Explorer 10+ */ | ||
55 | |||
56 | form .txt { | ||
57 | display: inline-block; | ||
58 | padding: 8px 9px; | ||
59 | padding-right: 30px; | ||
60 | width: 240px; | ||
61 | font-family: 'Oxygen', sans-serif; | ||
62 | font-size: 1.35em; | ||
63 | font-weight: normal; | ||
64 | color: #898989; | ||
65 | } | ||
66 | |||
67 | form .txtarea { | ||
68 | display: inline-block; | ||
69 | padding: 8px 9px; | ||
70 | padding-right: 30px; | ||
71 | font-family: 'Oxygen', sans-serif; | ||
72 | font-size: 1.35em; | ||
73 | font-weight: normal; | ||
74 | color: #898989; | ||
75 | } | ||
76 | </style> | ||
18 | </head> | 77 | </head> |
19 | <body> | 78 | <body> |
20 | <div class="spinner"></div> | 79 | <div class="spinner"></div> |
21 | <div class="wrapper"> | 80 | <div class="wrapper"> |
22 | <header class="header js_header"> | 81 | <header class="header js_header"> |
23 | <div class="container"> | 82 | <div class="container"> |
24 | <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a> | 83 | <div class="header__wrap"><a class="header__logo" href="{{ route('index') }}"><img src="{{ asset('images/logo.svg') }}" alt="Лого"></a> |
25 | <nav class="header__nav nav"> | 84 | <nav class="header__nav nav"> |
26 | <ul class="nav__list"> | 85 | <ul class="nav__list"> |
27 | <li class="nav__item"><a class="nav__link" href="{{ route('catalog') }}">Каталог</a></li> | 86 | <li class="nav__item"><a class="nav__link" href="{{ route('admin.area.index') }}">Объекты</a></li> |
28 | <li class="nav__item"><a class="nav__link" href="{{ route('about') }}">О компании</a></li> | 87 | <li class="nav__item"><a class="nav__link" href="{{ route('about') }}">О компании</a></li> |
29 | <li class="nav__item"><a class="nav__link" href="{{ route('contact') }}">Контакты</a></li> | 88 | <li class="nav__item"><a class="nav__link" href="{{ route('contact') }}">Контакты</a></li> |
30 | <li class="nav__item"><a class="nav__link nav__link-favorites" href="{{ route('favorite') }}">Избранное<span><?=\App\Classes\RusDate::count_item_fav();?></span></a></li> | 89 | <li class="nav__item"><a class="nav__link nav__link-favorites" href="{{ route('favorite') }}">Избранное<span><?=\App\Classes\RusDate::count_item_fav();?></span></a></li> |
31 | </ul> | 90 | </ul> |
32 | </nav> | 91 | </nav> |
33 | <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback"> | 92 | <div class="header__buttons"><a class="header__btn-phone" href="#" data-btn="feedback"> |
34 | <svg width="22" height="22"> | 93 | <svg width="22" height="22"> |
35 | <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use> | 94 | <use xlink:href="{{ asset('images/sprite.svg#header-btn-phone') }}"></use> |
36 | </svg></a> | 95 | </svg></a> |
37 | <button class="header__burger js_header_burger" type="button">Меню | 96 | <button class="header__burger js_header_burger" type="button">Меню |
38 | <svg width="28" height="18"> | 97 | <svg width="28" height="18"> |
39 | <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> | 98 | <use xlink:href="{{ asset('images/sprite.svg#burger') }}"></use> |
40 | </svg> | 99 | </svg> |
41 | </button> | 100 | </button> |
42 | </div> | 101 | </div> |
43 | <div class="menu js_menu"> | 102 | <div class="menu js_menu"> |
44 | <div class="menu__wrap"> | 103 | <div class="menu__wrap"> |
45 | <button class="menu__close js_menu_close" type="button">Меню | 104 | <button class="menu__close js_menu_close" type="button">Меню |
46 | <svg width="20" height="20"> | 105 | <svg width="20" height="20"> |
47 | <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> | 106 | <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> |
48 | </svg> | 107 | </svg> |
49 | </button> | 108 | </button> |
50 | <div class="menu__inner"> | 109 | <div class="menu__inner"> |
51 | <nav class="menu__nav"> | 110 | <nav class="menu__nav"> |
52 | <ul class="menu__list"> | 111 | <ul class="menu__list"> |
53 | <li class="menu__item"><a class="menu__link" href="{{ route('about') }}">О компании</a></li> | 112 | <li class="menu__item"><a class="menu__link" href="{{ route('about') }}">О компании</a></li> |
54 | <li class="menu__item"><a class="menu__link menu__link-favorites" href="{{ route('favorite') }}">Избранное<span>5</span></a></li> | 113 | <li class="menu__item"><a class="menu__link menu__link-favorites" href="{{ route('favorite') }}">Избранное<span>5</span></a></li> |
55 | <li class="menu__item"><a class="menu__link" href="{{ route('catalog') }}">Каталог</a></li> | 114 | <li class="menu__item"><a class="menu__link" href="{{ route('catalog') }}">Каталог</a></li> |
56 | <li class="menu__item"><a class="menu__link" href="{{ route('news') }}">Новости</a></li> | 115 | <li class="menu__item"><a class="menu__link" href="{{ route('news') }}">Новости</a></li> |
57 | <li class="menu__item"><a class="menu__link" href="{{ route('contact') }}">Контакты</a></li> | 116 | <li class="menu__item"><a class="menu__link" href="{{ route('contact') }}">Контакты</a></li> |
58 | </ul> | 117 | </ul> |
59 | </nav> | 118 | </nav> |
60 | <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> | 119 | <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> |
61 | <div class="menu__social social"> | 120 | <div class="menu__social social"> |
62 | <ul class="social__list"> | 121 | <ul class="social__list"> |
63 | <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li> | 122 | <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg') }}" alt=""></a></li> |
64 | <li class="social__item"><a class="social__link" href="#" target="_blank"> | 123 | <li class="social__item"><a class="social__link" href="#" target="_blank"> |
65 | <svg width="40" height="40"> | 124 | <svg width="40" height="40"> |
66 | <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use> | 125 | <use xlink:href="{{ asset('images/sprite.svg#wa')}}"></use> |
67 | </svg></a></li> | 126 | </svg></a></li> |
68 | </ul> | 127 | </ul> |
69 | </div> | 128 | </div> |
70 | </div> | 129 | </div> |
71 | </div> | 130 | </div> |
72 | </div> | 131 | </div> |
73 | </div> | 132 | </div> |
74 | </div> | 133 | </div> |
75 | </header> | 134 | </header> |
76 | <main> | 135 | <main> |
77 | @if ($message = Session::get('success')) | 136 | @if ($message = Session::get('success')) |
78 | <section> | 137 | <section> |
79 | <div class="alert alert-success alert-dismissible mt-0" role="alert"> | 138 | <div class="alert alert-success alert-dismissible mt-0" role="alert"> |
80 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> | 139 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> |
81 | <span aria-hidden="true">×</span> | 140 | <span aria-hidden="true">×</span> |
82 | </button> | 141 | </button> |
83 | {{ $message }} | 142 | {{ $message }} |
84 | </div> | 143 | </div> |
85 | </section> | 144 | </section> |
86 | @endif | 145 | @endif |
87 | 146 | ||
88 | @if ($errors->any()) | 147 | @if ($errors->any()) |
89 | <section> | 148 | <section> |
90 | <div class="alert alert-danger alert-dismissible mt-4" role="alert"> | 149 | <div class="alert alert-danger alert-dismissible mt-4" role="alert"> |
91 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> | 150 | <button type="button" class="close" data-dismiss="alert" aria-label="Закрыть"> |
92 | <span aria-hidden="true">×</span> | 151 | <span aria-hidden="true">×</span> |
93 | </button> | 152 | </button> |
94 | <ul class="mb-0"> | 153 | <ul class="mb-0"> |
95 | @foreach ($errors->all() as $error) | 154 | @foreach ($errors->all() as $error) |
96 | <li>{{ $error }}</li> | 155 | <li>{{ $error }}</li> |
97 | @endforeach | 156 | @endforeach |
98 | </ul> | 157 | </ul> |
99 | </div> | 158 | </div> |
100 | </section> | 159 | </section> |
101 | @endif | 160 | @endif |
102 | <!-- Основной контент --> | 161 | <!-- Основной контент --> |
103 | @yield('content') | 162 | @yield('content') |
104 | 163 | ||
105 | </main> | 164 | </main> |
106 | 165 | ||
107 | <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})"> | 166 | <footer class="footer" style="background-image:url({{ asset('images/footer-bg.jpg')}})"> |
108 | <div class="footer__buttons"> | 167 | <div class="footer__buttons"> |
109 | <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button"> | 168 | <button class="footer__btn footer__btn-phone js_btn_contact_us" type="button"> |
110 | <svg width="30" height="32"> | 169 | <svg width="30" height="32"> |
111 | <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use> | 170 | <use xlink:href="{{ asset('images/sprite.svg#footer-btn-phone')}}"></use> |
112 | </svg> | 171 | </svg> |
113 | </button> | 172 | </button> |
114 | <button class="footer__btn footer__btn-up js_btn_up" type="button"> | 173 | <button class="footer__btn footer__btn-up js_btn_up" type="button"> |
115 | <svg width="19" height="11"> | 174 | <svg width="19" height="11"> |
116 | <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use> | 175 | <use xlink:href="{{ asset('images/sprite.svg#footer-btn-up')}}"></use> |
117 | </svg> | 176 | </svg> |
118 | </button> | 177 | </button> |
119 | </div> | 178 | </div> |
120 | 179 | ||
121 | <!-- Сам футер мееню --> | 180 | <!-- Сам футер мееню --> |
122 | <div class="footer-middle"> | 181 | <div class="footer-middle"> |
123 | <div class="container"> | 182 | <div class="container"> |
124 | <div class="footer-middle__wrap"> | 183 | <div class="footer-middle__wrap"> |
125 | <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a> | 184 | <div class="footer__col footer__col-intro"><a class="footer__logo" href="index.html"><img src="{{ asset('images/logo-footer.svg')}}" alt="Лого"></a> |
126 | <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p> | 185 | <p class="footer__descr">В группу “Renttorg” входит ряд ведущих российских девелоперских компаний полного цикла, реализующих масштабные объекты недвижимости.</p> |
127 | <div class="footer-questions"> | 186 | <div class="footer-questions"> |
128 | <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a> | 187 | <h3 class="footer-questions__title">Есть вопросы или предложения?</h3><a class="footer-questions__btn btn btn--main" href="#" data-btn="feedback">Напишите нам</a> |
129 | </div> | 188 | </div> |
130 | </div> | 189 | </div> |
131 | <div class="footer__col footer__col-menu js_footer_col"> | 190 | <div class="footer__col footer__col-menu js_footer_col"> |
132 | <h3 class="footer__caption js_footer_caption">Меню</h3> | 191 | <h3 class="footer__caption js_footer_caption">Меню</h3> |
133 | <div class="footer__block js_footer_block"> | 192 | <div class="footer__block js_footer_block"> |
134 | <ul class="footer__list"> | 193 | <ul class="footer__list"> |
135 | <li class="footer__item"><a class="footer__link" href="{{ route('index') }}">Главная</a></li> | 194 | <li class="footer__item"><a class="footer__link" href="{{ route('index') }}">Главная</a></li> |
136 | <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li> | 195 | <li class="footer__item"><a class="footer__link" href="{{ route('catalog') }}">Каталог</a></li> |
137 | <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li> | 196 | <li class="footer__item"><a class="footer__link" href="{{ route('about') }}">О компании</a></li> |
138 | <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li> | 197 | <li class="footer__item"><a class="footer__link" href="{{ route('contact') }}">Контакты</a></li> |
139 | <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li> | 198 | <li class="footer__item"><a class="footer__link" href="{{ route('favorite') }}">Избранное</a></li> |
140 | <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li> | 199 | <li class="footer__item"><a class="footer__link" href="{{ route('news') }}">Новости</a></li> |
141 | </ul> | 200 | </ul> |
142 | 201 | ||
143 | </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a> | 202 | </div><a class="footer__author" href="#" target="_blank"><img src="{{ asset('images/author.png')}}" alt="Лого разработчика"></a> |
144 | </div> | 203 | </div> |
145 | <div class="footer__col js_footer_col"> | 204 | <div class="footer__col js_footer_col"> |
146 | <h3 class="footer__caption js_footer_caption">Админка</h3> | 205 | <h3 class="footer__caption js_footer_caption">Админка</h3> |
147 | <div class="footer__block js_footer_block"> | 206 | <div class="footer__block js_footer_block"> |
148 | <ul class="footer__list"> | 207 | <ul class="footer__list"> |
149 | <li class="footer__item"><a class="footer__link" href="{{ route('user.index') }}">Главная</a></li> | 208 | <li class="footer__item"><a class="footer__link" href="{{ route('user.index') }}">Главная</a></li> |
150 | 209 | ||
151 | </ul> | 210 | </ul> |
152 | </div> | 211 | </div> |
153 | </div> | 212 | </div> |
154 | <div class="footer__col js_footer_col"> | 213 | <div class="footer__col js_footer_col"> |
155 | <h3 class="footer__caption js_footer_caption">Система</h3> | 214 | <h3 class="footer__caption js_footer_caption">Система</h3> |
156 | <div class="footer__block js_footer_block"> | 215 | <div class="footer__block js_footer_block"> |
157 | <ul class="footer__list"> | 216 | <ul class="footer__list"> |
158 | <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Авторизация</a></li> | 217 | <li class="footer__item"><a class="footer__link" href="{{ route('auth.login') }}">Авторизация</a></li> |
159 | <li class="footer__item"><a class="footer__link" href="{{ route('auth.register') }}">Регистрация</a></li> | 218 | <li class="footer__item"><a class="footer__link" href="{{ route('auth.register') }}">Регистрация</a></li> |
160 | </ul> | 219 | </ul> |
161 | </div> | 220 | </div> |
162 | </div> | 221 | </div> |
163 | <div class="footer__col footer__col-contacts"> | 222 | <div class="footer__col footer__col-contacts"> |
164 | <h3 class="footer__caption js_footer_caption">Контакты</h3> | 223 | <h3 class="footer__caption js_footer_caption">Контакты</h3> |
165 | <ul class="footer__list"> | 224 | <ul class="footer__list"> |
166 | <li class="footer__item"><a class="footer__link" href="">EmailAdmin</a></li> | 225 | <li class="footer__item"><a class="footer__link" href="">EmailAdmin</a></li> |
167 | <li class="footer__item"><a class="footer__link" href="">ТелефонАдмин</a></li> | 226 | <li class="footer__item"><a class="footer__link" href="">ТелефонАдмин</a></li> |
168 | </ul> | 227 | </ul> |
169 | <div class="footer__social social"> | 228 | <div class="footer__social social"> |
170 | <ul class="social__list"> | 229 | <ul class="social__list"> |
171 | <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li> | 230 | <li class="social__item"><a class="social__link" href="#" target="_blank"><img src="{{ asset('images/tg.svg')}}" alt=""></a></li> |
172 | <li class="social__item"><a class="social__link" href="#" target="_blank"> | 231 | <li class="social__item"><a class="social__link" href="#" target="_blank"> |
173 | <svg width="40" height="40"> | 232 | <svg width="40" height="40"> |
174 | <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use> | 233 | <use xlink:href="{{ asset('images/sprite.svg#wa') }}"></use> |
175 | </svg></a></li> | 234 | </svg></a></li> |
176 | </ul> | 235 | </ul> |
177 | </div> | 236 | </div> |
178 | </div> | 237 | </div> |
179 | </div> | 238 | </div> |
180 | </div> | 239 | </div> |
181 | </div> | 240 | </div> |
182 | 241 | ||
183 | <div class="footer-bottom"> | 242 | <div class="footer-bottom"> |
184 | <div class="container"> | 243 | <div class="container"> |
185 | <div class="footer-bottom__wrap"> | 244 | <div class="footer-bottom__wrap"> |
186 | <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a> | 245 | <div class="footer__copy">© 2023 RentTorg</div><a class="footer__plicy" href="{{ route('conf') }}">Политика конфиденциальности</a> |
187 | </div> | 246 | </div> |
188 | </div> | 247 | </div> |
189 | </div> | 248 | </div> |
190 | </footer> | 249 | </footer> |
191 | </div> | 250 | </div> |
192 | 251 | ||
193 | <!-- Вплывающие окна --> | 252 | <!-- Вплывающие окна --> |
194 | <div class="popup popup-feedback" data-popup="feedback"> | 253 | <div class="popup popup-feedback" data-popup="feedback"> |
195 | <div class="popup__wrap"> | 254 | <div class="popup__wrap"> |
196 | <button class="popup__close js_popup_close" type="button"> | 255 | <button class="popup__close js_popup_close" type="button"> |
197 | <svg width="20" height="20"> | 256 | <svg width="20" height="20"> |
198 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 257 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
199 | </svg> | 258 | </svg> |
200 | </button> | 259 | </button> |
201 | <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST"> | 260 | <form class="popup-feedback__form js_popup_feedback_form" action="{{ route('header_form') }}" method="POST"> |
202 | @csrf | 261 | @csrf |
203 | <div class="popup-feedback__title">Как с вами связаться</div> | 262 | <div class="popup-feedback__title">Как с вами связаться</div> |
204 | <div class="popup-feedback__fields"> | 263 | <div class="popup-feedback__fields"> |
205 | <label class="popup-feedback__field field"> | 264 | <label class="popup-feedback__field field"> |
206 | <input type="text" placeholder="Имя" name="NameUser"> | 265 | <input type="text" placeholder="Имя" name="NameUser"> |
207 | </label> | 266 | </label> |
208 | <label class="popup-feedback__field field"> | 267 | <label class="popup-feedback__field field"> |
209 | <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> | 268 | <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> |
210 | </label> | 269 | </label> |
211 | </div> | 270 | </div> |
212 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> | 271 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> |
213 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> | 272 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> |
214 | </form> | 273 | </form> |
215 | </div> | 274 | </div> |
216 | </div> | 275 | </div> |
217 | <div class="popup popup-feedback" data-popup="viewing"> | 276 | <div class="popup popup-feedback" data-popup="viewing"> |
218 | <div class="popup__wrap"> | 277 | <div class="popup__wrap"> |
219 | <button class="popup__close js_popup_close" type="button"> | 278 | <button class="popup__close js_popup_close" type="button"> |
220 | <svg width="20" height="20"> | 279 | <svg width="20" height="20"> |
221 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 280 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
222 | </svg> | 281 | </svg> |
223 | </button> | 282 | </button> |
224 | <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST"> | 283 | <form class="popup-feedback__form js_popup_viewing_form" action="{{ route('rec_view_form') }}" method="POST"> |
225 | @csrf | 284 | @csrf |
226 | <div class="popup-feedback__title">Записаться на просмотр</div> | 285 | <div class="popup-feedback__title">Записаться на просмотр</div> |
227 | <div class="popup-feedback__fields"> | 286 | <div class="popup-feedback__fields"> |
228 | <label class="popup-feedback__field field"> | 287 | <label class="popup-feedback__field field"> |
229 | <input type="text" placeholder="Имя" name="NameUser"> | 288 | <input type="text" placeholder="Имя" name="NameUser"> |
230 | </label> | 289 | </label> |
231 | <label class="popup-feedback__field field"> | 290 | <label class="popup-feedback__field field"> |
232 | <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> | 291 | <input class="js_input_phone" type="text" placeholder="Телефон" name="TelephoneUser"> |
233 | </label> | 292 | </label> |
234 | </div> | 293 | </div> |
235 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> | 294 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> |
236 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> | 295 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="#">Политикой конфиденциальности</a>.</p> |
237 | </form> | 296 | </form> |
238 | </div> | 297 | </div> |
239 | </div> | 298 | </div> |
240 | <div class="popup popup-success" data-popup="success"> | 299 | <div class="popup popup-success" data-popup="success"> |
241 | <div class="popup__wrap"> | 300 | <div class="popup__wrap"> |
242 | <button class="popup__close js_popup_close" type="button"> | 301 | <button class="popup__close js_popup_close" type="button"> |
243 | <svg width="20" height="20"> | 302 | <svg width="20" height="20"> |
244 | <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> | 303 | <use xlink:href="{{ asset('images/sprite.svg#popup-close') }}"></use> |
245 | </svg> | 304 | </svg> |
246 | </button> | 305 | </button> |
247 | <div class="popup-success__inner"> | 306 | <div class="popup-success__inner"> |
248 | <div class="popup-success__logo"> | 307 | <div class="popup-success__logo"> |
249 | <svg width="48" height="39"> | 308 | <svg width="48" height="39"> |
250 | <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use> | 309 | <use xlink:href="{{ asset('images/sprite.svg#popup-success-logo')}}"></use> |
251 | </svg> | 310 | </svg> |
252 | </div> | 311 | </div> |
253 | <div class="popup-success__title">Спасибо за заявку</div> | 312 | <div class="popup-success__title">Спасибо за заявку</div> |
254 | <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p> | 313 | <p class="popup-success__descr">В ближайшее время с вами свяжется наш специалист для уточнения деталей вашей задачи.</p> |
255 | </div> | 314 | </div> |
256 | </div> | 315 | </div> |
257 | </div> | 316 | </div> |
258 | <div class="popup popup-feedback" data-popup="sending"> | 317 | <div class="popup popup-feedback" data-popup="sending"> |
259 | <div class="popup__wrap"> | 318 | <div class="popup__wrap"> |
260 | <button class="popup__close js_popup_close" type="button"> | 319 | <button class="popup__close js_popup_close" type="button"> |
261 | <svg width="20" height="20"> | 320 | <svg width="20" height="20"> |
262 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 321 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
263 | </svg> | 322 | </svg> |
264 | </button> | 323 | </button> |
265 | <form class="popup-feedback__form js_popup_sending_form" action="{{ route('email_form') }}" method="POST"> | 324 | <form class="popup-feedback__form js_popup_sending_form" action="{{ route('email_form') }}" method="POST"> |
266 | @csrf | 325 | @csrf |
267 | <div class="popup-feedback__title">Отправить на почту</div> | 326 | <div class="popup-feedback__title">Отправить на почту</div> |
268 | <div class="popup-feedback__fields"> | 327 | <div class="popup-feedback__fields"> |
269 | <label class="popup-feedback__field field"> | 328 | <label class="popup-feedback__field field"> |
270 | <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser"> | 329 | <input class="js_input_email" type="text" placeholder="Электронная почта" name="EmailUser"> |
271 | </label> | 330 | </label> |
272 | </div> | 331 | </div> |
273 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> | 332 | <button class="popup-feedback__btn btn btn--main js_form_btn">Отправить</button> |
274 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> | 333 | <p class="popup-feedback__confirm">Нажимая на кнопку «Отправить», Вы даете согласие на обработку персональных данных в соответствии с <a href="{{ route('conf') }}">Политикой конфиденциальности</a>.</p> |
275 | </form> | 334 | </form> |
276 | </div> | 335 | </div> |
277 | </div> | 336 | </div> |
278 | <div class="contact-us js_contact_us"> | 337 | <div class="contact-us js_contact_us"> |
279 | <div class="contact-us__top"> | 338 | <div class="contact-us__top"> |
280 | <button class="contact-us__close js_contact_us_close" type="button"> | 339 | <button class="contact-us__close js_contact_us_close" type="button"> |
281 | <svg width="20" height="20"> | 340 | <svg width="20" height="20"> |
282 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 341 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
283 | </svg> | 342 | </svg> |
284 | </button> | 343 | </button> |
285 | <div class="contact-us__title">Свяжитесь с нами</div> | 344 | <div class="contact-us__title">Свяжитесь с нами</div> |
286 | </div> | 345 | </div> |
287 | <div class="contact-us__body"> | 346 | <div class="contact-us__body"> |
288 | <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback"> | 347 | <div class="contact-us__items"><a class="contact-us-item js_contact_us_close" data-btn="feedback"> |
289 | <div class="contact-us-item__icon"> | 348 | <div class="contact-us-item__icon"> |
290 | <svg width="34" height="34"> | 349 | <svg width="34" height="34"> |
291 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use> | 350 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-phone')}}"></use> |
292 | </svg> | 351 | </svg> |
293 | </div> | 352 | </div> |
294 | <div class="contact-us-item__name">Позвонить</div></a> | 353 | <div class="contact-us-item__name">Позвонить</div></a> |
295 | 354 | ||
296 | <a class="contact-us-item js_contact_us_close" data-btn="sending"> | 355 | <a class="contact-us-item js_contact_us_close" data-btn="sending"> |
297 | <div class="contact-us-item__icon"> | 356 | <div class="contact-us-item__icon"> |
298 | <svg width="44" height="44"> | 357 | <svg width="44" height="44"> |
299 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use> | 358 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-email')}}"></use> |
300 | </svg> | 359 | </svg> |
301 | </div> | 360 | </div> |
302 | <div class="contact-us-item__name">Написать</div></a> | 361 | <div class="contact-us-item__name">Написать</div></a> |
303 | 362 | ||
304 | <a class="contact-us-item js_contact_us_close" > | 363 | <a class="contact-us-item js_contact_us_close" > |
305 | <div class="contact-us-item__icon"> | 364 | <div class="contact-us-item__icon"> |
306 | <svg width="34" height="34"> | 365 | <svg width="34" height="34"> |
307 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use> | 366 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-chat')}}"></use> |
308 | </svg> | 367 | </svg> |
309 | </div> | 368 | </div> |
310 | <div class="contact-us-item__name">Онлайн-чат</div></a></div> | 369 | <div class="contact-us-item__name">Онлайн-чат</div></a></div> |
311 | <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> | 370 | <div class="contact-us__socials"><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> |
312 | <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div> | 371 | <div class="contact-us-social__icon contact-us-social__icon-tg"><img src="{{ asset('images/contact-us-tg.svg')}}" alt=""></div> |
313 | <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> | 372 | <div class="contact-us-social__name">Telegram</div></a><a class="contact-us-social js_contact_us_close" href="#" target="_blank"> |
314 | <div class="contact-us-social__icon contact-us-social__icon-wa"> | 373 | <div class="contact-us-social__icon contact-us-social__icon-wa"> |
315 | <svg width="31" height="31"> | 374 | <svg width="31" height="31"> |
316 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use> | 375 | <use xlink:href="{{ asset('images/sprite.svg#contact-us-wa')}}"></use> |
317 | </svg> | 376 | </svg> |
318 | </div> | 377 | </div> |
319 | <div class="contact-us-social__name">WhatsApp</div></a></div> | 378 | <div class="contact-us-social__name">WhatsApp</div></a></div> |
320 | </div> | 379 | </div> |
321 | </div> | 380 | </div> |
322 | <div class="offer-side-popup" data-popup="offer-side-popup"> | 381 | <div class="offer-side-popup" data-popup="offer-side-popup"> |
323 | <div class="offer-side-popup__wrap"> | 382 | <div class="offer-side-popup__wrap"> |
324 | <button class="offer-side-popup__close js_popup_close" type="button"> | 383 | <button class="offer-side-popup__close js_popup_close" type="button"> |
325 | <svg width="20" height="20"> | 384 | <svg width="20" height="20"> |
326 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 385 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
327 | </svg> | 386 | </svg> |
328 | </button> | 387 | </button> |
329 | <div class="offer-side-popup__cnt"> | 388 | <div class="offer-side-popup__cnt"> |
330 | <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> | 389 | <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> |
331 | <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> | 390 | <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> |
332 | </div> | 391 | </div> |
333 | <div class="offer-side-popup__tabs"> | 392 | <div class="offer-side-popup__tabs"> |
334 | <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button> | 393 | <button class="offer-side-popup__tab js_offer_side_popup_tab active" type="button" data-tab="1">План объекта</button> |
335 | <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button> | 394 | <button class="offer-side-popup__tab js_offer_side_popup_tab" type="button" data-tab="2">План этажа</button> |
336 | </div> | 395 | </div> |
337 | <button class="offer-side-popup__sizeoff js_popup_close" type="button"> | 396 | <button class="offer-side-popup__sizeoff js_popup_close" type="button"> |
338 | <svg width="18" height="18"> | 397 | <svg width="18" height="18"> |
339 | <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use> | 398 | <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff')}}"></use> |
340 | </svg> | 399 | </svg> |
341 | </button> | 400 | </button> |
342 | </div> | 401 | </div> |
343 | </div> | 402 | </div> |
344 | <div class="img-viewer js_img_viewer"> | 403 | <div class="img-viewer js_img_viewer"> |
345 | <div class="img-viewer__wrap"> | 404 | <div class="img-viewer__wrap"> |
346 | <button class="img-viewer__close js_img_viewer_close" type="button"> | 405 | <button class="img-viewer__close js_img_viewer_close" type="button"> |
347 | <svg width="20" height="20"> | 406 | <svg width="20" height="20"> |
348 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> | 407 | <use xlink:href="{{ asset('images/sprite.svg#popup-close')}}"></use> |
349 | </svg> | 408 | </svg> |
350 | </button> | 409 | </button> |
351 | <div class="img-viewer__thumbs js_img_viewer_thumbs"> | 410 | <div class="img-viewer__thumbs js_img_viewer_thumbs"> |
352 | <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper"> | 411 | <div class="img-viewer__thumbs-swiper js_img_viewer_thumbs_swiper swiper"> |
353 | <div class="swiper-wrapper"></div> | 412 | <div class="swiper-wrapper"></div> |
354 | </div> | 413 | </div> |
355 | </div> | 414 | </div> |
356 | <div class="img-viewer__slider"> | 415 | <div class="img-viewer__slider"> |
357 | <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper"> | 416 | <div class="img-viewer__slider-swiper js_img_viewer_slider_swiper swiper"> |
358 | <div class="swiper-wrapper"></div> | 417 | <div class="swiper-wrapper"></div> |
359 | </div> | 418 | </div> |
360 | <div class="swiper-button-prev"> | 419 | <div class="swiper-button-prev"> |
361 | <svg width="10" height="17"> | 420 | <svg width="10" height="17"> |
362 | <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> | 421 | <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> |
363 | </svg> | 422 | </svg> |
364 | </div> | 423 | </div> |
365 | <div class="swiper-button-next"> | 424 | <div class="swiper-button-next"> |
366 | <svg width="10" height="17"> | 425 | <svg width="10" height="17"> |
367 | <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> | 426 | <use xlink:href="{{ asset('images/sprite.svg#slider-arrow')}}"></use> |
368 | </svg> | 427 | </svg> |
369 | </div> | 428 | </div> |
370 | </div> | 429 | </div> |
371 | <div class="img-viewer__caption js_img_viewer_caption"></div> | 430 | <div class="img-viewer__caption js_img_viewer_caption"></div> |
372 | <button class="img-viewer__sizeoff js_img_viewer_close" type="button"> | 431 | <button class="img-viewer__sizeoff js_img_viewer_close" type="button"> |
373 | <svg width="18" height="18"> | 432 | <svg width="18" height="18"> |
374 | <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use> | 433 | <use xlink:href="{{ asset('images/sprite.svg#popup-sizeoff') }}"></use> |
375 | </svg> | 434 | </svg> |
376 | </button> | 435 | </button> |
377 | </div> | 436 | </div> |
378 | </div> | 437 | </div> |
379 | <div class="cookies js_cookies"> | 438 | <div class="cookies js_cookies"> |
380 | <div class="container"> | 439 | <div class="container"> |
381 | <div class="cookies__wrap"> | 440 | <div class="cookies__wrap"> |
382 | <div class="cookies__top"> | 441 | <div class="cookies__top"> |
383 | <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div> | 442 | <div class="cookies__img"><img src="{{ asset('images/cookies.svg') }}" alt="cookies"></div> |
384 | <div class="cookies__title">Cookies</div> | 443 | <div class="cookies__title">Cookies</div> |
385 | </div> | 444 | </div> |
386 | <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p> | 445 | <p class="cookies__descr">Мы используем cookie-файлы для наилучшего представления нашего сайта.<br>Продолжая использовать сайт, вы даете согласие с использованием cookie-файлов.</p> |
387 | <div class="cookies__buttons"> | 446 | <div class="cookies__buttons"> |
388 | <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a> | 447 | <button class="cookies__btn btn btn--main js_cookies_confirm" type="button">Принять</button><a class="cookies__link" href="{{ route('cookies') }}">Подробнее</a> |
389 | </div> | 448 | </div> |
390 | </div> | 449 | </div> |
391 | </div> | 450 | </div> |
392 | </div> | 451 | </div> |
393 | <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script> | 452 | <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script> |
394 | <script src="{{ asset('js/swiper-bundle.min.js') }}"></script> | 453 | <script src="{{ asset('js/swiper-bundle.min.js') }}"></script> |
395 | <script src="{{ asset('js/main.js') }}"></script> | 454 | <script src="{{ asset('js/main.js') }}"></script> |
396 | <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script> | 455 | <script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script> |
397 | <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script> | 456 | <script type="text/javascript" src="{{ asset('js/jquery.cookie.js') }}"></script> |
398 | @yield('custom_js') | 457 | @yield('custom_js') |
399 | @include('js.cookies_favorite') | 458 | @include('js.cookies_favorite') |
400 | </body> | 459 | </body> |
401 | </html> | 460 | </html> |
402 | 461 |
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 | use App\Http\Controllers\Admin\AreaController; | 9 | use App\Http\Controllers\Admin\AreaController; |
10 | 10 | ||
11 | /* | 11 | /* |
12 | |-------------------------------------------------------------------------- | 12 | |-------------------------------------------------------------------------- |
13 | | Web Routes | 13 | | Web Routes |
14 | |-------------------------------------------------------------------------- | 14 | |-------------------------------------------------------------------------- |
15 | | | 15 | | |
16 | | Here is where you can register web routes for your application. These | 16 | | Here is where you can register web routes for your application. These |
17 | | routes are loaded by the RouteServiceProvider within a group which | 17 | | routes are loaded by the RouteServiceProvider within a group which |
18 | | contains the "web" middleware group. Now create something great! | 18 | | contains the "web" middleware group. Now create something great! |
19 | | | 19 | | |
20 | */ | 20 | */ |
21 | 21 | ||
22 | //Главная страница | 22 | //Главная страница |
23 | Route::get('/',[MainController::class, 'index'])->name('index'); | 23 | Route::get('/',[MainController::class, 'index'])->name('index'); |
24 | 24 | ||
25 | //Страница Избранные | 25 | //Страница Избранные |
26 | Route::get('favorite',[MainController::class, 'favorite'])->name('favorite'); | 26 | Route::get('favorite',[MainController::class, 'favorite'])->name('favorite'); |
27 | 27 | ||
28 | //Страница контакты | 28 | //Страница контакты |
29 | Route::get('contact',[MainController::class, 'contact'])->name('contact'); | 29 | Route::get('contact',[MainController::class, 'contact'])->name('contact'); |
30 | 30 | ||
31 | //Страница каталог | 31 | //Страница каталог |
32 | Route::get('catalog',[MainController::class, 'catalog'])->name('catalog'); | 32 | Route::get('catalog',[MainController::class, 'catalog'])->name('catalog'); |
33 | 33 | ||
34 | //Страница новости | 34 | //Страница новости |
35 | Route::get('news',[MainController::class, 'news'])->name('news'); | 35 | Route::get('news',[MainController::class, 'news'])->name('news'); |
36 | 36 | ||
37 | //Страница о компании | 37 | //Страница о компании |
38 | Route::get('about',[MainController::class, 'about'])->name('about'); | 38 | Route::get('about',[MainController::class, 'about'])->name('about'); |
39 | 39 | ||
40 | //Страница объекты на карте | 40 | //Страница объекты на карте |
41 | Route::get('maps',[MainController::class, 'mapsobj'])->name('maps'); | 41 | Route::get('maps',[MainController::class, 'mapsobj'])->name('maps'); |
42 | 42 | ||
43 | // Политика конфедициальности | 43 | // Политика конфедициальности |
44 | Route::get('conf', function () { | 44 | Route::get('conf', function () { |
45 | return view('conf'); | 45 | return view('conf'); |
46 | })->name('conf'); | 46 | })->name('conf'); |
47 | 47 | ||
48 | //Детальная страница предложения недвижимости | 48 | //Детальная страница предложения недвижимости |
49 | Route::get('offer/{house:id}', [MainController::class, 'offer'])->name('offer'); | 49 | Route::get('offer/{house:id}', [MainController::class, 'offer'])->name('offer'); |
50 | 50 | ||
51 | //Детальная страница новостей | 51 | //Детальная страница новостей |
52 | Route::get('detail-new/{news:id}', [MainController::class, 'DetailNew'])->name('new'); | 52 | Route::get('detail-new/{news:id}', [MainController::class, 'DetailNew'])->name('new'); |
53 | 53 | ||
54 | //Страница ЖилойКомплекс | 54 | //Страница ЖилойКомплекс |
55 | Route::get('complex/{area:id}', [MainController::class, 'complex'])->name('complex'); | 55 | Route::get('complex/{area:id}', [MainController::class, 'complex'])->name('complex'); |
56 | 56 | ||
57 | // ajax-фильтры каталога | 57 | // ajax-фильтры каталога |
58 | Route::get('catalog_ajax_filter', [MainController::class, 'catalog_ajax_filter'])->name('catalog_ajax_filter'); | 58 | Route::get('catalog_ajax_filter', [MainController::class, 'catalog_ajax_filter'])->name('catalog_ajax_filter'); |
59 | 59 | ||
60 | //Категория | 60 | //Категория |
61 | Route::get('category/{cat}', [MainController::class, 'Category'])->name('category'); | 61 | Route::get('category/{cat}', [MainController::class, 'Category'])->name('category'); |
62 | 62 | ||
63 | //Категория ajax | 63 | //Категория ajax |
64 | Route::get('category_ajax/{cat}', [MainController::class, 'category_ajax'])->name('category_ajax'); | 64 | Route::get('category_ajax/{cat}', [MainController::class, 'category_ajax'])->name('category_ajax'); |
65 | 65 | ||
66 | //Страница куков | 66 | //Страница куков |
67 | Route::get('cookies', function () { | 67 | Route::get('cookies', function () { |
68 | return view('cookies'); | 68 | return view('cookies'); |
69 | })->name('cookies'); | 69 | })->name('cookies'); |
70 | 70 | ||
71 | //Форма обратной связи в футере | 71 | //Форма обратной связи в футере |
72 | Route::post('main_form', [MainController::class, 'main_form'])->name('main_form'); | 72 | Route::post('main_form', [MainController::class, 'main_form'])->name('main_form'); |
73 | 73 | ||
74 | //Форма обратной связи в хедере | 74 | //Форма обратной связи в хедере |
75 | Route::post('header_form', [MainController::class, 'header_form'])->name('header_form'); | 75 | Route::post('header_form', [MainController::class, 'header_form'])->name('header_form'); |
76 | 76 | ||
77 | //Форма записаться на просмотр в карточке офиса | 77 | //Форма записаться на просмотр в карточке офиса |
78 | Route::post('rec_view_form', [MainController::class, 'rec_view_form'])->name('rec_view_form'); | 78 | Route::post('rec_view_form', [MainController::class, 'rec_view_form'])->name('rec_view_form'); |
79 | 79 | ||
80 | //Форма обратной связи на странице контакты | 80 | //Форма обратной связи на странице контакты |
81 | Route::post('page_contact_form', [MainController::class, 'page_contact_form'])->name('page_contact_form'); | 81 | Route::post('page_contact_form', [MainController::class, 'page_contact_form'])->name('page_contact_form'); |
82 | 82 | ||
83 | //Форма обратной связи предложения по почте | 83 | //Форма обратной связи предложения по почте |
84 | Route::post('email_form', [MainController::class, 'email_form'])->name('email_form'); | 84 | Route::post('email_form', [MainController::class, 'email_form'])->name('email_form'); |
85 | 85 | ||
86 | Route::group([ | 86 | Route::group([ |
87 | 'as' => 'auth.', // имя маршрута, например auth.index | 87 | 'as' => 'auth.', // имя маршрута, например auth.index |
88 | 'prefix' => 'auth', // префикс маршрута, например auth/index | 88 | 'prefix' => 'auth', // префикс маршрута, например auth/index |
89 | ], function () { | 89 | ], function () { |
90 | // Форма регистрации | 90 | // Форма регистрации |
91 | Route::get('register', [RegisterController::class, 'register'])->name('register'); | 91 | Route::get('register', [RegisterController::class, 'register'])->name('register'); |
92 | 92 | ||
93 | // Создание пользователя | 93 | // Создание пользователя |
94 | Route::post('register', [RegisterController::class, 'create'])->name('create'); | 94 | Route::post('register', [RegisterController::class, 'create'])->name('create'); |
95 | //Форма входа | 95 | //Форма входа |
96 | Route::get('login', [LoginController::class, 'login'])->name('login'); | 96 | Route::get('login', [LoginController::class, 'login'])->name('login'); |
97 | 97 | ||
98 | // аутентификация | 98 | // аутентификация |
99 | Route::post('login', [LoginController::class, 'autenticate'])->name('auth'); | 99 | Route::post('login', [LoginController::class, 'autenticate'])->name('auth'); |
100 | 100 | ||
101 | // выход | 101 | // выход |
102 | Route::get('logout', [LoginController::class, 'logout'])->name('logout'); | 102 | Route::get('logout', [LoginController::class, 'logout'])->name('logout'); |
103 | |||
104 | //Страница неудачной авторизации | ||
105 | Route::get('vefiry-message', function () { | ||
106 | return view('auth.vefiry-message'); | ||
107 | })->name('vefiry-message'); | ||
108 | |||
103 | }); | 109 | }); |
104 | 110 | ||
105 | /* | 111 | /* |
106 | * Личный кабинет пользователя | 112 | * Личный кабинет пользователя |
107 | */ | 113 | */ |
108 | Route::group([ | 114 | Route::group([ |
109 | 'as' => 'user.', // имя маршрута, например user.index | 115 | 'as' => 'user.', // имя маршрута, например user.index |
110 | 'prefix' => 'user', // префикс маршрута, например user/index | 116 | 'prefix' => 'user', // префикс маршрута, например user/index |
111 | //'namespace' => 'User', // пространство имен контроллеров | 117 | //'namespace' => 'User', // пространство имен контроллеров |
112 | 'middleware' => ['auth'] // один или несколько посредников | 118 | 'middleware' => ['auth'] // один или несколько посредников |
113 | ], function () { | 119 | ], function () { |
114 | // главная страница | 120 | // главная страница |
115 | Route::get('index', [AdminController::class, 'index'])->name('index'); | 121 | Route::get('index', [AdminController::class, 'index'])->name('index'); |
116 | }); | 122 | }); |
117 | 123 | ||
118 | /* | 124 | /* |
119 | * Панель управления: CRUD-операции над постами, категориями, тегами | 125 | * Панель управления: CRUD-операции над постами, категориями, тегами |
120 | */ | 126 | */ |
121 | Route::group([ | 127 | Route::group([ |
122 | 'as' => 'admin.', // имя маршрута, например admin.index | 128 | 'as' => 'admin.', // имя маршрута, например admin.index |
123 | 'prefix' => 'admin', // префикс маршрута, например admin/index | 129 | 'prefix' => 'admin', // префикс маршрута, например admin/index |
124 | //'namespace' => 'Admin', // пространство имен контроллеров | 130 | //'namespace' => 'Admin', // пространство имен контроллеров |
125 | 'middleware' => ['auth'] // один или несколько посредников | 131 | 'middleware' => ['auth'] // один или несколько посредников |
126 | ], function () { | 132 | ], function () { |
127 | /* | 133 | /* |
128 | * CRUD-операции над постами Жилых комплексов | 134 | * CRUD-операции над постами Жилых комплексов |
129 | */ | 135 | */ |
130 | Route::resource('area', AreaController::class, []); | 136 | Route::resource('area', AreaController::class, []); |
131 | 137 | ||
132 | //дополнительный маршрут для показа постов с жилыми массивами | 138 | //дополнительный маршрут для показа постов с жилыми массивами |
133 | Route::get('post/area/{area}', [AreaController::class, 'area_category']) | 139 | Route::get('post/area/{area}', [AreaController::class, 'area_category']) |
134 | ->name('post.area'); | 140 | ->name('post.area'); |
135 | }); | 141 | }); |
136 | 142 |