Commit 2a7870bed35f30735467ae9c4c77a35491a5a97e
1 parent
6370754b6b
Exists in
master
and in
1 other branch
Обновление главной страницы
Showing 2 changed files with 10 additions and 6 deletions Inline Diff
app/Http/Controllers/MainController.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | namespace App\Http\Controllers; | 3 | namespace App\Http\Controllers; |
4 | 4 | ||
5 | use App\Classes\Tools; | 5 | use App\Classes\Tools; |
6 | use App\Mail\MailRegistration; | 6 | use App\Mail\MailRegistration; |
7 | use App\Mail\MailRepair; | 7 | use App\Mail\MailRepair; |
8 | use App\Models\Ad_employer; | 8 | use App\Models\Ad_employer; |
9 | use App\Models\Category; | 9 | use App\Models\Category; |
10 | use App\Models\Education; | 10 | use App\Models\Education; |
11 | use App\Models\Employer; | 11 | use App\Models\Employer; |
12 | use App\Models\employers_main; | ||
12 | use App\Models\Job_title; | 13 | use App\Models\Job_title; |
13 | use App\Models\News; | 14 | use App\Models\News; |
14 | use App\Models\reclame; | 15 | use App\Models\reclame; |
15 | use App\Models\User; | 16 | use App\Models\User; |
16 | use Illuminate\Http\Request; | 17 | use Illuminate\Http\Request; |
17 | use Illuminate\Support\Facades\Auth; | 18 | use Illuminate\Support\Facades\Auth; |
18 | use Illuminate\Support\Facades\Hash; | 19 | use Illuminate\Support\Facades\Hash; |
19 | use Illuminate\Support\Facades\Mail; | 20 | use Illuminate\Support\Facades\Mail; |
20 | use Illuminate\Support\Facades\Validator; | 21 | use Illuminate\Support\Facades\Validator; |
21 | use App\Classes\StatusUser; | 22 | use App\Classes\StatusUser; |
22 | 23 | ||
23 | class MainController extends Controller | 24 | class MainController extends Controller |
24 | { | 25 | { |
25 | // Главная страница публичной части | 26 | // Главная страница публичной части |
26 | public function index() { | 27 | public function index() { |
27 | $news = News::query()->orderBy('id')->limit(6)->get(); | 28 | $news = News::query()->orderBy('id')->limit(6)->get(); |
28 | 29 | ||
29 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') | 30 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') |
30 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') | 31 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') |
31 | ->OrderByDesc('created_at') | 32 | ->OrderByDesc('created_at') |
32 | ->GroupBy('categories.id') | 33 | ->GroupBy('categories.id') |
33 | ->get(); | 34 | ->get(); |
34 | 35 | ||
35 | $employers = Employer::query()->orderBy('id')->limit(20)->get(); | 36 | $employers = employers_main::query()->with('employer')->orderBy('id')->limit(8)->get(); |
37 | |||
36 | 38 | ||
37 | return view('index', compact('news', 'categories', 'employers')); | 39 | return view('index', compact('news', 'categories', 'employers')); |
38 | } | 40 | } |
39 | 41 | ||
40 | public function search_vacancies(Request $request) { | 42 | public function search_vacancies(Request $request) { |
41 | if ($request->has('search')) { | 43 | if ($request->has('search')) { |
42 | $search = $request->get('search'); | 44 | $search = $request->get('search'); |
43 | $job_titles = Job_title::query()->where('name', 'LIKE', "%$search%")->first(); | 45 | $job_titles = Job_title::query()->where('name', 'LIKE', "%$search%")->first(); |
44 | if (isset($job_titles->id)) | 46 | if (isset($job_titles->id)) |
45 | if ($job_titles->id > 0) | 47 | if ($job_titles->id > 0) |
46 | return redirect()->route('vacancies', ['job' => $job_titles->id]); | 48 | return redirect()->route('vacancies', ['job' => $job_titles->id]); |
47 | } | 49 | } |
48 | } | 50 | } |
49 | 51 | ||
50 | public function vacancies(Request $request) { | 52 | public function vacancies(Request $request) { |
51 | //должности | 53 | //должности |
52 | $Job_title = Job_title::query()->orderBy('name')->get(); | 54 | $Job_title = Job_title::query()->orderBy('name')->get(); |
53 | 55 | ||
54 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') | 56 | $categories = Category::query()->selectRaw('count(ad_employers.id) as cnt, categories.*') |
55 | ->selectRaw('min(ad_employers.salary) as min_salary, max(ad_employers.salary) as max_salary') | 57 | ->selectRaw('min(ad_employers.salary) as min_salary, max(ad_employers.salary) as max_salary') |
56 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') | 58 | ->join('ad_employers', 'ad_employers.category_id', '=', 'categories.id') |
57 | ->join('ad_jobs', 'ad_jobs.ad_employer_id', '=', 'ad_employers.id'); | 59 | ->join('ad_jobs', 'ad_jobs.ad_employer_id', '=', 'ad_employers.id'); |
58 | 60 | ||
59 | //категории и вакансии | 61 | //категории и вакансии |
60 | if (($request->has('job')) && ($request->get('job') > 0)) { | 62 | if (($request->has('job')) && ($request->get('job') > 0)) { |
61 | $categories = $categories->Where('job_title_id', '=', $request->get('job')); | 63 | $categories = $categories->Where('job_title_id', '=', $request->get('job')); |
62 | } | 64 | } |
63 | 65 | ||
64 | $categories = $categories->OrderByDesc('created_at')->GroupBy('categories.id')->get(); | 66 | $categories = $categories->OrderByDesc('created_at')->GroupBy('categories.id')->get(); |
65 | 67 | ||
66 | if ($request->ajax()) { | 68 | if ($request->ajax()) { |
67 | return view('ajax.vacancies', compact('categories')); | 69 | return view('ajax.vacancies', compact('categories')); |
68 | } else { | 70 | } else { |
69 | return view('vacancies', compact('Job_title', 'categories')); | 71 | return view('vacancies', compact('Job_title', 'categories')); |
70 | } | 72 | } |
71 | } | 73 | } |
72 | 74 | ||
73 | //Вакансии категория детальная | 75 | //Вакансии категория детальная |
74 | public function list_vacancies(Category $categories, Request $request) { | 76 | public function list_vacancies(Category $categories, Request $request) { |
75 | if (isset(Auth()->user()->id)) | 77 | if (isset(Auth()->user()->id)) |
76 | $uid = Auth()->user()->id; | 78 | $uid = Auth()->user()->id; |
77 | else | 79 | else |
78 | $uid = 0; | 80 | $uid = 0; |
79 | 81 | ||
80 | $Query = Ad_employer::with('jobs')-> | 82 | $Query = Ad_employer::with('jobs')-> |
81 | with('cat')-> | 83 | with('cat')-> |
82 | with('employer')-> | 84 | with('employer')-> |
83 | whereHas('jobs_code', function ($query) use ($request) { | 85 | whereHas('jobs_code', function ($query) use ($request) { |
84 | if ($request->ajax()) { | 86 | if ($request->ajax()) { |
85 | if (null !== ($request->get('job')) && ($request->get('job') !== 0)) { | 87 | if (null !== ($request->get('job')) && ($request->get('job') !== 0)) { |
86 | $query->where('job_title_id', $request->get('job')); | 88 | $query->where('job_title_id', $request->get('job')); |
87 | } | 89 | } |
88 | } | 90 | } |
89 | }) | 91 | }) |
90 | ->select('ad_employers.*'); | 92 | ->select('ad_employers.*'); |
91 | 93 | ||
92 | 94 | ||
93 | 95 | ||
94 | if ($categories->id > 0) { | 96 | if ($categories->id > 0) { |
95 | $Query = $Query->where('category_id', '=', $categories->id); | 97 | $Query = $Query->where('category_id', '=', $categories->id); |
96 | $Name_categori = Category::query()->where('id', '=', $categories->id)->get(); | 98 | $Name_categori = Category::query()->where('id', '=', $categories->id)->get(); |
97 | } | 99 | } |
98 | 100 | ||
99 | if ($request->get('sort')) { | 101 | if ($request->get('sort')) { |
100 | $sort = $request->get('sort'); | 102 | $sort = $request->get('sort'); |
101 | switch ($sort) { | 103 | switch ($sort) { |
102 | case 'name_up': $Query = $Query->orderBy('name')->orderBy('id'); break; | 104 | case 'name_up': $Query = $Query->orderBy('name')->orderBy('id'); break; |
103 | case 'name_down': $Query = $Query->orderByDesc('name')->orderby('id'); break; | 105 | case 'name_down': $Query = $Query->orderByDesc('name')->orderby('id'); break; |
104 | case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break; | 106 | case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break; |
105 | case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break; | 107 | case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break; |
106 | case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break; | 108 | case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break; |
107 | default: $Query = $Query->orderBy('id')->orderby('updated_at'); break; | 109 | default: $Query = $Query->orderBy('id')->orderby('updated_at'); break; |
108 | } | 110 | } |
109 | } | 111 | } |
110 | 112 | ||
111 | $Job_title = Job_title::query()->OrderBy('name')->get(); | 113 | $Job_title = Job_title::query()->OrderBy('name')->get(); |
112 | 114 | ||
113 | $Query_count = $Query->count(); | 115 | $Query_count = $Query->count(); |
114 | 116 | ||
115 | $Query = $Query->OrderBy('updated_at')->paginate(3); | 117 | $Query = $Query->OrderBy('updated_at')->paginate(3); |
116 | 118 | ||
117 | $Reclama = reclame::query()->get(); | 119 | $Reclama = reclame::query()->get(); |
118 | 120 | ||
119 | 121 | ||
120 | 122 | ||
121 | if ($request->ajax()) { | 123 | if ($request->ajax()) { |
122 | if ($request->has('title')) { | 124 | if ($request->has('title')) { |
123 | return view('ajax.list_category', compact( | 125 | return view('ajax.list_category', compact( |
124 | 'Name_categori' | 126 | 'Name_categori' |
125 | )); | 127 | )); |
126 | } else { | 128 | } else { |
127 | return view('ajax.list_vacancies', compact('Query', | 129 | return view('ajax.list_vacancies', compact('Query', |
128 | 'Query_count', | 130 | 'Query_count', |
129 | 'Name_categori', | 131 | 'Name_categori', |
130 | 'Reclama', | 132 | 'Reclama', |
131 | 'categories', | 133 | 'categories', |
132 | 'Job_title', | 134 | 'Job_title', |
133 | 'uid')); | 135 | 'uid')); |
134 | } | 136 | } |
135 | } else { | 137 | } else { |
136 | //Вернуть все | 138 | //Вернуть все |
137 | return view('list_vacancies', compact('Query', | 139 | return view('list_vacancies', compact('Query', |
138 | 'Query_count', | 140 | 'Query_count', |
139 | 'Reclama', | 141 | 'Reclama', |
140 | 'Name_categori', | 142 | 'Name_categori', |
141 | 'categories', | 143 | 'categories', |
142 | 'Job_title', | 144 | 'Job_title', |
143 | 'uid')); | 145 | 'uid')); |
144 | } | 146 | } |
145 | } | 147 | } |
146 | 148 | ||
147 | // Образование | 149 | // Образование |
148 | public function education(Request $request) { | 150 | public function education(Request $request) { |
149 | $educations = Education::query(); | 151 | $educations = Education::query(); |
150 | if (($request->has('search')) && (!empty($request->get('search')))) { | 152 | if (($request->has('search')) && (!empty($request->get('search')))) { |
151 | $search = trim($request->get('search')); | 153 | $search = trim($request->get('search')); |
152 | $educations = $educations->where('name', 'LIKE', "%$search%"); | 154 | $educations = $educations->where('name', 'LIKE', "%$search%"); |
153 | } | 155 | } |
154 | 156 | ||
155 | if ($request->get('sort')) { | 157 | if ($request->get('sort')) { |
156 | $sort = $request->get('sort'); | 158 | $sort = $request->get('sort'); |
157 | switch ($sort) { | 159 | switch ($sort) { |
158 | case 'name_up': $educations = $educations->orderBy('name')->orderBy('id'); break; | 160 | case 'name_up': $educations = $educations->orderBy('name')->orderBy('id'); break; |
159 | case 'name_down': $educations = $educations->orderByDesc('name')->orderby('id'); break; | 161 | case 'name_down': $educations = $educations->orderByDesc('name')->orderby('id'); break; |
160 | case 'created_at_up': $educations = $educations->OrderBy('created_at')->orderBy('id'); break; | 162 | case 'created_at_up': $educations = $educations->OrderBy('created_at')->orderBy('id'); break; |
161 | case 'created_at_down': $educations = $educations->orderByDesc('created_at')->orderBy('id'); break; | 163 | case 'created_at_down': $educations = $educations->orderByDesc('created_at')->orderBy('id'); break; |
162 | case 'default': $educations = $educations->orderBy('id')->orderby('updated_at'); break; | 164 | case 'default': $educations = $educations->orderBy('id')->orderby('updated_at'); break; |
163 | default: $educations = $educations->orderBy('id')->orderby('updated_at'); break; | 165 | default: $educations = $educations->orderBy('id')->orderby('updated_at'); break; |
164 | } | 166 | } |
165 | } | 167 | } |
166 | 168 | ||
167 | $count_edu = $educations->count(); | 169 | $count_edu = $educations->count(); |
168 | $educations = $educations->paginate(6); | 170 | $educations = $educations->paginate(6); |
169 | if ($request->ajax()) { | 171 | if ($request->ajax()) { |
170 | return view('ajax.education', compact('educations')); | 172 | return view('ajax.education', compact('educations')); |
171 | } else { | 173 | } else { |
172 | return view('education', compact('educations', 'count_edu')); | 174 | return view('education', compact('educations', 'count_edu')); |
173 | } | 175 | } |
174 | } | 176 | } |
175 | 177 | ||
176 | // Контакты | 178 | // Контакты |
177 | public function contacts() { | 179 | public function contacts() { |
178 | return view('contacts'); | 180 | return view('contacts'); |
179 | } | 181 | } |
180 | 182 | ||
181 | // Вход в личный кабинет | 183 | // Вход в личный кабинет |
182 | public function input_login(Request $request) | 184 | public function input_login(Request $request) |
183 | { | 185 | { |
184 | $params = $request->all(); | 186 | $params = $request->all(); |
185 | 187 | ||
186 | 188 | ||
187 | $rules = [ | 189 | $rules = [ |
188 | 'email' => 'required|string|email', | 190 | 'email' => 'required|string|email', |
189 | 'password' => 'required|string|min:3|max:25', | 191 | 'password' => 'required|string|min:3|max:25', |
190 | ]; | 192 | ]; |
191 | 193 | ||
192 | $messages = [ | 194 | $messages = [ |
193 | 'required' => 'Укажите обязательное поле «:attribute»', | 195 | 'required' => 'Укажите обязательное поле «:attribute»', |
194 | 'email' => 'Введите корректный email', | 196 | 'email' => 'Введите корректный email', |
195 | 'min' => [ | 197 | 'min' => [ |
196 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', | 198 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', |
197 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' | 199 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' |
198 | ], | 200 | ], |
199 | 'max' => [ | 201 | 'max' => [ |
200 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', | 202 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', |
201 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' | 203 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' |
202 | ], | 204 | ], |
203 | ]; | 205 | ]; |
204 | 206 | ||
205 | $validator = Validator::make($request->all(), $rules, $messages); | 207 | $validator = Validator::make($request->all(), $rules, $messages); |
206 | 208 | ||
207 | 209 | ||
208 | if ($validator->fails()) { | 210 | if ($validator->fails()) { |
209 | return redirect()->route('index')->with('Error', "Email или пароль невалидный"); | 211 | return redirect()->route('index')->with('Error', "Email или пароль невалидный"); |
210 | } else { | 212 | } else { |
211 | $credentials = $request->only('email', 'password'); | 213 | $credentials = $request->only('email', 'password'); |
212 | 214 | ||
213 | if (Auth::attempt($credentials, $request->has('remember'))) { | 215 | if (Auth::attempt($credentials, $request->has('remember'))) { |
214 | 216 | ||
215 | if (is_null(Auth::user()->email_verified_at)) { | 217 | if (is_null(Auth::user()->email_verified_at)) { |
216 | Auth::logout(); | 218 | Auth::logout(); |
217 | return json_encode(Array("ERROR" => "Адрес почты не подтвержден")); | 219 | return json_encode(Array("ERROR" => "Адрес почты не подтвержден")); |
218 | } | 220 | } |
219 | 221 | ||
220 | if (Auth::user()->is_worker) { | 222 | if (Auth::user()->is_worker) { |
221 | return json_encode(Array("REDIRECT" => redirect()->route('worker.cabinet')->getTargetUrl())); | 223 | return json_encode(Array("REDIRECT" => redirect()->route('worker.cabinet')->getTargetUrl())); |
222 | } else { | 224 | } else { |
223 | return json_encode(Array("REDIRECT" => redirect()->route('employer.cabinet')->getTargetUrl())); | 225 | return json_encode(Array("REDIRECT" => redirect()->route('employer.cabinet')->getTargetUrl())); |
224 | } | 226 | } |
225 | 227 | ||
226 | return json_encode(Array("SUCCESS" => "Вы успешно вошли в личный кабинет")); | 228 | return json_encode(Array("SUCCESS" => "Вы успешно вошли в личный кабинет")); |
227 | //->route('index') | 229 | //->route('index') |
228 | //->with('success', 'Вы вошли в личный кабинет.'); | 230 | //->with('success', 'Вы вошли в личный кабинет.'); |
229 | } else { | 231 | } else { |
230 | return json_encode(Array("ERROR" => "Неверный логин или пароль!")); | 232 | return json_encode(Array("ERROR" => "Неверный логин или пароль!")); |
231 | } | 233 | } |
232 | } | 234 | } |
233 | } | 235 | } |
234 | 236 | ||
235 | // Восстановление пароля | 237 | // Восстановление пароля |
236 | public function repair_password(Request $request) { | 238 | public function repair_password(Request $request) { |
237 | $rules = [ | 239 | $rules = [ |
238 | 'email' => 'required|string|email', | 240 | 'email' => 'required|string|email', |
239 | ]; | 241 | ]; |
240 | 242 | ||
241 | $messages = [ | 243 | $messages = [ |
242 | 'required' => 'Укажите обязательное поле «:attribute»', | 244 | 'required' => 'Укажите обязательное поле «:attribute»', |
243 | 'email' => 'Введите корректный email', | 245 | 'email' => 'Введите корректный email', |
244 | 'min' => [ | 246 | 'min' => [ |
245 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', | 247 | 'string' => 'Поле «:attribute» должно быть не меньше :min символов', |
246 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' | 248 | 'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт' |
247 | ], | 249 | ], |
248 | 'max' => [ | 250 | 'max' => [ |
249 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', | 251 | 'string' => 'Поле «:attribute» должно быть не больше :max символов', |
250 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' | 252 | 'file' => 'Файл «:attribute» должен быть не больше :max Кбайт' |
251 | ], | 253 | ], |
252 | ]; | 254 | ]; |
253 | 255 | ||
254 | $validator = Validator::make($request->all(), $rules, $messages); | 256 | $validator = Validator::make($request->all(), $rules, $messages); |
255 | 257 | ||
256 | if ($validator->fails()) { | 258 | if ($validator->fails()) { |
257 | return redirect()->back()->with('Error', "Email невалидный"); | 259 | return redirect()->back()->with('Error', "Email невалидный"); |
258 | } else { | 260 | } else { |
259 | $new_password = Tools::generator_id(10); | 261 | $new_password = Tools::generator_id(10); |
260 | $hash_password = Hash::make($new_password); | 262 | $hash_password = Hash::make($new_password); |
261 | $user = User::query()->where('email', $request->get('email'))->first(); | 263 | $user = User::query()->where('email', $request->get('email'))->first(); |
262 | $EditRec = User::find($user->id); | 264 | $EditRec = User::find($user->id); |
263 | $EditRec->password = $hash_password; | 265 | $EditRec->password = $hash_password; |
264 | $EditRec->save(); | 266 | $EditRec->save(); |
265 | 267 | ||
266 | foreach ([$request->get('email')] as $recipient) { | 268 | foreach ([$request->get('email')] as $recipient) { |
267 | Mail::to($recipient)->send(new MailRepair($new_password)); | 269 | Mail::to($recipient)->send(new MailRepair($new_password)); |
268 | } | 270 | } |
269 | return redirect()->route('index'); | 271 | return redirect()->route('index'); |
270 | 272 | ||
271 | } | 273 | } |
272 | 274 | ||
273 | } | 275 | } |
274 | 276 | ||
275 | // Вывод новостей | 277 | // Вывод новостей |
276 | public function news(Request $request) { | 278 | public function news(Request $request) { |
277 | $Query = News::query(); | 279 | $Query = News::query(); |
278 | if ($request->has('search')) { | 280 | if ($request->has('search')) { |
279 | $search = $request->get('search'); | 281 | $search = $request->get('search'); |
280 | $Query = $Query->where('title', 'LIKE', "%$search%")-> | 282 | $Query = $Query->where('title', 'LIKE', "%$search%")-> |
281 | orWhere('text', 'LIKE', "%$search%"); | 283 | orWhere('text', 'LIKE', "%$search%"); |
282 | } | 284 | } |
283 | 285 | ||
284 | if ($request->ajax()) { | 286 | if ($request->ajax()) { |
285 | if ($request->get('sort')) { | 287 | if ($request->get('sort')) { |
286 | $sort = $request->get('sort'); | 288 | $sort = $request->get('sort'); |
287 | switch ($sort) { | 289 | switch ($sort) { |
288 | case 'name_up': $Query = $Query->orderBy('title')->orderBy('id'); break; | 290 | case 'name_up': $Query = $Query->orderBy('title')->orderBy('id'); break; |
289 | case 'name_down': $Query = $Query->orderByDesc('title')->orderby('id'); break; | 291 | case 'name_down': $Query = $Query->orderByDesc('title')->orderby('id'); break; |
290 | case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break; | 292 | case 'created_at_up': $Query = $Query->OrderBy('created_at')->orderBy('id'); break; |
291 | case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break; | 293 | case 'created_at_down': $Query = $Query->orderByDesc('created_at')->orderBy('id'); break; |
292 | case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break; | 294 | case 'default': $Query = $Query->orderBy('id')->orderby('updated_at'); break; |
293 | default: $Query = $Query->orderBy('id')->orderby('updated_at'); break; | 295 | default: $Query = $Query->orderBy('id')->orderby('updated_at'); break; |
294 | } | 296 | } |
295 | } | 297 | } |
296 | } | 298 | } |
297 | $Query_count = $Query->count(); | 299 | $Query_count = $Query->count(); |
298 | $Query = $Query->paginate(6); | 300 | $Query = $Query->paginate(6); |
299 | 301 | ||
300 | if ($request->ajax()) { | 302 | if ($request->ajax()) { |
301 | return view('ajax.news-list', compact('Query', 'Query_count')); | 303 | return view('ajax.news-list', compact('Query', 'Query_count')); |
302 | } else { | 304 | } else { |
303 | return view('news-list', compact('Query', 'Query_count')); | 305 | return view('news-list', compact('Query', 'Query_count')); |
304 | } | 306 | } |
305 | } | 307 | } |
306 | 308 | ||
307 | //Детальная новость | 309 | //Детальная новость |
308 | public function detail_new(News $new) { | 310 | public function detail_new(News $new) { |
309 | // Выборка | 311 | // Выборка |
310 | $Query = News::query()->where('id', $new->id)->get(); | 312 | $Query = News::query()->where('id', $new->id)->get(); |
311 | $title = $Query[0]->title; | 313 | $title = $Query[0]->title; |
312 | $All_Query = News::query()->paginate(8); | 314 | $All_Query = News::query()->paginate(8); |
313 | return view('detail_new', compact('Query', 'All_Query', 'title')); | 315 | return view('detail_new', compact('Query', 'All_Query', 'title')); |
314 | } | 316 | } |
315 | } | 317 | } |
316 | 318 |
resources/views/index.blade.php
1 | @extends('layout.frontend', ['title' => 'Главная страница РекаМоре']) | 1 | @extends('layout.frontend', ['title' => 'Главная страница РекаМоре']) |
2 | 2 | ||
3 | @section('scripts') | 3 | @section('scripts') |
4 | 4 | ||
5 | @endsection | 5 | @endsection |
6 | 6 | ||
7 | @section('content') | 7 | @section('content') |
8 | <section class="work"> | 8 | <section class="work"> |
9 | <div class="container"> | 9 | <div class="container"> |
10 | <img src="{{ asset('images/1.png') }}" alt="" class="work__pic"> | 10 | <img src="{{ asset('images/1.png') }}" alt="" class="work__pic"> |
11 | <div class="work__body"> | 11 | <div class="work__body"> |
12 | <div class="work__title"> | 12 | <div class="work__title"> |
13 | <h4>Работа в море / | 13 | <h4>Работа в море / |
14 | <span class="br">Работа на реке</span></h4> | 14 | <span class="br">Работа на реке</span></h4> |
15 | </div> | 15 | </div> |
16 | <div class="work__text">Профессиональная сеть морского сообщества «RekaMore.su» приветствует вас — | 16 | <div class="work__text">Профессиональная сеть морского сообщества «RekaMore.su» приветствует вас — |
17 | тех, кто не представляет себе жизнь без моря, тех, кто готов связать свою жизнь с работой в | 17 | тех, кто не представляет себе жизнь без моря, тех, кто готов связать свою жизнь с работой в |
18 | сложных, но очень интересных условиях. </div> | 18 | сложных, но очень интересных условиях. </div> |
19 | <div class="work__list"> | 19 | <div class="work__list"> |
20 | <div>Тысячи соискателей увидят Ваше объявление</div> | 20 | <div>Тысячи соискателей увидят Ваше объявление</div> |
21 | <div>Десятки компаний выкладывают объявления каждый день</div> | 21 | <div>Десятки компаний выкладывают объявления каждый день</div> |
22 | </div> | 22 | </div> |
23 | <form class="search work__form" action="{{ route('search_vacancies') }}" method="GET"> | 23 | <form class="search work__form" action="{{ route('search_vacancies') }}" method="GET"> |
24 | <input type="search" id="search" name="search" class="input" placeholder="Желаемая должность" required> | 24 | <input type="search" id="search" name="search" class="input" placeholder="Желаемая должность" required> |
25 | <button type="submit" class="button button_light">Посмотреть вакансии</button> | 25 | <button type="submit" class="button button_light">Посмотреть вакансии</button> |
26 | <span> | 26 | <span> |
27 | <svg> | 27 | <svg> |
28 | <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use> | 28 | <use xlink:href="{{ asset('images/sprite.svg#search') }}"></use> |
29 | </svg> | 29 | </svg> |
30 | </span> | 30 | </span> |
31 | </form> | 31 | </form> |
32 | @guest | 32 | @guest |
33 | <a data-fancybox data-src="#question2" data-options='{"touch":false,"autoFocus":false}' class="button work__search">Я ищу сотрудника</a> | 33 | <a data-fancybox data-src="#question2" data-options='{"touch":false,"autoFocus":false}' class="button work__search">Я ищу сотрудника</a> |
34 | @else | 34 | @else |
35 | <a href="{{ route('bd_resume') }}" class="button work__search">Я ищу сотрудника</a> | 35 | <a href="{{ route('bd_resume') }}" class="button work__search">Я ищу сотрудника</a> |
36 | @endguest | 36 | @endguest |
37 | <div class="work__get"> | 37 | <div class="work__get"> |
38 | <b>Скачать приложение</b> | 38 | <b>Скачать приложение</b> |
39 | <a href=""> | 39 | <a href=""> |
40 | <img src="{{ asset('images/google.svg') }}" alt=""> | 40 | <img src="{{ asset('images/google.svg') }}" alt=""> |
41 | </a> | 41 | </a> |
42 | <a href=""> | 42 | <a href=""> |
43 | <img src="{{ asset('images/apple.svg') }}" alt=""> | 43 | <img src="{{ asset('images/apple.svg') }}" alt=""> |
44 | </a> | 44 | </a> |
45 | </div> | 45 | </div> |
46 | </div> | 46 | </div> |
47 | </div> | 47 | </div> |
48 | </section> | 48 | </section> |
49 | <section class="numbers"> | 49 | <section class="numbers"> |
50 | <div class="container"> | 50 | <div class="container"> |
51 | <div class="numbers__body"> | 51 | <div class="numbers__body"> |
52 | <div class="numbers__item"> | 52 | <div class="numbers__item"> |
53 | <b>500+</b> | 53 | <b>500+</b> |
54 | <span>Резюме</span> | 54 | <span>Резюме</span> |
55 | Банальные, но неопровержимые выводы, а также элементы политического процесса лишь добавляют | 55 | Банальные, но неопровержимые выводы, а также элементы политического процесса лишь добавляют |
56 | фракционных разногласий и призваны к ответу. | 56 | фракционных разногласий и призваны к ответу. |
57 | </div> | 57 | </div> |
58 | <div class="numbers__item"> | 58 | <div class="numbers__item"> |
59 | <b>1 000+</b> | 59 | <b>1 000+</b> |
60 | <span>Вакансий</span> | 60 | <span>Вакансий</span> |
61 | В рамках спецификации современных стандартов, диаграммы связей заблокированы в рамках своих | 61 | В рамках спецификации современных стандартов, диаграммы связей заблокированы в рамках своих |
62 | собственных рациональных ограничений. | 62 | собственных рациональных ограничений. |
63 | </div> | 63 | </div> |
64 | <div class="numbers__item"> | 64 | <div class="numbers__item"> |
65 | <b>265</b> | 65 | <b>265</b> |
66 | <span>Компаний</span> | 66 | <span>Компаний</span> |
67 | Но сторонники тоталитаризма в науке заблокированы в рамках своих собственных рациональных | 67 | Но сторонники тоталитаризма в науке заблокированы в рамках своих собственных рациональных |
68 | ограничений. | 68 | ограничений. |
69 | </div> | 69 | </div> |
70 | </div> | 70 | </div> |
71 | </div> | 71 | </div> |
72 | </section> | 72 | </section> |
73 | <section class="vacancies"> | 73 | <section class="vacancies"> |
74 | <div class="container"> | 74 | <div class="container"> |
75 | <div class="title"><h4>Новые вакансии</h4></div> | 75 | <div class="title"><h4>Новые вакансии</h4></div> |
76 | <div class="vacancies__body"> | 76 | <div class="vacancies__body"> |
77 | <a class="vacancies__more button button_light js-parent-toggle" href="{{ route('vacancies') }}">Все должности</a> | 77 | <a class="vacancies__more button button_light js-parent-toggle" href="{{ route('vacancies') }}">Все должности</a> |
78 | <div class="vacancies__list"> | 78 | <div class="vacancies__list"> |
79 | @if ($categories->count()) | 79 | @if ($categories->count()) |
80 | @foreach ($categories as $cat) | 80 | @foreach ($categories as $cat) |
81 | <a href="{{ route('list-vacancies', ['categories' => $cat->id]) }}" class="vacancies__item"> | 81 | <a href="{{ route('list-vacancies', ['categories' => $cat->id]) }}" class="vacancies__item"> |
82 | <span style="border-color:#F4C4C2"> | 82 | <span style="border-color:#F4C4C2"> |
83 | <b>{{ $cat->name }}</b> | 83 | <b>{{ $cat->name }}</b> |
84 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> | 84 | <i>Вакансий: <span>{{ $cat->cnt }}</span></i> |
85 | </span> | 85 | </span> |
86 | </a> | 86 | </a> |
87 | @endforeach | 87 | @endforeach |
88 | @else | 88 | @else |
89 | Тут пока нет никаких вакансий | 89 | Тут пока нет никаких вакансий |
90 | @endif | 90 | @endif |
91 | </div> | 91 | </div> |
92 | </div> | 92 | </div> |
93 | </div> | 93 | </div> |
94 | </section> | 94 | </section> |
95 | <section class="employer"> | 95 | <section class="employer"> |
96 | <div class="container"> | 96 | <div class="container"> |
97 | <div class="title"><h4>Работодатели</h4></div> | 97 | <div class="title"><h4>Работодатели</h4></div> |
98 | <div class="swiper js-employer-swiper"> | 98 | <div class="swiper js-employer-swiper"> |
99 | <div class="swiper-wrapper"> | 99 | <div class="swiper-wrapper"> |
100 | 100 | ||
101 | @if ($employers->count()) | 101 | @if ($employers->count()) |
102 | @php | 102 | @php |
103 | $rec = 0; | 103 | $rec = 0; |
104 | $count = $employers->count(); | 104 | $count = $employers->count(); |
105 | |||
105 | @endphp | 106 | @endphp |
107 | |||
106 | @foreach($employers as $emp) | 108 | @foreach($employers as $emp) |
107 | @php $rec++ @endphp | 109 | @php $rec++ @endphp |
108 | @if (($rec==1) || ($rec==5) || ($rec==9) || ($rec==13) || ($rec==17)) | 110 | @if (($rec==1) || ($rec==5) || ($rec==9) || ($rec==13) || ($rec==17)) |
109 | <div class="swiper-slide"> | 111 | <div class="swiper-slide"> |
110 | <div class="employer__item"> | 112 | <div class="employer__item"> |
111 | @endif | 113 | @endif |
112 | @if (!empty($emp->logo)) | 114 | @if (!empty($emp->employer->logo)) |
113 | <a href="{{ route('ad-employer', ['ad_employer' => $emp->id]) }}"> | 115 | <a href="{{ route('ad-employer', ['ad_employer' => $emp->employer->id]) }}"> |
114 | <img src="{{ asset(Storage::url($emp->logo)) }}" alt="{{ $emp->name_company }}"> | 116 | <img src="{{ asset(Storage::url($emp->employer->logo)) }}" alt="{{ $emp->employer->name_company }}"> |
115 | </a> | 117 | </a> |
116 | @else | 118 | @else |
117 | <a href="{{ route('ad-employer', ['ad_employer' => $emp->id]) }}"> | 119 | <a href="{{ route('ad-employer', ['ad_employer' => $emp->employer->id]) }}"> |
118 | <img src="{{ asset('images/logo_emp.png') }}" alt="{{ $emp->name_company }}"> | 120 | <img src="{{ asset('images/logo_emp.png') }}" alt="{{ $emp->employer->name_company }}"> |
119 | </a> | 121 | </a> |
120 | @endif | 122 | @endif |
121 | @if (($rec==4) || ($rec==8) || ($rec==12) || ($rec==16) || ($rec==20) || ($rec == $count)) | 123 | @if (($rec==4) || ($rec==8) || ($rec==12) || ($rec==16) || ($rec==20) || ($rec == $count)) |
122 | </div> | 124 | </div> |
123 | </div> | 125 | </div> |
124 | @endif | 126 | @endif |
125 | @endforeach | 127 | @endforeach |
126 | @else | 128 | @else |
127 | <h5>Тут нет никаких записей</h5> | 129 | <h5>Тут нет никаких записей</h5> |
128 | @endif | 130 | @endif |
129 | </div> | 131 | </div> |
130 | <div class="swiper-pagination"></div> | 132 | <div class="swiper-pagination"></div> |
131 | </div> | 133 | </div> |
132 | <a href="{{ route('shipping_companies') }}" class="employer__more button button_light">Все работодатели</a> | 134 | <a href="{{ route('shipping_companies') }}" class="employer__more button button_light">Все работодатели</a> |
133 | </div> | 135 | </div> |
134 | </section> | 136 | </section> |
135 | <section class="about"> | 137 | <section class="about"> |
136 | <div class="container"> | 138 | <div class="container"> |
137 | <div class="about__wrapper"> | 139 | <div class="about__wrapper"> |
138 | <div class="title about__title"><h4>О нас</h4></div> | 140 | <div class="title about__title"><h4>О нас</h4></div> |
139 | <div class="about__body"> | 141 | <div class="about__body"> |
140 | <div class="about__line"></div> | 142 | <div class="about__line"></div> |
141 | <div class="about__item"> | 143 | <div class="about__item"> |
142 | <b>Для работодателей</b> | 144 | <b>Для работодателей</b> |
143 | <span>Наш ресурс позволит Вам за демократичную цену найти нужных специалистов в кратчайшие | 145 | <span>Наш ресурс позволит Вам за демократичную цену найти нужных специалистов в кратчайшие |
144 | сроки, подробнее об условиях можно узнать <a href="{{ route('page', ['pages' => 'Stoimost-razmescheniya']) }}">здесь</a>.</span> | 146 | сроки, подробнее об условиях можно узнать <a href="{{ route('page', ['pages' => 'Stoimost-razmescheniya']) }}">здесь</a>.</span> |
145 | <a class="about__button button button_whited" style="text-decoration: none" href="{{ route('bd_resume') }}">Поиск сотрудников</a> | 147 | <a class="about__button button button_whited" style="text-decoration: none" href="{{ route('bd_resume') }}">Поиск сотрудников</a> |
146 | </div> | 148 | </div> |
147 | <div class="about__item"> | 149 | <div class="about__item"> |
148 | <b>Для сотрудников</b> | 150 | <b>Для сотрудников</b> |
149 | <span>Наше преимущество — это большой объем вакансий, более 70 судоходных компаний России и | 151 | <span>Наше преимущество — это большой объем вакансий, более 70 судоходных компаний России и |
150 | СНГ ищут сотрудников через наши ресурсы</span> | 152 | СНГ ищут сотрудников через наши ресурсы</span> |
151 | <a class="about__button button button_whited" style="text-decoration: none" href="{{ route('vacancies') }}">Ищу работу</a> | 153 | <a class="about__button button button_whited" style="text-decoration: none" href="{{ route('vacancies') }}">Ищу работу</a> |
152 | </div> | 154 | </div> |
153 | </div> | 155 | </div> |
154 | </div> | 156 | </div> |
155 | </div> | 157 | </div> |
156 | </section> | 158 | </section> |
157 | 159 | ||
158 | @if ($news->count()) | 160 | @if ($news->count()) |
159 | <section class="news"> | 161 | <section class="news"> |
160 | <div class="container"> | 162 | <div class="container"> |
161 | <div class="news__toper"> | 163 | <div class="news__toper"> |
162 | <div class="title"><h4>Новости и статьи</h4></div> | 164 | <div class="title"><h4>Новости и статьи</h4></div> |
163 | <div class="navs"> | 165 | <div class="navs"> |
164 | <button class="js-news-swiper-button-prev"> | 166 | <button class="js-news-swiper-button-prev"> |
165 | <svg class="rotate180"> | 167 | <svg class="rotate180"> |
166 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> | 168 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> |
167 | </svg> | 169 | </svg> |
168 | </button> | 170 | </button> |
169 | <button class="js-news-swiper-button-next"> | 171 | <button class="js-news-swiper-button-next"> |
170 | <svg> | 172 | <svg> |
171 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> | 173 | <use xlink:href="{{ asset('images/sprite.svg#arrow') }}"></use> |
172 | </svg> | 174 | </svg> |
173 | </button> | 175 | </button> |
174 | </div> | 176 | </div> |
175 | </div> | 177 | </div> |
176 | 178 | ||
177 | <div class="swiper js-news-swiper"> | 179 | <div class="swiper js-news-swiper"> |
178 | <div class="swiper-wrapper"> | 180 | <div class="swiper-wrapper"> |
179 | 181 | ||
180 | @foreach ($news as $new) | 182 | @foreach ($news as $new) |
181 | <div class="swiper-slide"> | 183 | <div class="swiper-slide"> |
182 | <div class="news__item"> | 184 | <div class="news__item"> |
183 | <img src="{{ asset(Storage::url($new->image)) }}" alt="" class="news__item-pic"> | 185 | <img src="{{ asset(Storage::url($new->image)) }}" alt="" class="news__item-pic"> |
184 | <div class="news__item-body"> | 186 | <div class="news__item-body"> |
185 | <time datetime="{{ date('d.m.Y H:i:s', strtotime($new->created_at)) }}" class="news__item-date">{{ date('d.m.Y H:i:s', strtotime($new->created_at)) }}</time> | 187 | <time datetime="{{ date('d.m.Y H:i:s', strtotime($new->created_at)) }}" class="news__item-date">{{ date('d.m.Y H:i:s', strtotime($new->created_at)) }}</time> |
186 | <span class="news__item-title">{{ $new->title }}</span> | 188 | <span class="news__item-title">{{ $new->title }}</span> |
187 | <span class="news__item-text">{{ mb_strimwidth($new->text, 0, 100) }}</span> | 189 | <span class="news__item-text">{{ mb_strimwidth($new->text, 0, 100) }}</span> |
188 | <a href="{{ route('detail_new', ['new' => $new->id]) }}" class="news__item-more button button_light">Читать далее</a> | 190 | <a href="{{ route('detail_new', ['new' => $new->id]) }}" class="news__item-more button button_light">Читать далее</a> |
189 | </div> | 191 | </div> |
190 | </div> | 192 | </div> |
191 | </div> | 193 | </div> |
192 | @endforeach | 194 | @endforeach |
193 | 195 | ||
194 | </div> | 196 | </div> |
195 | <div class="swiper-pagination"></div> | 197 | <div class="swiper-pagination"></div> |
196 | </div> | 198 | </div> |
197 | <a href="{{ route('news') }}" class="news__all button button_light">Все новости</a> | 199 | <a href="{{ route('news') }}" class="news__all button button_light">Все новости</a> |
198 | 200 | ||
199 | </div> | 201 | </div> |
200 | </section> | 202 | </section> |
201 | @endif | 203 | @endif |
202 | 204 | ||
203 | <section class="info"> | 205 | <section class="info"> |
204 | <div class="container"> | 206 | <div class="container"> |
205 | <img src="images/5.png" alt="" class="info__pic"> | 207 | <img src="images/5.png" alt="" class="info__pic"> |
206 | <div class="info__body"> | 208 | <div class="info__body"> |
207 | <div class="title info__title"><h4>Мы в социальных сетях</h4></div> | 209 | <div class="title info__title"><h4>Мы в социальных сетях</h4></div> |
208 | <div class="info__item"> | 210 | <div class="info__item"> |
209 | <div class="info__text">Телеграм — Подпишитесь на наш телеграм канал и получайте уведомления о | 211 | <div class="info__text">Телеграм — Подпишитесь на наш телеграм канал и получайте уведомления о |
210 | новых вакансиях прямо на свой смартфон</div> | 212 | новых вакансиях прямо на свой смартфон</div> |
211 | <a href="{{ $companies[0]->telegram }}" class="info__link" style="background:#20A0E1"> | 213 | <a href="{{ $companies[0]->telegram }}" class="info__link" style="background:#20A0E1"> |
212 | <svg> | 214 | <svg> |
213 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> | 215 | <use xlink:href="{{ asset('images/sprite.svg#tg') }}"></use> |
214 | </svg> | 216 | </svg> |
215 | Телеграм | 217 | Телеграм |
216 | </a> | 218 | </a> |
217 | </div> | 219 | </div> |
218 | <div class="info__item"> | 220 | <div class="info__item"> |
219 | <div class="info__text">ВКонтакте — Лучшие вакансии за неделю выкладываем именно тут, информация | 221 | <div class="info__text">ВКонтакте — Лучшие вакансии за неделю выкладываем именно тут, информация |
220 | о судоходных компаниях, инструкции по работе с сайтом, конкурсы и многое другое</div> | 222 | о судоходных компаниях, инструкции по работе с сайтом, конкурсы и многое другое</div> |
221 | <a href="{{ $companies[0]->vkontact }}" class="info__link" style="background:#2787F5"> | 223 | <a href="{{ $companies[0]->vkontact }}" class="info__link" style="background:#2787F5"> |
222 | <svg> | 224 | <svg> |
223 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> | 225 | <use xlink:href="{{ asset('images/sprite.svg#vk') }}"></use> |
224 | </svg> | 226 | </svg> |
225 | ВКонтакте | 227 | ВКонтакте |
226 | </a> | 228 | </a> |
227 | </div> | 229 | </div> |
228 | </div> | 230 | </div> |
229 | </div> | 231 | </div> |
230 | </section> | 232 | </section> |
231 | @endsection | 233 | @endsection |
232 | 234 |