Улучшение логики страницы 404

 
Посетитель
small user social cms
Медаль
Сообщений: 272
В общем так. У меня на сайте реализована рассылка сообщений.
Одно из писем имеет ссылку, ведущую на страницу редактирования профиля пользователя. Т.е. http://site.ru/users/id/edit/theme.
При переходе по ссылке, если пользователь не авторизован - конечно же появляется страница 404. Она говорит, что "Страница не найдена". Для людей, которые связаны мало-мальски с сайтостроением - логика железобетонная: закрытый раздел - нет доступа - 404.

Но обычных пользователей это вводит в заблуждение и об этом мне на сайте часто говорят. Сами представьте, проходите по ссылке в свой профиль на одноклассниках (если не авторизованы), а вам в лоб сообщение - "Страницы нет". Обычно они в таком случае редиректят на страницу входа на сайт.

Решил поправить дело таким образом. Ссылка http://site.ru/users/1/edit/theme - если пользователь не авторизован, его должно перенаправить на страницу авторизации - после авторизации обратно на http://site.ru/users/id/edit/theme.

Предполагаю, что прописать это можно в файле systems/controllers/core.php. Не ошибся. Нашел кусок кода отвечающий за ошибку 404
Код PHP:
  1.  
  2. /*** Показывает сообщение об ошибке 404 и завершает работу*/
  3. public static function error404(){
  4.  
  5. cmsEventsManager::hook('error_404', self::getInstance()->uri);
  6.  
  7.  
  8. header("HTTP/1.0 404 Not Found");
  9. header("HTTP/1.1 404 Not Found");
  10. header("Status: 404 Not Found");
  11.  
  12. cmsTemplate::getInstance()->renderAsset('errors/notfound');
  13. die();
  14.  
  15. }
  16.  
Тут все и встало, не пойму, как прописать тут условие чтобы при обращении к ссылке http://site.ru/users/id/edit/theme происходил редирект на страницу /auth/login, а после авторизации обратно на http://site.ru/users/id/edit/theme

При этом предполагаю, что нужно будет еще править и login.php

Заранее спасибо за участие.
Редактировалось: 3 раз (Последний: 19 января 2016 в 09:17)
Посетитель
small user social cms
Медаль
Сообщений: 272
Виктор:
Но в этом случае любая 404 будет требовать наличия авторизации.
Интересное решение.

Виктор:
Хотя... (Если НЕ найдете, как вызвать функцию redirect() из controller.php, потому что я не нашел)
404 из core.php

Вы хотите сказать, что этот код не сработает?
Виктор:
Код PHP:
  1. if (!cmsUser::isLogged()) { $this->redirect('/auth/login?back='.$_SERVER['REQUEST_URI']); }
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 272
Пошел проверять ))) +ище вам!
Посетитель
small user social cms
Медаль
Сообщений: 272
Все работает! Спасибо!
Посетитель
small user social cms
Медаль
Сообщений: 160
Спасибо также пригодилось!
http://phpfan.ru
Портал Крыма
Посетитель
small user social cms
Сообщений: 56
Не подскажете где находится шаблон 404 ошибки
Посетитель
small user social cms
Медаль
Сообщений: 272
Alekskrug, templates/default/assets/errors/notfound.tpl.php
Посетитель
small user social cms
МедальПочетный донор проекта
Сообщений: 560
Azami, править файл ядра в данном случае необходимости нет. Вы можете перехватить событие "error_404" хуком в любом своём компоненте и сделать в этом хуке все желаемые проверки и редиректы.
В документации есть описание " Обработки событий".
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1827
Создайте в любом компоненте в папке с хуками файл хука с имненем error_404.php c таким содержанием. В содержании Test меняем на имя компонента куда пристроили ну и в манифест его
Спойлер
должен работать
Мой блог с плюшками
Посетитель
small user social cms
Медаль
Сообщений: 272
Что значит
kreator:
ну и в манифест его
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1827
В майле манифеста надо хук прописать чтоб он обрабатываался
Мой блог с плюшками
Посетитель
small user social cms
Медаль
Сообщений: 272
kreator, создал хук с содержанием
Спойлер
Закинул в папку с хуками в \system\controllers\users\hooks
Указал в манифесте
Кидает на 404
Редактировалось: 1 раз (Последний: 20 января 2016 в 21:33)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.