Jump to content
dreb

Вопрос по странице 404й ошибки и не найденных категорий/товаров

Recommended Posts

Всем привет!

 

Уже второй день ищу информацию, но не могу найти ничего путного. Начну с того, что я только постигаю азы создания интернет магазинов и программирования в целом, прошу сразу не кидаться тапками, если это элементарщина B)

В общем, появился такой вопрос. Имеем оформленную страницу =error/not_found , если в адресной строке пишем что нибудь типа: сайт.ком/рандомный_текст - правильно подгружает эту страницу:

 

2020-05-21_21-14-15.thumb.png.94e0bfaf0a5e371315f5a9346bb290c1.png

 

Но, если в адресную строку пишем сайт.ком/index.php?route=product/category&path=несуществующий_айди , то открывается страница по роуту =product/category с текстом, что категория не найдена, соответственно так же и с товарами, и со статьями. Изначально верстка не подразумевала, что эти страницы так же будут выводить и ошибки, и получается нечто нелицеприятное. (причем, я так понял, загружается часть not_found.tpl, потому что  пытаются подгрузиться переменные, которые у меня там указаны и прописаны в not_found.php, но которых нет в category.php, соответственно получается ошибка):

 

2020-05-21_21-15-31.thumb.png.5b4b83e02d3217d0e37486188af6aaac.png

 

В конечном итоге, сайт будет работать с ЧПУ SEO PRO by Freelanser, и маловероятно, что кто либо попытается вручную перейти на сайт.ком/index.php?route=product/category&path=несуществующий_айди , но тем не менее, хотелось бы исключить такую возможность.

 

В общем-то вопрос и сам напрашивается, возможно ли как то сделать, что бы в таком случае подгружалась =error/not_found , и если да, то как?

P.S. На сайт зайти не пытайтесь, он пока на локальном сервере :)

Share this post


Link to post
Share on other sites

в первом случае у вас проходит через контроллео
А во втором - только шаблон, а контроле not_found остается в стороне

Share this post


Link to post
Share on other sites

Ну можно попробовать после

 

$this->response->setOutput($this->load->view('product/category', $data));
		} else {

вставить

			return $this->load->controller('error/not_found');

 

Share this post


Link to post
Share on other sites
1 час назад, chukcha сказал:

в первом случае у вас проходит через контроллео
А во втором - только шаблон, а контроле not_found остается в стороне

 

Как это работает я вроде как понимаю, но не до конца :) Загадкой для меня остаётся, как контроллер категорий подгружает часть вьюхи not_found

 

47 минут назад, Otvet сказал:

Ну можно попробовать после

 


$this->response->setOutput($this->load->view('product/category', $data));
		} else {

вставить


			return $this->load->controller('error/not_found');

 

 

Опробовал этот способ, сработало, но не так как хотелось бы. Теперь текст подгружается из not_found, ошибки по переменным пропали, но всё форматирование страницы осталось от category

2020-05-21_23-37-00.thumb.png.bc696d731d62c808613b5e1fe8ac3597.png

 

Вообще, насколько я понимаю, надо сделать редирект на страницу с ошибкой, только как это организовать, даже представить не могу 

 

Share this post


Link to post
Share on other sites
1 час назад, Otvet сказал:

Ну можно попробовать после

 


$this->response->setOutput($this->load->view('product/category', $data));
		} else {

вставить


			return $this->load->controller('error/not_found');

 

$this->request->get['route'] = 'error/not_found';

Но как-то костыльно смотрится
 

Share this post


Link to post
Share on other sites

уж лучше чем на этапе чпу-контроллера организовывать проверки существования/включенности по id

 

 

 

3 часа назад, dreb сказал:

 

Вообще, насколько я понимаю, надо сделать редирект на страницу с ошибкой

 

НЕТ!

Share this post


Link to post
Share on other sites

@chukcha @Otvet  Спасибо огромное, решение, вроде как получилось рабочим! 

 

11 часов назад, chukcha сказал:

$this->request->get['route'] = 'error/not_found';

 

Но как-то костыльно смотрится
 

 

Что одному костыль, другому гениальный код :) Мне кажется, если копнуть магазин что я верстаю, то можно сделать целый "Сборник костылей 2020, актуальные хиты" :-D

 

8 часов назад, Otvet сказал:

НЕТ!

 

Категорично. Хотелось бы узнать почему так, плохо влияет на SEO?

Share this post


Link to post
Share on other sites
14 hours ago, dreb said:

Как это работает я вроде как понимаю, но не до конца :) Загадкой для меня остаётся, как контроллер категорий подгружает часть вьюхи not_found

 

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

Сбросим левую колонку перед тем как отправить данные
$data['column_left'] = '';

Теперь у Вас будет страница ошибки,  с пустой левой колонкой.

Контроллер только указывает какую вьюху ему грузить и передает данные.

$this->response->setOutput($this->load->view('error/404', $data));

Смотрите сам файл вьюхи not_found.twig

 

Контроллер собирает все в массив $data, после чего отдает все это добро вьюхе, потому Вам нужно заботится о переменных в not_found.php перед загрузкой самой вью

14 hours ago, dreb said:

(причем, я так понял, загружается часть not_found.tpl, потому что  пытаются подгрузиться переменные, которые у меня там указаны и прописаны в not_found.php, но которых нет в category.php, соответственно получается ошибка):

Share this post


Link to post
Share on other sites
5 часов назад, dreb сказал:

Категорично. Хотелось бы узнать почему так, плохо влияет на SEO?

Потому что важен  первый ответ а не отображение страницы.
и. Г может посчитать его как Soft 404
 

Share this post


Link to post
Share on other sites
В 22.05.2020 в 14:54, korya сказал:

 

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

Сбросим левую колонку перед тем как отправить данные
$data['column_left'] = '';

Теперь у Вас будет страница ошибки,  с пустой левой колонкой.

Контроллер только указывает какую вьюху ему грузить и передает данные.

$this->response->setOutput($this->load->view('error/404', $data));

Смотрите сам файл вьюхи not_found.twig

 

Контроллер собирает все в массив $data, после чего отдает все это добро вьюхе, потому Вам нужно заботится о переменных в not_found.php перед загрузкой самой вью

 

В 22.05.2020 в 17:12, chukcha сказал:

Потому что важен  первый ответ а не отображение страницы.
и. Г может посчитать его как Soft 404
 

 

Спасибо за развёрнутые ответы!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.