Успешно использую модуль Privatemsg. Одна проблема: когда пользователь получает уведомление о ЛС на e-mail, открывает ссылку на сообщение (http://www.rosnasledie.ru/messages/view/11), если он предварительно не залогинился, то его выкидывает на страницу 404 "Страница не найдена". У меня она, оказывается, даже без колонок (блок "логин" в колонке). Но не в этом дело. Колонки можно сделать. Хотелось бы ещё, чтобы получилось какой-то осмысленный текст: "Чтобы просмотреть свои личные сообщения, пожалуйста, зайдите на сайт: [логин, пароль]". Как это проще всего сделать? Писать php-код для 404(!) и в ней анализировать $_SERVER['REQUEST_URI'] (или что там в друпале, не помню) мне кажется извращением.
Комментарии
Я этот вопрос решил таким образом.
1. создаем красивую страницу со всеми возможными вариантами событий почему попадаешь на эту страницу. У меня там как раз первым пунктом:
Если вы попали сюда при попытке прочитать Ваше личное сообщение, пожалуйста <a href= /user>войдите</a> на сайт под своим именем.
2. Идем по пути http://ХХХХХХХ/admin/settings/error-reporting
Вставляем адрес созданной страницы в нужное место.
3. Радуемся полученному результату.
Может кто нибудь сможет ответить на мои вопросы на эту же тему:
1. Как вывести эту страницу в формате обычной ноды? Чтобы она весь дизайн сайта не ломала. Какой .tpl.php за это отвечает?
2. Возможно ли узнать по какому пути произошла ошибка, чтобы более корректно объяснить пользователю в чем он не прав?
Ну я и говорю - извращение.
Но я ещё добавил на этой же странице, сразу после текста, формочку входа: drupal_get_form('user_login_block'). Зачем человеку ещё куда-то прыгать?
Мне странно то, что /messages/view/* даёт "Page not found", а /messages/new/* - "Access denied", это вот непонятно.
Ответы на вопросы:
1) Шоб ничё не ломала, пиши свою тему :). Или задавай конкретный вопрос по конкретной теме, что тут ещё сказать?
Может, тебе просто не нравится, что страница "Page not found" выводится без блоков и прочей фигни? Ну оно так устроено и даже описано в комментариях (чтобы снизить нагрузку на сервер, бла-бла). Если будешь искать и не найдёшь, то напиши. Но я не советую это всё включать: ты смотрел когда-нибудь логи, чего только не пытаются запросить с сайта всякие спамеры-роботы... И каждому ещё показывать блоки? Да сервер сойдёт с ума.
2) "Путь" - ты имеешь в виду URL (URI)? Если да, то обычным $_SERVER['REQUEST_URI'] проще всего. Я думаю, что это быстрее, чем искать для этого специализированную функцию в Drupale (чтобы она вызвала то же самое :).
Такое впечатление, что $_SERVER['REQUEST_URI'] в Друпале закрыт, по крайней мере я из него ничего получить не смог. Поэтому и спросил как это в Друпале делается.
Нет, у меня работает (Drupal 6.12). Может, это от настроек сервера зависит, в php.ini что-нибудь? А если вне Drupala просто файлик кинуть: <?php echo $_SERVER['REQUEST_URI']; ?>
Проблема действительно требует внимания.
Страница, гласящая что требуемая страница отсутствует или удалена, может отпугнуть пользователя.
Есть патч http://drupal.org/files/issues/privatemsg_access_denied_6_x_1_2.patch который перенаправляет неавторизированного пользователя на страницу 403 ("Вы не зарегестрированны для просмотра этой страницы")
Паралельно можно установить модуль Redirect 403 to User Login который автоматически будет перенаправлять пользователей со страницы 403 на страницу авторизации.
Патч рабочий для версии 6.x-1.4. В версии 6.x-2.x-Dev эти изменения внесены.