Страница 404 ошибки в дизайне сайта

#1 16 августа 2014 в 16:46
Все привет!

Решил сделать страницу ошибки 404 в дизайне сайта.
Да еще и чтобы текст можно было контролировать через админку.

Везде для вывода 404 ошибки используется функция error404().
Лежит она в /system/core/core.php.

Шаблон страницы в изначальном варианте загружается строкой:
  1. cmsTemplate::getInstance()->renderAsset('errors/notfound');
Ну а нам нужно сгенерировать шаблон.
Взял по примеру генерации страницы контента. Использовал системные функции.

Итог:

  1. $content_model = cmsCore::getModel('content');
  2. $item = $content_model->getContentItem('pages', 14); //14 - id конкретной страницы в админке
  3. $ctype = $content_model->getContentTypeByName('pages');
  4. $fields = $content_model->getContentFields('pages');
  5.  
  6. cmsTemplate::getInstance()->render('item_view', array(
  7. 'ctype' => $ctype,
  8. 'fields' => $fields,
  9. 'props' => isset($props) ? $props : false,
  10. 'props_values' => isset($props_values) ? $props_values : false,
  11. 'item' => $item,
  12. 'is_moderator' => 0,
  13. 'user' => 0
  14. ));

Но че-то не работает этот итог...

Кто может помочь?
#2 16 августа 2014 в 17:58
по моему проще вставить в файл 404error одну строчку
  1. <meta http-equiv="Refresh" content="1; URL=/ваша страница ошибки">
#3 16 августа 2014 в 18:04
наверно лучше <meta http-equiv="Refresh" content="0; URL=/ваша страница ошибки">
что бы сразу. у меня стоит 2 секунды в течении которых пользователь все таки видит страницу error.php на ней уведомление что страница не найдена поэтому сейчас вы будете перемещены в нужный мне раздел. А так если свою страницу в дизайне делать логичнее сразу редирект и там уже оформлять
#4 16 августа 2014 в 18:17
В этом случае сначала посетителю грузится стандартная страница ошибки без дизайна.
Через секунду идет редирект. За эту секунду посетитель может уйти.
Да и загрузка дополнительной страницы.

Не очень элегантное решение.
#5 16 августа 2014 в 18:19
С нулем лучше :)
Но проблема загрузки доп страницы остается.

И на серче говорят, что роботы поисковые не любят такие манипуляции.
#6 16 августа 2014 в 18:27

роботы поисковые не любят такие манипуляции.

Антон
они (роботы) и 404 не очень то любят — считаю что такой подход для данной страницы вполне оправдан)
#7 16 августа 2014 в 18:41

И на серче говорят, что роботы поисковые не любят такие манипуляции.

Антон
ну понятно что роботы не любят, но во первых вы же не на какой то левый сайт с вирусами редирект устраиваете, а на свой же, технические моменты, бывает) ну и я думаю это не так массово у вас. Какой то незначительный процент будет попадать на этот редирект. Так что проблем вызвать не должно)
#8 18 августа 2014 в 18:13
Но все-таки дотошный я...
Сделал пока просто Аякс подгрузка шапки сайта в стандартный файл страницы 404. Так хоть страница не перегружается лишний раз.
Если найду решение через двиг сделать, напишу.

Тему не закрываю, можт кто решение предложит.
#9 18 августа 2014 в 23:15
Антон, все проще, опишу чтобы всем понятно было:
/templates/{ваш шаблон}/assets/errors/notfound.tpl
перед:
  1. </body>
вставляем
  1. <?php echo file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/news/9-rossijane-stali-pervymi-na-chempionate-mira.html');?>
создаем свою страницу с информацией об ошибке и рисуем на нее ссылку
#10 19 августа 2014 в 16:28
Хм не работает эта функция у меня scratch
#11 19 августа 2014 в 16:48
Антон, Безобразие!!! это чистый PHP. Предлагаю ознакомиться с функцией file_get_contents, там все просто. Попробуй подставить прямую ссылку на любую страницу (хоть стороннего сайта), без всяких $_SERVER
#12 19 августа 2014 в 16:49
Посоветую обращать внимание чтобы теги <?PHP ?> не были внутри тегов PHP
#13 19 августа 2014 в 16:59
Да я в курсе, что это чистый php😥Уже погуглил
Предполагаю, что с настройками сервера что-то не так.
Покопаю на днях.
#14 19 августа 2014 в 20:48
Антон,
  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($curl, CURLOPT_URL, 'http://'.$_SERVER['HTTP_HOST'].'/shop/119-monoblok-acer-veriton-z2650g.html');
  5. $result = curl_exec($curl);
  6. curl_close($curl);
  7. echo($result);
  8. ?>
#15 19 августа 2014 в 20:57

Да я в курсе, что это чистый php

Антон
Да я привык уже жувать. Заметил на форуме твой виджет. ;)
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.