Поговорим о выводе ошибок в Joomla?

0 Пользователей и 1 Гость просматривают эту тему.
  • 25 Ответов
  • 588 Просмотров
*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Недавний топик побудил меня подумать о стандартном выводе ошибок через файл шаблона error.php. В этой теме приведена ссылка на мануал, в котором, на мой взгляд, описан вредный хак, а не способ реализации: суть заключается в том, что при обращении к файлу error.php вызывается редирект на другую страницу с материалом и отдаётся заголовок с кодом 404. На мой взгляд, этот способ не только корявый в плане реализации, но его так же опасно использовать с точки зрения SEO. К тому же, он не позволяет вывести описание ошибки (потом попробуй угадай).

Признаться, мне было всегда проще сделать HTML версию страницы, чем динамически отображать шаблон с подключенными внешними ресурсами и модулями. После нескольких часов кодинга я разработал свой динамический метод вывода ошибок, который выводит все скрипты, стили, модули — рендерит шаблон через index.php. Хотелось бы поделиться им
« Последнее редактирование: 14.02.2016, 09:44:47 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #1 : 12.02.2016, 22:50:15 »
Мануал корявый
Роутер еще корявее - вот объясни мне, когда неверный URL ведет на
1) другую страничку (дубль)
2) перехватывается системой и доступен в менеджере перенаправлений
3) не перехватывается плагином перенаправлений но ведет на 404 от движка
4) вообще не видится и отдается ответ напрямую от nginx\apache

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #2 : 12.02.2016, 23:01:59 »
Внутри файла error.php можно получить и код ошибки (для дальнейшего формирования нужного хедера) и ее описание:
Код: php
$error_code = $this->error->getcode();
$error_description = htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8');

а уж получив эти данные, можно что угодно с ними делать и передавать куда и как угодно...

*

AlekVolsk

  • Профи
  • ********
  • 6301
  • 336
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #3 : 12.02.2016, 23:04:32 »
в случае возникновения
4) вообще не видится и отдается ответ напрямую от nginx\apache
вопрос уже не к J ))

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #4 : 12.02.2016, 23:24:57 »
в случае возникновения вопрос уже не к J ))
Почему?
Я же использую дефолтный .htaccess!

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #5 : 13.02.2016, 00:33:45 »
Цитировать
вообще не видится и отдается ответ напрямую от nginx\apache
Тоже с этим сталкивался: так и не понял причину.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

voland

  • Профи
  • ********
  • 9378
  • 421
  • СКАЙП утерян! Пишите в телеграм @volandku
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #6 : 13.02.2016, 00:34:33 »
Тоже с этим не раз сталкивался: так и не понял причину.
Во-во.
Даешь глубокое исследование!

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #7 : 13.02.2016, 05:12:44 »
Вот и сама реализация:

(Удалено по причине потери актуальности)
« Последнее редактирование: 14.02.2016, 01:40:51 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #8 : 13.02.2016, 19:17:28 »
Кстати, существуют ли способы отрендерить шаблон методами движка?
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #9 : 14.02.2016, 01:37:37 »
Кстати, существуют ли способы отрендерить шаблон методами движка?

Придётся самому отвечать на свой вопрос :)

Удалось здорово сократить и улучшить код: теперь в шаблоне нет никаких ограничений, т.к. он выполняется в контексте JDocumentHTML, а не в контексте JDocumentError. На дефолтном Protostar работает отлично, все стандартные методы и свойства доступны из псевдопеременной $this.
« Последнее редактирование: 14.02.2016, 09:53:55 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #10 : 14.02.2016, 09:53:03 »
Окончательно закрыл для себя вопрос создания страницы ошибок — теперь эта страница ничем не отличается от обычных страниц, а её контент обрабатывается системными плагинами. Содержимое страницы может быть изменено как угодно, при этом оно не будет зависеть от разметки и оформления шаблона. И что самое главное — для всей этой красоты не нужно устанавливать никаких сторонних расширений — нужно всего лишь создать один файл и изменить другой. Кому интересно — выложил на своём сайте полную реализацию.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

Taatshi

  • Support Team
  • *****
  • 4782
  • 452
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #11 : 14.02.2016, 11:56:03 »
А зачем обрабатывать 404-ю плагинами?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3  /  ОТЗЫВЫ 
Минимальная ставка за платные услуги 1000 рэ Связь: telegram - Taatshi, почта - Taatshi на яндексе.

*

dmitry_stas

  • Профи
  • ********
  • 9666
  • 930
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #12 : 14.02.2016, 12:22:59 »
честно говоря вообще не понимаю, зачем это :) разве что из спортивного интереса... что не так было с базовым error.php?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #13 : 14.02.2016, 16:17:36 »
А зачем обрабатывать 404-ю плагинами?
Потому что плагинами обрабатываются все страницы. Чем 404 хуже? Системный плагин SEF, для примера, надо запустить, чтобы скорректировать ссылки? Надо. В предыдущей версии парсил регулярками -- не понравилось. Решил плагином =)

Цитировать
честно говоря вообще не понимаю, зачем это Azn разве что из спортивного интереса... что не так было с базовым error.php?
Что конкретно вы не понимаете? Если вы будете использовать базовый error.php, то при любом изменении шаблона нужно отдельно менять дизайн, раскладку в error.php, потому что базовый error.php к шаблону не относится.

Короче, народ не понял ничего :) Мда...
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

  • Практически профи
  • *******
  • 2506
  • 367
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #14 : 14.02.2016, 16:39:52 »
Если вы будете использовать базовый error.php, то при любом изменении шаблона нужно отдельно менять дизайн, раскладку в error.php, потому что базовый error.php к шаблону не относится.
Зачем дизайн менять? Вот часто используемый известный вариант error.php с подгрузкой статьи "404":
Спойлер
[свернуть]
Что в этом варианте вас не устроило?
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

dmitry_stas

  • Профи
  • ********
  • 9666
  • 930
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #15 : 14.02.2016, 16:44:58 »
Что конкретно вы не понимаете?
та не, я ниче :) я вообще за любой кипиш кроме голодовки :) просто тут так сказать глубину мысли не познал :) например

Если вы будете использовать базовый error.php, то при любом изменении шаблона нужно отдельно менять дизайн
а в вашем решении разве не надо менять дизайн? разница только в том, что это внешний файл и его копировать надо? так скопировать просто error.php из старого шаблона, и все. разве нет?

потом
базовый error.php к шаблону не относится
это как? как это не относится? может мы о разных error.php? я о том, который в корне шаблона.

дальше, обработка плагинами. ну тут вопрос спорный... я наверное все таки склоняюсь в сторону, что 404 не нужно обрабатывать плагинами. потому что 404 рисуется раз и навсегда, и я бы не хотел чтобы при установке какого либо плагина, который нужен во фронте, 404 поломалась по недосмотру из-за него.

поэтому не то, чтобы
Короче, народ не понял ничего :) Мда...
задумку поняли. не поняли - зачем? :)
Спойлер
[свернуть]
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #16 : 14.02.2016, 16:50:48 »
Зачем дизайн менять? Вот часто используемый известный вариант error.php с подгрузкой статьи "404":
Спойлер
[свернуть]
Что в этом варианте вас не устроило?

fsv, ну я уже написал в начале. Во-первых, не известно, как поисковики к этому отнесутся: пользователю отдаётся 404 ошибка, а его самого перебрасывает на другую страницу. Возможна пессимизация. Во-вторых, при перенаправлении теряется контекст JDocumentError — мы уже не сможем работать с объектом ошибки, например, для того, чтобы вывести описание. Ну и последнее: это не всегда работает корректно, и я считаю, что это хак.

Цитировать
а в вашем решении разве не надо менять дизайн?
Нет. Дизайн и раскладка берётся из шаблона со всеми стилями, скриптами, модулями. По-сути, мой вариант — это обычная страница, только позиция компонента (который отсутствует при ошибке), замещается телом ошибки.

Цитировать
дальше, обработка плагинами. ну тут вопрос спорный... я наверное все таки склоняюсь в сторону, что 404 не нужно обрабатывать плагинами. потому что 404 рисуется раз и навсегда, и я бы не хотел чтобы при установке какого либо плагина, который нужен во фронте, 404 поломалась по недосмотру из-за него.
Вы отдаёте заголовок 404 и после этого можете менять страницу ошибки как захочется — боту главное получить заголовок.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

  • Практически профи
  • *******
  • 2506
  • 367
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #17 : 14.02.2016, 16:55:23 »
fsv, ну я уже написал в начале. Во-первых, не известно, как поисковики к этому отнесутся: пользователю отдаётся 404 ошибка, а его самого перебрасывает на другую страницу.
кого куда перебрасывает?
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

vipiusss

  • Профи
  • ********
  • 5522
  • 318
  • JoomlaNet
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #18 : 14.02.2016, 17:03:36 »
пока почитал, подумал: а не хотите в теме всё не расказывать и этим самым обламать и туда: в комм раздел? и там писать
может не прав, что подумал.имхо.
Миграция, установка, обновление версий Joomla  |  Создание сайтов "под ключ"  |  Эксклюзивные заглушки "offline"  |  Работа с "напильником" над шаблонами и расширениями

*

dmitry_stas

  • Профи
  • ********
  • 9666
  • 930
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #19 : 14.02.2016, 17:14:51 »
Цитировать
Нет. Дизайн и раскладка берётся из шаблона со всеми стилями, скриптами, модулями. По-сути, мой вариант — это обычная страница, только позиция компонента (который отсутствует при ошибке), замещается телом ошибки.
понял наконец-то :) уж извините, вообще не думал о таком варианте. считаю его неверным.

Цитировать
пользователю отдаётся 404 ошибка, а его самого перебрасывает на другую страницу.
никуда никого не перебрасывает. все 1:1 как и в вашем варианте, за исключением того, что ваш вариант экономнее по ресурсам сервера.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #20 : 14.02.2016, 18:06:23 »
кого куда перебрасывает?
А, простите. Не увидел: там file_get_contents. Похожий способ просто есть, но только с перенаправлением.

Цитировать
никуда никого не перебрасывает. все 1:1 как и в вашем варианте, за исключением того, что ваш вариант экономнее по ресурсам сервера.
Ну я бы не сказал, что один в один. Мы теряем контекст JDocumentError, мы не можем вывести описание ошибки и использовать методы этого объекта. Гибкость также теряется: если сайт мультиязычный, то для каждого типа ошибки мы должны наплодить по 2-3 материала на разных языках. Наконец имеется лишний запрос (это, конечно, не очень существенно, но, я считаю, что криво).

А если материал вдруг удалить, то вообще будет полное разочарование :)
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

  • Практически профи
  • *******
  • 2506
  • 367
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #21 : 14.02.2016, 18:51:08 »
Мы теряем контекст JDocumentError, мы не можем вывести описание ошибки и использовать методы этого объекта.
Код: php
if ($this->error->getCode() == '404') 
{
echo $this->error->getMessage(). '<br>';
echo '<pre>'.print_r($this, true).'</pre>';   // JDocumentError Object
}

А если материал вдруг удалить, то вообще будет полное разочарование :)
если у бабушки..., то это уже дедушка
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

dmitry_stas

  • Профи
  • ********
  • 9666
  • 930
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #22 : 14.02.2016, 18:57:25 »
теряется контекст JDocumentError - это имеется в виду когда делаем file_get_contents. это же уже не 404.

в целом так и есть, предложенный вариант более гибок чем file_get_contents. кто любит так делать 404 - можно советовать :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #23 : 14.02.2016, 18:58:34 »
fsv

Ну и как вы сделаете это в материале? Представьте, что у вас SQL ошибка, нужно вывести описание, а вы цепляете другой материал и выводите страницу данного материала. Где вы будете выводить там описание и как?

Цитировать
если у бабушки..., то это уже дедушка
Ну... это отсылки к рыжему и конопатому. А вот при недоступности страницы реально может случиться что-то вроде бесконечного перенаправления, только в 100 раз хуже. Как откроет бот удалённую страницу — и конец настанет вашему серверу :)
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг

*

fsv

  • Практически профи
  • *******
  • 2506
  • 367
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #24 : 14.02.2016, 19:45:38 »
теряется контекст JDocumentError - это имеется в виду когда делаем file_get_contents. это же уже не 404.
да, в file_get_contents не будет ошибки. При ответе не об этом думал, потому что…

Ну и как вы сделаете это в материале? Представьте, что у вас SQL ошибка, нужно вывести описание, а вы цепляете другой материал и выводите страницу данного материала. Где вы будете выводить там описание и как?
… я не буду выводить все подряд ошибки. Это вредно для здоровья. Для юзера хватит стандартных фраз в материале, никто письма вам писать не будет. Ошибка – в логах.
И да, имея текст ошибки в переменной, в чем проблема его использовать на подгруженной в другую переменную странице? Извращение какое-то, но это так, теоретически...

Да я не против. Подобные раскопки на самом деле очень полезны. Всегда что-то нужное вынесешь. Только по этой теме – я так пока повторять не готов.
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

Филипп Сорокин

  • Практически профи
  • *******
  • 1781
  • 135
Re: Поговорим о выводе ошибок в Joomla?
« Ответ #25 : 14.02.2016, 21:45:21 »
Описание определенных ошибок можно сделать доступным для супер-администраторов. Все в одном файле, не нужно создавать никакие материалы. Вот вы говорите, что это извращение - выводить красиво отформатированное описание ошибки в позиции компонента, а я считаю извращением при отладке лезть в логи. Обновил страницу - лезь опять в логи. Зачем? Логи проверять, конечно, полезно, но не в этом случае. Ещё я считаю извращением подгружать какие-то переменные в других пространствах имён. А при запросе к другому материалу подгружать в этом материале переменные - это настоящее извращение.
« Последнее редактирование: 14.02.2016, 21:49:21 от Филипп Сорокин »
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг